강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

Transportable Tablespace

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

Transportable Tablespace

t.gif
t.gif
OS: Windows 2000 Advanced Server
DBMS: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
작성자: 강명규(kang@dbakorea.pe.kr)

A라는 서버에서 실행중인 DB(source)의 tablespace를 다른 B라는 서버의 DB(target)에 옮길 수 있다.
이는 8i에서부터 추가된 transportable tablespace라는 것으로 수행될 수 있다.
전체 DB를 복제하는 것과는 달리, 필요한 테이블스페이스만을 복사할 수 있고, 속도또한 export/import,
load,unload보다 빠르므로 여러면에서 유용할 수 있다.

이후 Transportable tablespace용어는 TTS라고 칭하겠다.


사용예
예를 들어, D/W나 data mart에 데이터를 로드하는 과정에서 사용될 수 있다.

# OLTP DB -> staging DB -> D/W -> data mart

OLTP 시스템 -> D/W staging 시스템으로 데이터 이동
staging 시스템 -> D/W, 데이터마트로 update
D/W -> 데이터마트로 data로드
OLTP,D/W 시스템의 아카이빙
내부/외부 고객에게 Data Publishing


TTS의 source(전송할 테이블스페이스의 원본이 존재하는 곳)와 target(테이블스페이스를 전송받을 곳)은
서로 다른 시스템에서 하면 좋겠으나, 여기선 테스트만 할 것이므로 동일한 시스템에서 서로 다른 DB간에
전송할 것이다. 사실 테스트할 컴퓨터가 현재 1대 밖에 없어서 어쩔 수 없다.

[source]
ORACLE_SID: win817db
tablespace디렉토리: C:oracleoradatawin817db

[target]
ORACLE_SID: win817d2
tablespace디렉토리: C:oracleoradatawin817d2


== TTS 수행과정 ==

[source] : 8i Enterprise Edition이상되어야 함.

SQL> select value from v$option where parameter='Export transportable tablespaces';

VALUE
----------------------------------------------------------------
TRUE


1. transport할 테이블스페이스들(tablespace set)을 read only모드로 변경
2. tablespace set에 속한 datafile들을 taget DB로 복사
3. 패러미터 transport_tablespace=y를 사용하여 export (metadata export file)
4. transport할 테이블스페이스들(tablespace set)을 read write모드로 복귀

[target] : Any Edition of 8i
5. datafile을 복사한 상태에서, 패러미터 transport_tablespace=y를 사용하여 target DB에서 imp수행
6. 필요시 전송된 테이블스페이스를 read write모드로 변경


transportable tablespace set: tablespace set에 속한 datafile + metadata export file
export수행의 결과로 생성된 metadata export file에는 실제 데이터가 존재하는 것이 아니고
data dictionary의 structural information이 존재한다.


제약사항
source/target DB가 동일한 block size, 캐릭터셋을 가져야 하며, 동일한 하드웨어 벤더의 호환 플랫폼에서 실행되어야 한다.
즉, source가 Windows이고 target이 Sun Solaris일 경우에는 TTS를 수행할 수 없다.
또한, TTS를 사용하기 위해선 초기화 패러미터파일(init.ora)에 compatible패러미터를 8.1이상으로 설정해야 한다.
source의 TTS내에 존재하는 객체의 이름이 target DB에 존재한다면 수행될 수 없다.

not support:
스냅샵/복제,
함수기반인덱스,
scoped REFs,
도메인 인덱스,
8.0호환 Advanced queues with multiple recipients


* export된 metadata에는 trigger, grants, constraints는 포함될 수도 있고, 상실될 수도 있다.
  하지만, primary key는 항상 export된다.
  
  
TTS를 수행할 tablespace set은 self-contained 이어야 한다.
즉, 테이블의 인덱스가 저장된 tablespace가 transportable tablespace set에 속해 있지 않다면,
이는 self-contained 가 아니다. 즉, 외부참조가 존재하기 때문에 TTS를 수행할 수 없다.
self-contained 여부는 dbms_tts.transport_set_check로 체크할 수 있다. 이를 위해선 execute_catalog_role 이 필요하다.



