:meta-keywords: cubrid databases.txt, cubrid users, cubrid volume
:meta-description: How to manage CUBRID Databases, Users and Volumes.

데이터베이스 관리
=================

데이터베이스 사용자
-------------------

CUBRID 데이터베이스 사용자는 동일한 권한을 갖는 멤버를 가질 수 있다. 사용자에게 권한 **A**\가 부여되면, 상기 사용자에게 속하는 모든 멤버에게도 권한 **A**\가 동일하게 부여된다. 이와 같이 데이터베이스 사용자와 그에 속한 멤버를 '그룹'이라 하고, 멤버가 없는 사용자를 '사용자'라 한다.

CUBRID는 **DBA**\와 **PUBLIC**\이라는 사용자를 기본으로 제공한다.

*   **DBA**\는 모든 사용자의 멤버가 되며 데이터베이스의 모든 객체에 접근할 수 있는 최고 권한 사용자이다. 또한, **DBA**\만이 데이터베이스 사용자를 추가, 편집, 삭제할 수 있는 권한을 갖는다.

*   **DBA**\를 포함한 모든 사용자는 **PUBLIC**\ 의 멤버가 되므로 모든 데이터베이스 사용자는 **PUBLIC**\에 부여된 권한을 가진다. 예를 들어, **PUBLIC** 사용자에 권한 **B**\를 추가하면 데이터베이스의 모든 사용자에게 일괄적으로 권한 **B**\가 부여된다.  사용자의 추가, 권한 부여에 대한 자세한 내용은 :doc:`/sql/authorization`\ 을 참고한다.

.. _databases-txt-file:

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** 환경 변수가 아예 설정되지 않은 경우에는 현재 작업 디렉터리에서 위치 정보 파일을 검색한다.

.. _database-volume:

데이터베이스 볼륨
-----------------

CUBRID 데이터베이스의 볼륨은 크게 영구적 볼륨, 일시적 볼륨, 백업 볼륨으로 분류한다. 

*   영구적 볼륨 중
 
    *   영구적 데이터를 저장하지만 일시적 데이터도 저장할 수 있는 데이터 볼륨이 있다.
    *   데이터베이스의 최근 변경 사항을 포함하고 있는 활성 로그(active log) 볼륨이 있다.
    
*   일시적 볼륨 중

    *   임시 데이터를 저장할 수 있는 일시적 볼륨(temporary temp volume)이 있다.
    *   활성 로그에서 밀려난 로그를 저장하기 위한 보관 로그(archive log) 볼륨이 있다. 
    *   백그라운드에서 로그 보관 작업을 수행할 때 사용되는 백그라운드 보관 로그(background archive log) 볼륨이 있다.

볼륨에 대한 자세한 내용은 :ref:`database-volume-structure`\ 를 참고한다.

다음은 *testdb* 데이터베이스를 운영할 때 발생하는 데이터베이스 관련 파일의 예이다.

