Oracle/Admin2010. 10. 15. 14:29





테이블 스페이스에 데이터 파일이 두개 존재하고 데이터 파일의 속성 중 자동 증가 설정이 되어 있다고 가정하자.
그 상태에서 데이터가 계속해서 들어가서 데이터 파일의 기본 설정 크기보다 커졌을 때
어느 데이터 파일이 증가할까요?

테스트를 통해 알아봅시다.

1. 테스트용 테이블 스페이스를 생성하고, 데이터 파일을 추가합니다.

SQL> create tablespace test_ts 
         datafile '/u01/app/oracle/oradata/ORCL/test_ts01.dbf' size 1m autoextend on;
SQL> alter tablespace test_ts 
         add datafile '/u01/app/oracle/oradata/ORCL/test_ts02.dbf' size 1m autoextend on;


2. 1에서 생성한 테이블 스페이스가 제대로 생성이 되었는지 확인해볼까요?

SQL> select tablespace_name, file_name, bytes/1024/1024 "Size(MB)", autoextensible
         from dba_data_files
         where tablespace_name = 'TEST_TS';

TABLESPACE_NAME         FILE_NAME         Size(MB) AUT
------------------------------ -------------------------------------------------- ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf     1 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf     1 YES


3. 테스트용 유저를 생성하자. 옵션 중 디폴트 테이블 스페이스에 1.에서 생성한 테이블 스페이스를 줍니다.
   그리고 테이블을 생성할 수 있도록 resource, connect role을 부여합니다.


SQL> create user testuser identified by testuser
         default tablespace test_ts;
SQL> grant resource, connect to testuser;


4. 3에서 생성한 유저(testuser)로 접속하여, 데이터를 충분히 생성합니다.

SQL> conn testuser/testuser

SQL> insert into t1
        select level, 'testtesttesttesttesttesttest'
        from dual
        connect by level <= 100000;


5. 데이터 파일이 증가되는 것을 확인해봅니다. 일정 주기로 확인해보니 데이터 파일이 고르게 증가되는 것을 확인할 수 있습니다.


SQL> select tablespace_name, file_name, bytes/1024/1024 "Size(MB)", autoextensible
from dba_data_files
where tablespace_name = 'TEST_TS';  2    3 
TABLESPACE_NAME         FILE_NAME            Size(MB) AUT
------------------------------ ------------------------------------------------------------ ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf        1 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf        1 YES
SQL> /
TABLESPACE_NAME         FILE_NAME            Size(MB) AUT
------------------------------ ------------------------------------------------------------ ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf        4 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf        5 YES
SQL> /
TABLESPACE_NAME         FILE_NAME            Size(MB) AUT
------------------------------ ------------------------------------------------------------ ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf        5 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf        5 YES
SQL> /
TABLESPACE_NAME         FILE_NAME            Size(MB) AUT
------------------------------ ------------------------------------------------------------ ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf        5 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf        6 YES
SQL> /
TABLESPACE_NAME         FILE_NAME            Size(MB) AUT
------------------------------ ------------------------------------------------------------ ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf       10 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf       10 YES
SQL> /
TABLESPACE_NAME         FILE_NAME            Size(MB) AUT
------------------------------ ------------------------------------------------------------ ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf       10 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf       11 YES
SQL> /
TABLESPACE_NAME         FILE_NAME            Size(MB) AUT
------------------------------ ------------------------------------------------------------ ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf       16 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf       16 YES
SQL> /
TABLESPACE_NAME         FILE_NAME            Size(MB) AUT
------------------------------ ------------------------------------------------------------ ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf       17 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf       18 YES
SQL> /
TABLESPACE_NAME         FILE_NAME            Size(MB) AUT
------------------------------ ------------------------------------------------------------ ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf       18 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf       19 YES

....


SQL> /
TABLESPACE_NAME         FILE_NAME            Size(MB) AUT
------------------------------ ------------------------------------------------------------ ---------- ---
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts01.dbf      225 YES
TEST_TS          /u01/app/oracle/oradata/ORCL/test_ts02.dbf      218 YES



번외로, 그리고 데이터 파일이 증가하면 데이터를 rollback을 해주어도 다시 원래의 데이터 파일 크기로 돌아오지 않습니다.
이때는 데이터 파일 resize를 해주면 됩니다.

SQL> alter database datafile '/u01/app/oracle/oradata/ORCL/test_ts01.dbf' resize 1m;
Database altered.
SQL> alter database datafile '/u01/app/oracle/oradata/ORCL/test_ts02.dbf' resize 1m;
Database altered.

Posted by 자수성가한 부자