####################################################
실습예(몇몇 메시지는 글의 간략함을 위해 생략되었다.)
####################################################

-----------------------------------------------
[SOURCE 측] ORACLE_SID : win817db
-----------------------------------------------
우선 TTS는 ts_kang, ts_kang_idx라는 테이블스페이스로 한다.
이를 위해 tts_test라는 테이블을 생성하여 데이터는 ts_kang에, 인덱스는 ts_kang_idx에 들어가게 한다.

SQL> conn kang/xxxxxx
연결되었습니다.
SQL> create table tts_test
  2  (
  3  id varchar(10),
  4  name varchar(10),
  5  constraint tts_test_pk primary key(id) using index tablespace TS_KANG_IDX
  6  ) tablespace TS_KANG;

몇개의 간단한 데이터를 넣어보자.
SQL> insert into tts_test values('maddog', '강명규');
SQL> insert into tts_test values('superman', '슈퍼맨');
SQL> insert into tts_test values('dbakorea', '강명규');
SQL> commit;

SQL> conn sys/xxxxxx
연결되었습니다.

transport_set_check에 ts_kang만을 인자로 주고, 에러상황을 테스트해보자.
SQL> exec dbms_tts.transport_set_check('ts_kang',true);

PL/SQL 처리가 정상적으로 완료되었습니다.

transport_set_violations뷰를 보면 ts_kang이 self-contained하지 않음을 알 수 있다.
SQL> select * from transport_set_violations;

VIOLATIONS
--------------------------------------------------------------------------------
Index KANG.TTS_TEST_PK in tablespace TS_KANG_IDX enforces primary constriants  o
f table KANG.TTS_TEST in tablespace TS_KANG


그럼 이제 제대로 self-contained를 체크해보자.
SQL> exec dbms_tts.transport_set_check('ts_kang,ts_kang_idx',true);

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> select * from transport_set_violations;

선택된 레코드가 없습니다.

ts_kang, ts_kang_idx가 self-contained tablespace set이므로 TTS를 수행할 수 있다.
이제 transport할 TS를 read only상태로 변경한다.

SQL> alter tablespace ts_kang read only;
SQL> alter tablespace ts_kang_idx read only;

ts_kang, ts_kang_idx의 데이터파일과 export file을 target(C:oracleoradatawin817d2)에 복사한다.

SQL> select file_name from dba_data_files where tablespace_name in ('TS_KANG', 'TS_KANG_IDX');

FILE_NAME
--------------------------------------------------------------------------------
C:ORACLEORADATAWIN817DBTS_KANG01.DBF
C:ORACLEORADATAWIN817DBTS_KANG_IDX01.DBF

SQL> host copy C:ORACLEORADATAWIN817DBTS_KANG01.DBF d:
        1개 파일이 복사되었습니다.

SQL> host copy C:ORACLEORADATAWIN817DBTS_KANG_IDX01.DBF d:
        1개 파일이 복사되었습니다.

SQL> host exp 'sys/xxxxxx as sysdba' transport_tablespace=y tablespaces=(ts_kang,ts_kang_idx) triggers=n grants=n file=d: ts_test.dmp

Export: Release 8.1.7.0.0 - Production on 일 Jan 19 14:13:59 2003

(c) Copyright 2000 Oracle Corporation.  All rights reserved.


접속 대상: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
KO16KSC5601 문자 설정과 KO16KSC5601 NCHAR 문자 설정에서 엑스포트가 종료되었습니다
경고: 테이블 데이터(행)가 엑스포트 되지 않습니다
주: 테이블/뷰/순차/롤에 대한 권한이 엑스포트 되지 않습니다

