TTS (Transportable Tablespace) 개요
Transportable Tablespace기능은 기존 데이터 로딩 방식이 실제 데이터를 추출하여 insert 하는 방식과는 다르게 테이블 스페이스 단위로 데이터를 마이그레이션 할 수 있는 기능이다. 같은 플랫폼은 물론이고 10g 부터는 이 기종 간의 마이그레이션에 활용 할 수 있다.
이기종 간의 TTS는 endian format에 따라 conversion이 필요할 수 도 있고, conversion없이 가능 하기도 하다. 이 문서는 동일기종간의 TTS에 대해서만 언급 한다.
제약 사항
- Source 와 Target Database는 같은 character set ,national character set이 설정되어있어야 한다.
- 같은 테이블 스페이스가 Target에 존재하면 안된다. 필요하면 작업전 rename 을 하면 된다.
- underlying objects(such as mviews) or contained objects(such as partitioned tables) 의 경우, 관련 object들이 모두 포함되어야 함
- SYSTEM tablespace 혹은 SYS 가 소유한 Object를 transport 할 수 없다.
- floating point number(binary_float, binary_double) 가 포함된 경우, 반드시 expdb/impdb 를 사용하여야 함
- 10gR2 부터 XMLType 지원이 되지만, 반드시 exp/imp 를 사용하여야 한다 (data pump 사용불가능)
- 8.0-compatible advanced queues with multiple recipients 를 지원하지 않는다
Minimum Compatibility Requirements
Transport Scenario | Minimum Compatibility Setting | |
Source Database | Target Database | |
Databases on the same platform | 8.0 | 8.0 |
Tablespace with different database block size than the target database | 9.0 | 9.0 |
Databases on different platforms | 10.0 | 10.0 |
DATA Migration을 위한 TTS 절차
DATA migration은 동일 기종간의 Transportable tablespace 작업이므로 endian format 등은 생략.
전체 작업 절차 :
정리하자면, 일반적으로 아래와 같은 절차에 의해서 TTS가 이루어진다.
|
TTS 작업 관련 오라클 문제
아래와 같은 오라클 Bug이 확인됨.
Bug 5249074 - EXPDP ERRORS WHEN MANY TRANSPORTABLE TABLESPACES DEFINED
140여 개의 Tablespace에 대한 metadata export작업 시 에러 발생. Bug 5249074는 다량의 테이블 스페이스를 expdp 할때 에러가 발생하는 Bug이다.
그러므로, OM에서는 TTS를 수행하기 전 Source쪽 Database에 관련 패치 적용이 필요하다.
BUG 5252501 : IMP-17, ORA-8103 IMPORTING TRANSPORTABLE TABLESPACE
Import 하는 과정에서 테이블 한 개 에러 발생함. dictionary managed TBS 에 위치한 segment header 내의 extent map 을 고전적인 방식으로 fet$ 와 uet$ 로 재구성하는 과정에서 exception 이 발생할 수 있다고 함.
문제를 해결하기 위해서는 관련 Tablespace를 Dictionary 방식에서 Locally 방식으로 변경한 후 TTS 수행.
TTS 작업 절차
실 마이그레이션을 위한 작업 절차임.
Source site 작업
- 사전 작업
- 사전에 Bug 5249074에 대한 패치 적용. 패치 적용후 아래 스크립트 수행
# sqlplus "/ as sysdba" # SQL> @/oracle1/oracle/td/rdbms/admin/prvtbpm.plb |
- Bug 5252501 에러 fix를 위해 Dictionary Tablespace 를 locally 로 변형.
준비된 스크립트 @loc_tbs.sql 수행 또는 아래 수행.
# sqlplus "/ as sysdba" # SQL> execute sys.dbms_space_admin.tablespace_migrate_to_local('TBS001'); # SQL> execute sys.dbms_space_admin.tablespace_migrate_to_local('TBS194'); |
- Expdp를 사용하기 위한 Directory 생성
# sqlplus "/ as sysdba" # SQL> create directory AAA as '/oraom/MIG_NEW'; # SQL> grant read, write on directory AAA to public; |
- 대상 Tablespace 확인. : 현재 145개
select distinct tablespace_name from dba_segments where owner in ('TDOPERO','TDAPPO','TDREFNPYS1','TDREFWORK', 'TDSECO') or (segment_name='ERP_BIZR_SUM' and segment_type='TABLE'); |
- TTS Violation Check
준비된 스크립트 check_tts.sql 수행
@check_tts.sql |
샘플) # sqlplus "/ as sysdba" # SQL> exec dbms_tts.transport_set_check('BILLTEMP'...........,false,true) ; |
- TTS Violation 확인 : 아래 결과 아무것도 나오지 않아야 TTS를 수행 할 수 있다.
준비된 스크립트 Show_vio.sql 수행 또는 아래 수행.
# sqlplus "/ as sysdba" # SQL> select * from transport_set_violations; |
- TTS Violation 을 없애기 위한 작업 (OM에 맞게 Scripts 작성됨)
# sqlplus "/ as sysdba" # SQL>@alter_part.sql # SQL>@drop.sql # SQL>@rebuild.sql |
- TTS Violation 재수행 후 확인.
@check_tts.sql |
방식) # sqlplus "/ as sysdba" # SQL> exec dbms_tts.transport_set_check('BILLTEMP',false,true) ; |
# sqlplus "/ as sysdba" # SQL> select * from transport_set_violations; |
à Violation이 나오지 않으면 정상.
- Tablespace Read only 모드로 변경
# sqlplus "/ as sysdba" # SQL>@readonly.sql |
select 'alter tablespace '||tablespace_name||' read only;' from (select distinct tablespace_name from dba_segments where owner in ('TDOPERO', 'TDAPPO', 'TDREFNPYS1', 'TDREFWORK', 'TDSECO') or (segment_name='ERP_BIZR_SUM' and segment_type='TABLE')) / |
- Metadata export 수행
Expdp.sh 수행
expdp system/password dumpfile=tts.dmp directory=AAA transport_full_check=n parfile=parfile.txt EXCLUDE=OBJECT_GRANT,TRIGGER,MATERIALIZED_VIEW,TABLE_STATISTICS,INDEX_STATISTICS,INDEX,MATERIALIZED_VIEW_LOG <parfile.txt 샘플> TRANSPORT_TABLESPACES=(BILLTEMP,CSTTEMP... tbs 기술) |
Target Site 작업
- 사전 작업
- 해당 Data file들 Copy
- Expdp를 사용하기 위한 Directory 생성
# sqlplus "/ as sysdba" # SQL> create directory MIG as '/oraom/MIG'; # SQL> grant read, write on directory MIG to public; |
- Source와 같은 User 생성
@create_user.sql 수행
- 대상 데이터 파일 확인 후 par_imp.txt 스크립트 작성
# sqlplus "/ as sysdba" # SQL> select file_name||',\' from dba_data_files where tablespace_name in (select distinct tablespace_name from dba_segments where owner in ('TDOPERO', 'TDAPPO', 'TDREFNPYS1', 'TDREFWORK', 'TDSECO') or (segment_name='ERP_BIZR_SUM' and segment_type='TABLE') ) / |
<Par_imp.txt 내용 샘플> transport_datafiles=/dev/vx/rdsk/ODB015/D05S20V15,\ /dev/vx/rdsk/ODB015/D05S20V12,\ /dev/vx/rdsk/ODB015/D04S20V09,\ /dev/vx/rdsk/ODB015/D04S20V04 |
- Metadata import 수행 : impdp.sh
impdp system/manager dumpfile=tts.dmp logfile=imp.log directory=MIG parfile=par_imp.txt |
- Cleansing용 Tablespace Read write변경
alter tablespace TBS_SUB_HIST_01 read write; |
'DB - ORACLE > Oracle Up,Mig' 카테고리의 다른 글
[TD-ORACLE] migration using datadump.docx (0) | 2017.10.18 |
---|---|
ORACLE DATAPUMP 정리 (0) | 2015.11.04 |
윈도우 아카이브 삭제 스크립트 (0) | 2015.08.24 |
오라클 패치 테스트 for Windows (0) | 2015.01.19 |