본문 바로가기
DBMS/ORACLE

TTS (Transportable Tablespaces)

by 드바 2022. 6. 24.

 


- 데이터 이관 시 Tablespace 단위로 datafile를 이관하는 방법
- 대상 테이블스페이스 read only 상태에서 작업 진행해야 함
- 소스/타겟 캐릭터셋이 동일 해야 함

 

작업순서

1. 소스 테이블스페이스 read only
2. transport_tablespace 옵션 사용하여 메타정보 export
3. 타겟 장비에 dmp(export 받은)파일 및 데이터파일(해당 테이블스페이스의 데이터 파일) 이동
4. import
5. 타겟 테이블스페이스 read only -> read write 변경

 

제약사항
- Source DB와 Target DB 간의 character set이 동일해야 한다.
- system,undo,sysaux,temp는 지원 불가능
- 10g 이전 버전은 source 와 target이 같은 플랫폼일 때만 지원
- 10g 이후 버전은 rman 변환 작업을 통하여 지원가능
- Source와 Target은 동일한 Block Size를 사용해야 한다.
- Standard Edition은 지원 불가능
- Target DB는 Source DB 버전과 같거나 더 높아야 한다.
- Target DB에 이미 동일한 이름을 지닌 Tablespace가 존재시 사용불가. Transport 전에 Source Tablespace의 이름을 바꾸거나, 기존에 있던 Tablespace의 이름을 바꿀 수 있다.
- Target DB에 객체의 Owner가 존재하지 않으면 수동으로 User를 생성해야 한다.

Minimum Compatibility Requirements


소스DB 작업
기본 정보 확인

SQL> select * from v$transportable_platform ;

PLATFORM_ID PLATFORM_NAME				       ENDIAN_FORMAT
----------- -------------------------------------------------- ------------------------------------------
	  1 Solaris[tm] OE (32-bit)			       Big
	  2 Solaris[tm] OE (64-bit)			       Big
	  7 Microsoft Windows IA (32-bit)		       Little
	 10 Linux IA (32-bit)				       Little
	  6 AIX-Based Systems (64-bit)			       Big
	  3 HP-UX (64-bit)				       Big
	  5 HP Tru64 UNIX				       Little
	  4 HP-UX IA (64-bit)				       Big
	 11 Linux IA (64-bit)				       Little
	 15 HP Open VMS 				       Little
	  8 Microsoft Windows IA (64-bit)		       Little
	  9 IBM zSeries Based Linux			       Big
	 13 Linux x86 64-bit				       Little
	 16 Apple Mac OS				       Big
	 12 Microsoft Windows x86 64-bit		       Little
	 17 Solaris Operating System (x86)		       Little
	 18 IBM Power Based Linux			       Big
	 19 HP IA Open VMS				       Little
	 20 Solaris Operating System (x86-64)		       Little
	 21 Apple Mac OS (x86-64)			       Little

20 rows selected.

SQL> SELECT NAME, PLATFORM_ID, PLATFORM_NAME FROM V$DATABASE ;

NAME			    PLATFORM_ID PLATFORM_NAME
--------------------------- ----------- --------------------------------------------------
ORADB				     13 Linux x86 64-bit

SQL> SELECT PARAMETER, VALUE FROM NLS_DATABASE_PARAMETERS 
where parameter  IN (
'NLS_CHARACTERSET', 'NLS_TERRITORY', 'NLS_LANGUAGE'
)
;

PARAMETER		       VALUE
------------------------------ ------------------------------
NLS_LANGUAGE		       AMERICAN
NLS_TERRITORY		       AMERICA
NLS_CHARACTERSET	       KO16MSWIN949

 

테스트 테이블, 인덱스 생성
테스트를 위해 TAB2_IX 인데스는 USERS 테이블스페이스에 생성

SQL> create tablespace tts01 datafile '/data/tts01.dbf' size 50M ;

Tablespace created.

SQL> create tablespace tts02 datafile '/data/tts02.dbf' size 50M ;

Tablespace created.

SQL> create table sk.tab1 tablespace tts01 as select * from dba_objects WHERE object_id IS not NULL ;

Table created.

SQL> create table sk.tab2 tablespace tts02 as select * from dba_tables ;

Table created.

SQL> create index sk.tab1_ix on sk.tab1(object_id) tablespace tts01 ;

Index created.

SQL> create index sk.tab2_ix on sk.tab2(owner, table_name) tablespace users ;

Index created.

SQL> SELECT owner, segment_name, segment_type, bytes, tablespace_name 
FROM DBA_segments
WHERE owner = 'SK'
;
  
