티스토리 뷰

ORACLE/ADMIN

Oracle Transportable Tablespace(TTS)

공부하는알파카 2020. 8. 3. 14:25

Transportable Tablespace

  • 서로 다른 DB 사이의 데이터를 주고받는 가장 빠르고 효율적인 방법이다.
  • 데이터파일을 먼저 옮기고 메타데이터(구조)만 import하는 방식이다.
  • SYSTEM, SYSAUX, UNDO, TEMPORARY TABLESPACE는 지원이 안된다.
  • 이동할 TABLESPACE를 EXPORT 하기 전에 READ ONLY 상태로 변경해야 한다.
  • DB 내부의 데이터 저장방식(character set)이 동일해야 한다.
select property_name, property_value 
from database_properties 
where property_name like 'NLS_CHA%';

 

 

 

 

 

 

Transportable Tablespace 실습

OS 환경 : Oracle Linux 6.3
DB 환경 : Oracle Database 12.1.0.2
SID : PROD, testdb open

 

아래와 같이 testdb에 테이블스페이스 2개를 생성한다.

testdb> create tablespace tts01 datafile '/home/oracle/testdb/tts01.dbf' size 4m;
testdb> create tablespace tts02 datafile '/home/oracle/testdb/tts02.dbf' size 4m;



 

 

HR 스키마에 아래와 같이 테이블을 생성하는데, 앞서 생성한 테이블스페이스에 각각 생성하고 구조는 EMPLOYEES, DEPARTMENTS와 동일하게 생성한다.

testdb> create table hr.emp_test tablespace tts01 as select * from hr.employees;
testdb> create table hr.dept_test tablespace tts02 as select * from hr.departments;



 

 

위에서 생성한 테이블에 각각 foreign key와 primary key 제약조건을 추가한다.

testdb> alter table hr.dept_test add constraint dept_test_pk primary key(department_id);
testdb> alter table hr.emp_test add constraint emp_test_fk foreign key(department_id) references hr.dept_test(department_id);

 

 

 

 

 

dbms_tts 패키지의 transport_set_check 프로시저를 이용해서 tts01과 tts02 테이블스페이스가 Transportable 한지 검사한다.

testdb> desc dbms_tts

testdb>
begin
  dbms_tts.transport_set_check(
    ts_list => ’tts01, tts02’,
    incl_constraints => true);
end;
/

PL/SQL procedure successfully completed.

 

 

 

 

 

검사한 결과는 아래의 뷰를 통해 확인한다.

testdb> select * from transport_set_violations;

확인한 결과 index에 대한 violation이 발생한다. Primary key는 자동으로 index가 생성되기 때문에,

앞서 dept_test 테이블에 primary key를 만들면서 인덱스가 생성되었다. 하지만 해당 인덱스는 default tablespace인 USERS 테이블스페이스에 생성되어 만약 이상태로 테이블스페이스를 이동하면 인덱스의 누락이 발생한다.

따라서 index의 rebuild 작업을 해주어야 한다.

 

 

 

 

 

 

tts02 테이블스페이스 둘 다 이동가능하도록 rebuild 작업을 진행한다.

testdb> alter index hr.dept_test_pk rebuild tablespace tts02;

 

 

*ora-01659 오류 발생시 아래와 같이 수행한다(테이블스페이스 공간부족 문제).

testdb> select tablespace_name, file_name from dba_data_files;

testdb> alter tablespace tts02 add datafile '/home/oracle/testdb/tts03.dbf' size 5m autoextend on maxsize unlimited;

 

 

 

 

 

 

에러를 해결하였으면 다시 index를 rebuild 하고, dbms_tts 패키지를 이용해서 tts01과 tts02 테이블스페이스가 Transportable 한지 검사한다.

testdb> alter index hr.dept_test_pk rebuild tablespace tts02;
testdb> 
begin
  dbms_tts.transport_set_check(
    ts_list => 'tts01, tts02',
    incl_constraints => true);
end;
/

 

 

 

 

 

검사한 결과를 확인한다.

testdb> select * from transport_set_violations;

 

 

 

 

 

tts01과 tts02 두 개의 테이블스페이스를 모두 read only로 변경한다.

testdb> alter tablespace tts01 read only;
testdb> alter tablespace tts02 read only;

 

 

 

 

 

Data Pump export를 이용하여 2개의 테이블스페이스에 대한 metadata를 추출한다.

testdb> expdp system/oracle_4U dumpfile=tts.dmp directory=testdb_dir transport_tablespaces=tts01, tts02

 

 

 

 

 

 dumpfile과 2개의 테이블스페이스를 PROD 데이터베이스로 이동시킨다.

[testdb@host01 ~]$ cp /home/oracle/testdb/datapump/tts.dmp /home/oracle/prod/datapump
[testdb@host01 ~]$ cp /home/oracle/testdb/tts01.dbf /home/oracle/prod/
[testdb@host01 ~]$ cp /home/oracle/testdb/tts02.dbf /home/oracle/prod/
[testdb@host01 ~]$ cp /home/oracle/testdb/tts03.dbf /home/oracle/prod/

 

 

 

 

 

위에서 추출한 metadata를 import 한다.

[PROD@host01 ~]$ impdp system/oracle_4U dumpfile=tts.dmp directory=prod_dir transport_datafiles=/home/oracle/prod/tts01.dbf,/home/oracle/prod/tts02.dbf,/home/oracle/prod/tts03.dbf

 

 

 

 

 

테이블스페이스 상태를 조회하고 HR.EMP_99, DEPT_99를 조회한다.

PROD> select tablespace_name, file_name from dba_data_files;

 

PROD> select * from hr.emp_test;

 

 

PROD> select * from hr.dept_test;

 

 

 

 

 

실습이 끝나면 2개의 테이블스페이스를 삭제한다.

PROD> drop tablespace tts01 including contents and datafiles;
PROD> drop tablespace tts02 including contents and datafiles;
testdb> drop tablespace tts01 including contents and datafiles;
testdb> drop tablespace tts02 including contents and datafiles;
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함