Tibero Single DB 운용에 관한 Tablespace, Datafile를 안내합니다.
6. Tablespace / Datafile 관리
6.1. Tablespace 생성, Datafile 추가
Tablespace는 Data를 저장하기 위한 논리적 저장공간이고, Datafile은 실제 Data가 저장되는 물리적인 저장공간입니다.
Tablespace에는 여러개의 Datafile 이 포함될 수 있으며, 필요 시에 User가 Tablespace와 Datafile을 생성해 사용할 수 있습니다.
SQL> create tablespace TEST01 datafile ' /tibero/tbdata/data_1/test01001.dtf ' size 100m;
⇒ ‘TEST’ 라는 tablespace 를 만들고, 100Mbyte 용량의 test01001.dtf 를 생성합니다.
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
TEST01 ONLINE
$ ls –l /tibero/tbdata/data_1
-rw------- 1 tibero dba 104857600 Mar 27 15:47 test01001.dtf
⇒ “TEST01” 라는 tablespace가 생성되었으며 상태는 “Online”이고, OS상에서 “test01001.dtf” 라는 100Mbyte 용량의 datafile도 생성되어 존재하는 것을 확인 할 수 있습니다.
6.1.1. Datafile 추가
Tablespace의 사용공간이 부족할 때는 Datafile을 추가하여 여유공간을 확보할 수 있습니다.
SQL> alter tablespace TEST01 add datafile '/tibero/tbdata/data_1/test01002.dtf' size 200m;
SQL> select ts#, file#, name, status, create_bytes/1024/1024 MB from v$datafile where tS#=5;
TS# FILE# NAME STATUS MB
------ ------- ------------------------------------------------ ------------- ------------
5 4 /tibero/tbdata/data_1/test01001.dtf ONLINE 100
5 6 /tibero/tbdata/data_1/test01002.dtf ONLINE 200
$ ls -l /tibero/tbdata/data_1
-rw------- 1 tibero dba 104857600 Mar 27 15:47 test01001.dtf
-rw------- 1 tibero dba 209715200 Mar 27 15:51 test01002.dtf
⇒ “TEST” tablespace에 200Mbyte 용량의 ‘test01002.dtf’ 파일을 추가했으며, OS상에서도 존재하는 것을 확인 할 수 있습니다.
6.2. Datafile 위치 이동
Datafile을 저장하는 File-system의 용량이 부족하거나, 백업 또는 관리상의 이유로 Datafile의 위치를 변경 할 수 있습니다.
System Tablespace, Undo Tablespace는 Database Mount 상태에서만 위치 변경이 가능하고,
일반 Data Tablespace는 Database 가 Normal 인 상태에서도 변경할 수 (Tablespace 가 Offline 일 때) 있습니다.
SQL> select tablespace_name, status from dba_tablespaces;
TABLESPACE_NAME STATUS
---------------------------- ----------
SYSTEM ONLINE
UNDO ONLINE
TEMP ONLINE
USR ONLINE
SYSSUB ONLINE
TEST01 ONLINE
TEST02 ONLINE
7 rows selected.
⇒ Tablespace name과 status(On/Offline상태)를 확인합니다.
SQL> SELECT FILE#,NAME, STATUS FROM V$DATAFILE;
FILE# NAME STATUS
--------- ------------------------------------------------ ---------
0 /tibero/tbdata/data/system001.dtf ONLINE
1 /tibero/tbdata/data/undo001.dtf ONLINE
2 /tibero/tbdata/data/usr001.dtf ONLINE
3 /tibero/tbdata/data/syssub001.dtf ONLINE
4 /tibero/tbdata/data_1/test01001.dtf ONLINE
5 /tibero/tbdata/data_1/test02001.dtf ONLINE
6 /tibero/tbdata/data_1/test01002.dtf ONLINE
⇒ Database에 존재하는 Datafile Number, Name, status(On/Offline 상태)을 확인합니다
6.2.1. Tablespace Offline 실행 및 Datafile 이동
SQL> alter tablespace TEST02 offline;
SQL> select tablespace_name, ts_id, status from dba_tablespaces;
TABLESPACE_NAME TS_ID STATUS
--------------------------- -------------- -------------
TEST02 6 OFFLINE
SQL> select ts#,file#,name,status from v$datafile;
TS# FILE# NAME STATUS
---- ----------- ---------------------------------------------------- -----------
6 5 /tibero/tbdata/data_1/test02001.dtf OFFLINE
⇒ Tablespace 를 Offline 시키면 Datafile까지 함께 Offline 됩니다.
$ cp /tibero/tbdata/data_1/test02001.dtf /tibero/tbdata/data_2/test02001.dtf
⇒ OS 상에서 Datafile 을 이동할 경로로 Copy 합니다.
(OS상에서 확인 후File system 공간 여유 있는 곳으로 Copy)
SQL> alter database rename file '/tibero/tbdata/data_1/test02001.dtf' to
'/tibero/tbdata/data_2/test02001.dtf';
Database altered.
SQL> select ts#,file#,name,status from v$datafile;
TS# FILE# NAME STATUS
-------- --------- -------------------------------------------------- -----------
6 5 /tibero/tbdata/data_2/test02001.dtf OFFLINE
⇒ OS상에서 Copy한 Datafile의 위치를 수정한 후에 결과를 확인합니다.
Status는 “OFFLINE” 상태입니다.
SQL> alter tablespace TEST02 online;
SQL> select tablespace_name, status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ -----------
TEST02 ONLINE
SQL> select ts#,file#,name,status from v$datafile;
TS# FILE# NAME STATUS
-------- ------ --------------------------------------------------- -----------
6 5 /tibero/tbdata/data_2/test02001.dtf ONLINE
⇒ TEST tablespace를 Online으로 전환하면 이동한 Datafile도 Online 상태로 전환되면서 사용
가능한 상태가 됩니다.
6.3. Tablespace / Datafile 관리
6.3.1. Datafile Resize
Datafile 크기가 작아 여유공간이 부족할 경우(Tablespace 사용공간이 부족할 경우), Datafile을 추가하지 않고 Size를 조정하는 방법을 사용할 수 있습니다.
이 때 Datafile이 저장되는 File-system의 여유공간을 확인 후 작업합니다.
SQL> alter database datafile '/tibero/tbdata/data_2/test02001.dtf' resize 200m;
SQL> select TABLESPACE_NAME, FILE_NAME, STATUS, BYTES/1024/1024 MB from dba_data_files;
TABLESPACE_NAME FILE_NAME STATUS MB
-------------------------- ---------------------------------------------- --------------- -----
TEST02 /tibero/tbdata/data_2/test02001.dtf AVAILABLE 200
⇒ Datafile ‘test02001.dtf’ 을 200Mbyte로 Resize합니다. Resize는 Database 운용 중에 가능합니다.
6.3.2. Datafile autoextensible(자동확장) 관리
Datafile의 크기가 작을 때 Datafile을 추가하거나 Resize하지 않고 여유공간을 확보할 수 있는 방법으로 autoextensible 기능을 사용할 수 있습니다.
Datafile의 autoextend 옵션을 ‘On’ 으로 전환하면 Datafile은 설정된 최대값까지 자동으로 확장됩니다.
이 방법을 사용할 때도 File-system의 여유공간을 확인해야 하며, 최대값을 너무 크게 설정하면 관리상 문제가 생길 수 있으므로 사용량을 고려해 설정합니다.
SQL> select file_name, autoextensible from dba_data_files;
FILE_NAME AUTOEXTENSIBLE
---------------------------------------------- ----------------------
/tibero/tbdata/data_2/test02001.dtf NO
⇒ 검색한 Datafile 'test02001.dtf'의 자동확장(autoextensible) 기능이 “OFF"된 상태입니다.
SQL> alter database datafile '/tibero/tbdata/data_2/test02001.dtf' autoextend on next 1m maxsize 1000m;
⇒ Datafile 의 자동확장 기능을 “ON”으로 전환합니다.
Size 확장 시1Mbyte씩 확장되고 최대 1000Mbyte까지 확장되도록 설정합니다.
SQL> select file_name, autoextensible from dba_data_files;
FILE_NAME AUTOEXTENSIBLE
----------------------------------------------- ------------------------
/tibero/tbdata/data_2/test02001.dtf YES
⇒ Datafile 'test02001.dtf' 의 자동확장(autoextensible) 기능이 “YES’ 로 전환됩니다.
6.3.3. Datafile Error 체크
Datafile에 이상이 발생하여 Database가 Mount 상태일 때 다음 명령을 사용해 Datafile 의 이상유무를 확인합니다.
SQL> select * from v$recover_file;
0 row selected
⇒ Datafile 손상 여부를 확인하는 명령으로, ‘0 row selected’ 가 출력되면 정상입니다.