OWNER		     SEGMENT_NAME		    SEGMENT_TYPE			BYTES TABLESPACE_NAME
-------------------- ------------------------------ ------------------------------ ---------- ------------------------------
SK		     TAB1			    TABLE			      9437184 TTS01
SK		     TAB2			    TABLE			       851968 TTS02
SK		     TAB1_IX			    INDEX			      2097152 TTS01
SK		     TAB2_IX			    INDEX			       196608 USERS

 

대상 테이블스페이스 read only 상태로 변경 후 expdp 사용 시 transport_tablespace 옵션 사용하여 진행
타겟DB로 dump 파일 및 데이터파일 복사 완료 후 read only -> read write 변경 해 줄 것(그전에 변경하면 impdp 작업 시 ORA-19722 에러 발생)

-- TTS 작업진행에 문제 없는지 체크
SQL> begin
dbms_tts.transport_set_check
(ts_list=>'TTS01,TTS02',
incl_constraints=>true);
end;
/ 

PL/SQL procedure successfully completed.

-- 대상 테이블스페이스 read only
SQL> alter tablespace tts01 read only;
Tablespace altered.
SQL> alter tablespace tts02 read only;
Tablespace altered.

SQL> SELECT tablespace_name, status FROM dba_tablespaces ;

TABLESPACE_NAME 	       STATUS
------------------------------ ---------------------------
SYSTEM			       ONLINE
SYSAUX			       ONLINE
UNDOTBS1		       ONLINE
TEMP			       ONLINE
USERS			       ONLINE
TS01			       ONLINE
IX01			       ONLINE
TTS01			       READ ONLY
TTS02			       READ ONLY

9 rows selected.

SQL> 


[oracle@svr1 pump]$ expdp system/oracle dumpfile=tts.dmp directory=pump transport_tablespaces=tts01,tts02 REUSE_DUMPFILES=YES

Export: Release 11.2.0.1.0 - Production on Fri Jun 24 16:48:09 2022

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01":  system/******** dumpfile=tts.dmp directory=pump transport_tablespaces=tts01,tts02 REUSE_DUMPFILES=YES 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/INDEX
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
  /home/oracle/pump/tts.dmp
******************************************************************************
Datafiles required for transportable tablespace TTS01:
  /data/tts01.dbf
Datafiles required for transportable tablespace TTS02:
  /data/tts02.dbf
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 16:48:16

[oracle@svr1 pump]$



타겟DB로 관련 파일 이동 후 타겟DB에서 작업 진행
impdp 사용한 정보 import

[oracle@svr1 ORA19C]$ impdp system/oracle dumpfile=tts.dmp directory=pump transport_datafiles=/ORA19/app/oracle/oradata/ORA19C/tts01.dbf,/ORA19/app/oracle/oradata/ORA19C/tts02.dbf 

Import: Release 19.0.0.0.0 - Production on Fri Jun 24 16:49:34 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/******** dumpfile=tts.dmp directory=pump transport_datafiles=/ORA19/app/oracle/oradata/ORA19C/tts01.dbf,/ORA19/app/oracle/oradata/ORA19C/tts02.dbf 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/INDEX
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Fri Jun 24 16:49:36 2022 elapsed 0 00:00:02

[oracle@svr1 ORA19C]$

 

이관 데이터 확인
TAB2_IX 인덱스는 이관되지 않았음(소스DB에서 USERS에 생성했기 때문)

SQL> SELECT owner, segment_name, segment_type, bytes, tablespace_name 
FROM DBA_segments
WHERE owner = 'SK'
;  2    3    4  

OWNER		     SEGMENT_NAME		    SEGMENT_TYPE			BYTES TABLESPACE_NAME
-------------------- ------------------------------ ------------------------------ ---------- ------------------------------
SK		     TAB1			    TABLE			      9437184 TTS01
SK		     TAB1_IX			    INDEX			      2097152 TTS01
SK		     TAB2			    TABLE			       851968 TTS02

SQL> select tablespace_name, status from dba_tablespaces ;

TABLESPACE_NAME 	       STATUS
------------------------------ ------------------------------
SYSTEM			       ONLINE
SYSAUX			       ONLINE
UNDOTBS1		       ONLINE
TEMP			       ONLINE
USERS			       ONLINE
TTS01			       READ ONLY
TTS02			       READ ONLY

7 rows selected.

SQL> select count(*) from sk.tab1 ;

  COUNT(*)
----------
     71969

SQL> select count(*) from sk.tab2 ;

  COUNT(*)
----------
      2737

SQL>

댓글