이동가능한 테이블스페이스 메타데이터를 엑스포트하려고 합니다...
TS_KANG 테이블스페이스에 관하여 ...
. 클러스터 정의 엑스포트 중
. 테이블 정의를 엑스포트합니다
. . 테이블                       TTS_TEST(를)을 엑스포트 중
TS_KANG_IDX 테이블스페이스에 관하여 ...
. 클러스터 정의 엑스포트 중
. 테이블 정의를 엑스포트합니다
. 참조 무결성 제약조건 엑스포트 중
. 이동가능한 테이블스페이그 메타데이터 엑스포트를 종료합니다
엑스포트가 경고 없이 정상적으로 종료되었습니다.

SQL> alter tablespace ts_kang read write;
SQL> alter tablespace ts_kang_idx read write;



-----------------------------------------------
[TARGET 측] ORACLE_SID : win817d2
-----------------------------------------------
[source]                                        [target]
C:oracleoradatawin817db s_kang01.dbf     => C:oracleoradatawin817d2 s_kang01.dbf
C:oracleoradatawin817db s_kang_idx01.dbf => C:oracleoradatawin817d2 s_kang_idx01.dbf

source측에서 kang이라는 유저가 사용하는 테이블스페이스이므로 target에 사용자 kang이 존재하지 않으면 생성해 준다.

D:>set ORACLE_SID=win817d2

D:>sqlplus system/manager

SQL> create user kang identified by xxxxxx
  2  default tablespace users
  3  temporary tablespace temp;

사용자가 생성되었습니다.

SQL> grant connect, resource to kang;

권한이 부여되었습니다.

이제, export된 파일을 import해준다.
D:>copy ts_kang01.dbf C:oracleoradatawin817d2
        1개 파일이 복사되었습니다.

D:>copy ts_kang_idx01.dbf C:oracleoradatawin817d2
        1개 파일이 복사되었습니다.

D:>imp 'sys/xxxxxx as sysdba' transport_tablespace=y tablespaces=(ts_kang,ts_kang_idx) datafiles=('C:oracleoradatawin817d2 s_kang01.dbf','C:oracleoradatawin817d2 s_kang_idx01.dbf') file=tts_test.dmp

Import: Release 8.1.7.0.0 - Production on 일 Jan 19 14:21:48 2003

(c) Copyright 2000 Oracle Corporation.  All rights reserved.


접속 대상: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V08.01.07 에 의해 생성되었습니다
이동 가능한 테이블스페이스(들) 메타데이터을 임포트하려고 합니다...
KO16KSC5601 문자집합과 KO16KSC5601 NCHAR 문자 집합에 임포트가 완성되었습니다
. SYS 객체를 SYS(으)로 임포트하는 중입니다
. KANG 객체를 KANG(으)로 임포트하는 중입니다
. . 테이블                     "TTS_TEST"(를)을 임포트 중
사용 가능한 제약 조건에 관해서...
임포트가 경고 없이 정상적으로 종료되었습니다.

D:>sqlplus kang/xxxxxx

SQL*Plus: Release 8.1.7.0.0 - Production on 일 Jan 19 14:22:29 2003

(c) Copyright 2000 Oracle Corporation.  All rights reserved.


Connected to:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

SQL> select * from tts_test;

ID         NAME
---------- ----------
maddog     강명규
superman   슈퍼맨
dbakorea   강명규

SQL> conn system/manager
연결되었습니다.
SQL> select tablespace_name, status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
RBS                            ONLINE
USERS                          ONLINE
TEMP                           ONLINE
TOOLS                          ONLINE
INDX                           ONLINE
TS_KANG                        READ ONLY
TS_KANG_IDX                    READ ONLY

8 개의 행이 선택되었습니다.

SQL> alter tablespace ts_kang read write;

테이블 영역이 변경되었습니다.

SQL> alter tablespace ts_kang_idx read write;

테이블 영역이 변경되었습니다.

SQL>

This article comes from dbakorea.pe.kr (Leave this line as is)

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,040 명
  • 현재 강좌수 :  35,850 개
  • 현재 접속자 :  148 명