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가 이루어진다.

 

  1. TTS 대상 테이블 스페이스 선정
  2. TTS violation check
  3. Violation 원인 제거
  4. 해당 Tablespace Read only mode로 전환
  5. Metadata export
  6. 해당 datafile을 Target server에 Copy
  7. Metadata import
  8. 후속 작업

  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;


 

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다