데이터베이스 관리¶
데이터베이스 사용자¶
CUBRID 데이터베이스 사용자는 동일한 권한을 갖는 멤버를 가질 수 있다. 사용자에게 권한 A가 부여되면, 상기 사용자에게 속하는 모든 멤버에게도 권한 A가 동일하게 부여된다. 이와 같이 데이터베이스 사용자와 그에 속한 멤버를 ‘그룹’이라 하고, 멤버가 없는 사용자를 ‘사용자’라 한다.
CUBRID는 DBA와 PUBLIC이라는 사용자를 기본으로 제공한다.
DBA는 모든 사용자의 멤버가 되며 데이터베이스의 모든 객체에 접근할 수 있는 최고 권한 사용자이다. 또한, DBA만이 데이터베이스 사용자를 추가, 편집, 삭제할 수 있는 권한을 갖는다.
DBA를 포함한 모든 사용자는 PUBLIC의 멤버가 되므로 모든 데이터베이스 사용자는 PUBLIC에 부여된 권한을 가진다. 예를 들어, PUBLIC 사용자에 권한 B를 추가하면 데이터베이스의 모든 사용자에게 일괄적으로 권한 B가 부여된다. 사용자의 추가, 권한 부여에 대한 자세한 내용은 사용자 관리을 참고한다.
databases.txt 파일¶
CUBRID에 존재하는 모든 데이터베이스의 위치 정보는 databases.txt 파일에 저장하는데, 이를 데이터베이스 위치 정보 파일이라 한다. 이러한 데이터베이스 위치 정보 파일은 데이터베이스의 생성, 이름 변경, 삭제 및 복사에 관한 유틸리티를 수행하거나 각 데이터베이스를 구동할 때에 사용되며, 기본으로는 설치 디렉터리의 databases 디렉터리에 위치하고, CUBRID_DATABASES 환경 변수로 디렉터리 위치를 지정할 수 있다.
db_name db_directory server_host logfile_directory
데이터베이스 위치 정보 파일의 라인별 형식은 구문에 정의된 바와 같으며, 데이터베이스 이름, 데이터베이스 경로, 서버 호스트 및 로그 파일의 경로에 관한 정보를 저장한다. 다음은 데이터베이스 위치 정보 파일의 내용을 확인한 예이다.
% more databases.txt
dist_testdb /home1/user/CUBRID/bin d85007 /home1/user/CUBRID/bin
dist_demodb /home1/user/CUBRID/bin d85007 /home1/user/CUBRID/bin
testdb /home1/user/CUBRID/databases/testdb d85007 /home1/user/CUBRID/databases/testdb
demodb /home1/user/CUBRID/databases/demodb d85007 /home1/user/CUBRID/databases/demodb
데이터베이스 위치 정보 파일의 저장 디렉터리는 기본적으로 설치 디렉터리의 databases 디렉터리로 지정되며, 시스템 환경 변수 CUBRID_DATABASES의 설정을 변경하여 기본 디렉터리를 변경할 수 있다. 데이터베이스 위치 정보 파일의 저장 디렉터리 경로가 유효해야 데이터베이스 관리를 위한 cubrid 유틸리티가 데이터베이스 위치 정보 파일에 접근할 수 있게 된다. 이를 위해서 사용자는 디렉터리 경로를 정확하게 입력해야 하고, 해당 디렉터리 경로에 대해 쓰기 권한을 가지는지 확인해야 한다. 다음은 CUBRID_DATABASES 환경 변수에 설정된 값을 확인하는 예이다.
% set | grep CUBRID_DATABASES
CUBRID_DATABASES=/home1/user/CUBRID/databases
만약 CUBRID_DATABASES 환경 변수에서 유효하지 않은 디렉터리 경로가 설정되는 경우에는 에러가 발생하며, 설정된 디렉터리 경로는 유효하나 데이터베이스 위치 정보 파일이 존재하지 않는 경우에는 새로운 위치 정보 파일을 생성한다. 또한, CUBRID_DATABASES 환경 변수가 아예 설정되지 않은 경우에는 현재 작업 디렉터리에서 위치 정보 파일을 검색한다.
데이터베이스 볼륨¶
CUBRID 데이터베이스의 볼륨은 크게 영구적 볼륨, 일시적 볼륨, 백업 볼륨으로 분류한다.
영구적 볼륨 중
영구적 데이터를 저장하지만 일시적 데이터도 저장할 수 있는 데이터 볼륨이 있다.
데이터베이스의 최근 변경 사항을 포함하고 있는 활성 로그(active log) 볼륨이 있다.
일시적 볼륨 중
임시 데이터를 저장할 수 있는 일시적 볼륨(temporary temp volume)이 있다.
활성 로그에서 밀려난 로그를 저장하기 위한 보관 로그(archive log) 볼륨이 있다.
백그라운드에서 로그 보관 작업을 수행할 때 사용되는 백그라운드 보관 로그(background archive log) 볼륨이 있다.
볼륨에 대한 자세한 내용은 데이터베이스 볼륨 구조를 참고한다.
다음은 testdb 데이터베이스를 운영할 때 발생하는 데이터베이스 관련 파일의 예이다.
파일 이름 |
크기 |
종류 |
분류 |
설명 |
---|---|---|---|---|
testdb |
512MB |
permanent
data
|
Database
volume
|
DB 생성시 최초로 생성되는 볼륨
이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)
이 볼륨은 데이터베이스 메타 정보를 포함한다.
cubrid createdb 는 cubrid.conf 의 db_volume_size 에 명시된 디폴트 크기를 사용한다.
|
testdb_perm |
512MB |
permanent
data
|
cubrid addvoldb 유틸리티를 사용해 수동으로 생성된 볼륨
이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)
|
|
testdb_temp |
512MB |
temporary
data
|
cubrid addvoldb 유틸리티를 사용해 수동으로 생성된 볼륨
이 볼륨은 임시 데이터를 저장한다. (질의 결과, 리스트 파일들, 정렬 파일들, 결합 객체 해시들)
|
|
testdb_x003 |
512MB |
permanent
data
|
데이터베이스의 공간이 더 필요할 때 자동으로 생성
이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)
|
|
testdb_x004 |
512MB |
permanent
data
|
데이터베이스의 공간이 더 필요할 때 자동으로 생성
이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)
|
|
testdb_x005 |
512MB |
permanent
data
|
데이터베이스의 공간이 더 필요할 때 자동으로 생성
이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)
|
|
testdb_x006 |
64MB |
permanent
data
|
데이터베이스의 공간이 더 필요할 때 자동으로 생성
이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)
이 볼륨의 크기는 아직 최대화 되지 않음
|
|
testdb_t32766 |
512MB |
temporary
data
|
Temporary
Volume
|
데이터베이스의 공간이 더 필요할 때 자동으로 생성
이 볼륨은 임시 데이터를 저장한다. (질의 결과, 리스트 파일들, 정렬 파일들, 결합 객체 해시들)
|
testdb_lgar_t |
512MB |
background
archiving
|
Log
volume
|
백그라운드 보관(background archiving) 기능과 관련된 로그 파일
보관 로그를 저장할 때 사용된다.
|
testdb_lgar224 |
512MB |
archive
|
보관 로그(archiving log)가 계속 쌓이면서 세 자리 숫자로 끝나는 파일들이 생성된다.
cubrid backupdb -r 옵션 또는 cubrid.conf의 log_max_archives 파라미터의 설정으로 인해 001~223까지의
보관 로그들은 정상적으로 삭제된 것으로 보인다. 보관 로그가 삭제되는 경우, lginf 파일의 REMOVE
섹션에서 삭제된 보관 로그 번호를 확인할 수 있다.
보관 로그 관리 를 참고한다.
|
|
testdb_lgat |
512MB |
active
|
활성로그(Active log) 파일
|
|
testdb_dwb |
1MB |
temporary
data
|
Double write
buffer
|
플러시 (flush) 대상 페이지를 먼저 쓰기 위한 이중 쓰기 버퍼 (Double Write Buffer)저장 파일
|
데이터베이스 볼륨 파일
위의 표에서 testdb, testdb_perm, testdb_temp, testdb_x003 ~ testdb_x006 은 데이터베이스 볼륨 파일로 분류된다.
파일 크기는 cubrid createdb 및 cubrid addvoldb 의 --db-volume-size 옵션과 cubrid.conf 의 db_volume_size 에 의해 결정된다.
데이터베이스에 저장 공간이 부족해지면 새 볼륨이 자동 생성된다.
일시적 볼륨
일시적 볼륨은 일반적으로 일시적 데이터를 저장하는 데 사용된다. 이 볼륨은 데이터베이스 별로 자동 생성되고 삭제된다.
파일 크기는 cubrid.conf 의 db_volume_size 에 의해 결정된다.
로그 볼륨 파일
위의 표에서 testdb_lgar_t, testdb_lgar224 및 testdb_lgat 는 로그 볼륨 파일로 분류된다.
파일 크기는 cubrid.conf 의 log_volume_size 또는 cubrid createdb 의 --log-volume-size 옵션에 의해 결정된다.
이중 쓰기 버퍼 (Double Write Buffer, DWB) 파일
DWB 파일은 부분 쓰기 (Partial Write)로 인한 I/O 에러를 방지하기 위한 저장공간이다.
모든 데이터 페이지는 DWB 에 먼저 쓰여지고 난 후에 영구 데이터 볼륨에 있는 데이터 위치에 쓰여진다.
데이터베이스가 재시작될 때, 부분적으로 쓰여진 페이지들이 탐지되고 DWB 에서 대응되는 페이지로 대치된다.
파일 크기는 cubrid.conf 의 double_write_buffer_size 에 의해 결정된다. 만약 0으로 설정되었다면, DWB 는 사용되지 않고 DWB 파일도 생성되지 않는다.
Note
데이터베이스 재시작과 비정상 종료 시에도 보존해야 하는 데이터는 영구적 데이터 용도로 생성된 데이터베이스 볼륨에 저장된다. 이 볼륨은 테이블 행(힙 파일), 인덱스(b-tree 파일) 및 여러 시스템 파일을 저장한다.
질의 처리 및 정렬의 중간 결과와 최종 결과의 경우 일시적 저장소만 필요하다. 요구되는 일시적 데이터 크기에 따라 우선적으로 메모리에 저장된다(공간 크기는 cubrid.conf 에 지정된 시스템 파라미터 temp_file_memory_size_in_pages 에 의해 결정됨). 이를 초과하는 데이터는 디스크에 저장한다.
데이터베이스는 일시적 데이터를 위한 디스크 공간을 할당하기 위해 일반적으로 일시적 볼륨을 생성해 사용한다. 그러나 관리자는 cubrid addvoldb -p temp 명령을 사용해 일시적 데이터를 저장하기 위한 용도로 영구적 데이터베이스 볼륨을 할당할 수 있다. 이러한 영구적 데이터베이스 볼륨이 있는 경우 임시 데이터를 디스크 공간에 저장할 때 일시적 볼륨 보다 우선 사용한다.
일시적 데이터를 사용할 수 있는 질의의 예는 다음과 같다.
SELECT 등의 결과 집합이 생성되는 질의
GROUP BY 나 ORDER BY 가 포함된 질의
부질의(subquery)가 포함된 질의
정렬 병합(sort-merge) 조인이 수행되는 질의
CREATE INDEX 질의문이 포함된 질의
일시적 데이터에 의해 시스템의 디스크 공간이 소진되는 것을 방지하려면 다음과 같이 조치할 것을 권장한다.
영구적 데이터베이스 볼륨을 미리 생성해 일시적 데이터에 필요한 저장 공간을 확보한다.
cubrid.conf 에서 temp_file_max_size_in_pages 파라미터를 설정해 질의를 수행할 때 일시적 볼륨에 사용되는 공간의 크기를 제한한다(기본적으로는 제한 없음).