+----------------+-------+-----------------+----------------+------------------------------------------------------------------------------------------------------+
| 파일 이름      | 크기  | 종류            | 분류           | 설명                                                                                                 |
+================+=======+=================+================+======================================================================================================+
| testdb         | 512MB | | permanent     | | Database     | | DB 생성시 최초로 생성되는 볼륨                                                                     |
|                |       | | data          | | volume       | | 이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)                                      |
|                |       |                 |                | | 이 볼륨은 데이터베이스 메타 정보를 포함한다.                                                       |
|                |       |                 |                | | **cubrid createdb** 는 **cubrid.conf** 의 **db_volume_size** 에 명시된 디폴트 크기를 사용한다.     |
+----------------+-------+-----------------+                +------------------------------------------------------------------------------------------------------+
| testdb_perm    | 512MB | | permanent     |                | | **cubrid addvoldb** 유틸리티를 사용해 수동으로 생성된 볼륨                                         |
|                |       | | data          |                | | 이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)                                      |
+----------------+-------+-----------------+                +------------------------------------------------------------------------------------------------------+
| testdb_temp    | 512MB | | temporary     |                | | **cubrid addvoldb** 유틸리티를 사용해 수동으로 생성된 볼륨                                         |
|                |       | | data          |                | | 이 볼륨은 임시 데이터를 저장한다. (질의 결과, 리스트 파일들, 정렬 파일들, 결합 객체 해시들)        |
+----------------+-------+-----------------+                +------------------------------------------------------------------------------------------------------+
| testdb_x003    | 512MB | | permanent     |                | | 데이터베이스의 공간이 더 필요할 때 자동으로 생성                                                   |
|                |       | | data          |                | | 이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)                                      |
+----------------+-------+-----------------+                +------------------------------------------------------------------------------------------------------+
| testdb_x004    | 512MB | | permanent     |                | | 데이터베이스의 공간이 더 필요할 때 자동으로 생성                                                   |
|                |       | | data          |                | | 이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)                                      |
+----------------+-------+-----------------+                +------------------------------------------------------------------------------------------------------+
| testdb_x005    | 512MB | | permanent     |                | | 데이터베이스의 공간이 더 필요할 때 자동으로 생성                                                   |
|                |       | | data          |                | | 이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)                                      |
+----------------+-------+-----------------+                +------------------------------------------------------------------------------------------------------+
| testdb_x006    | 64MB  | | permanent     |                | | 데이터베이스의 공간이 더 필요할 때 자동으로 생성                                                   |
|                |       | | data          |                | | 이 볼륨은 영구 데이터를 저장한다. (시스템,힙과 인덱스 파일들)                                      |
|                |       |                 |                | | 이 볼륨의 크기는 아직 최대화 되지 않음                                                             |
+----------------+-------+-----------------+----------------+------------------------------------------------------------------------------------------------------+
| testdb_t32766  | 512MB | | temporary     | | Temporary    | | 데이터베이스의 공간이 더 필요할 때 자동으로 생성                                                   |
|                |       | | data          | | Volume       | | 이 볼륨은 임시 데이터를 저장한다. (질의 결과, 리스트 파일들, 정렬 파일들, 결합 객체 해시들)        |
+----------------+-------+-----------------+----------------+------------------------------------------------------------------------------------------------------+
| testdb_lgar_t  | 512MB | | background    | | Log          | | 백그라운드 보관(background archiving) 기능과 관련된 로그 파일                                      |
|                |       | | archiving     | | volume       | | 보관 로그를 저장할 때 사용된다.                                                                    |
+----------------+-------+-----------------+                +------------------------------------------------------------------------------------------------------+
| testdb_lgar224 | 512MB | | archive       |                | | 보관 로그(archiving log)가 계속 쌓이면서 세 자리 숫자로 끝나는 파일들이 생성된다.                  |
|                |       |                 |                | | cubrid backupdb -r 옵션 또는 cubrid.conf의 log_max_archives 파라미터의 설정으로 인해 001~223까지의 |
|                |       |                 |                | | 보관 로그들은 정상적으로 삭제된 것으로 보인다. 보관 로그가  삭제되는 경우, lginf 파일의 REMOVE     |
|                |       |                 |                | | 섹션에서 삭제된 보관 로그 번호를 확인할 수 있다.                                                   |
|                |       |                 |                | | :ref:`managing-archive-logs` 를 참고한다.                                                          |
+----------------+-------+-----------------+                +------------------------------------------------------------------------------------------------------+
| testdb_lgat    | 512MB | | active        |                | | 활성로그(Active log) 파일                                                                          |
+----------------+-------+-----------------+----------------+------------------------------------------------------------------------------------------------------+
| testdb_dwb     | 1MB   | | temporary     | | Double write | | 플러시 (flush) 대상 페이지를 먼저 쓰기 위한 이중 쓰기 버퍼 (Double Write Buffer)저장 파일          |
|                |       | | data          | | 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** 파라미터를 설정해 질의를 수행할 때 일시적 볼륨에 사용되는 공간의 크기를 제한한다(기본적으로는 제한 없음).