TTS Migration
서로 다른 DB간 Tablespace단위로 Datafile을 migration 할 수 있는 기능
TTS 제약사항
- 10g 이전 버전에서는 원본과 대상이 동일 platform일 경우 migration 가능
- 동일 블록 사이즈 사용
- system, undo, sysaux, temp tablespace 는 지원 불가능
- asm 사용시 rman을 사용해 변환 작업을 거쳐야 함
- standard edition 에서는 지원안됨
|
Oracle 8i |
Oracle 9i |
Oracle 10g |
blcok size |
동일 |
달라도 됨 |
달라도 됨 |
platform (os) |
동일 |
동일 |
달라도 됨 |
character set |
동일 |
동일 |
동일 |
- character set, block size, platform 정보 확인 후 migration
character set 확인
select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
-character set 다를 경우 변경 방법- ex) KO16KSC601 로 변경
sql> shutdown immediate;
sql> startup mount;
sql> alter system enable restricted session;
sql> alter system set job_queue_processes=0;
sql> alter system set aq_tm_processes=0;
sql> alter database open;
sql> alter database character set internal_use KO16KSC5601;
sql> shutdown immediate
sql> startup
block size 확인
sql> show parameter block_size;
원본과 대상의 초기 parameter COMPATIBLE_VERSION 이 10.0 이상이어야 함.
(compatible_version 과 oracle version은 다른 것임)
sql> show parameter compatible
platform 확인
sql> select d.dbid,d.name,tp.platform_id, tp.platform_name,tp.endian_format
from v$transportable_platform tp, v$database d where tp.platform_name = d.platform_name;
platform 의 endian_format(os 속성) 이 동일해야 함. 다를 경우 rman 의 convert 명령어 이용
sql> select PLATFROM_ID, PLATFORM_NAME, ENDIAN_FORMAT from v$transportable_platform ;
ex) HP UX ENDIAN_FORMAT=big => Microsoft Windows ENDIAN_FORMAT=little
$rman target=/
RMAN> convert tablespace 'TEST' to platform='Microsoft Windows IA (32-bit)' db_file_name_convert='/home/oracle/oradat/testdb/test01.dbf', '/home/oracle/test01_win.dbf';
-------------------------------------------------------------------------------------------준비 단계
실습.
Windows 7 oracle 11g -> RHEL 5.3 oracle 11g
Windows = source
RHEL = target
SOURCE
sql> conn / as sysdba
Test 용 tablespace, table 생성
sql> create tablespace test datafile 'c:\app\vmware\oradata\orcl\test_01.dbf' size 30m;
sql> create user test
default tablespace test
quota unlimited on test
identified by test;
sql> grant connect, resource to test;
sql> conn test/test
sql> create table test100(no number, name varchar2(10));
sql> create table test101(no number, name varchar2(10));
sql> insert into test100 values(1,'apple');
sql> insert into test100 values(2,'orange');
sql> insert into test101 values(1,'car');
sql> insert into test101 values(2,'ship');
sql> select segment_name, tablespace_name from user_segments;
SEGMENT_NAME TABLESPACE_NAME
------------------ ----------------------
TEST100 TEST
TEST101 TEST
sql> select * from test.test100; <-- insert 한 결과 잘 나오나 확인
sql> select * from test.test101; <-- insert 한 결과 잘 나오나 확인
이동하려는 tablespace test 가 이동 가능한지 확인
sql> conn / as sysdba
sql> exec DBMS_TTS.transport_set_check('TEST',true) ;
pl/sql 처리가 정상적으로 완료되었습니다.
sql> select * from transport_set_violations ;
선택된 레코드가 없습니다.
test tablespace 를 read only 모드로 변경 (exp, imp하기위해서)
sql> alter tablespace test read only ;
datapump 하기 위해 directory 생성, 권한부여
sql> create or replace directory dump as 'c:\app\vmware\dump' ;
sql> grant read, write on directory dump to system ;
$ expdp system/oracle dumpfile=dump:test.dmp transport_tablespaces=test
ftp 이용해서 test.dmp , test_01.dbf 파일을 target db 로 이동
-binary 모드로 변경 후 파일 이동-
TARGET
datapump 경로 설정
sql> create or replace directory dump as '/app/datapump';
sql> grant read, write on directory dump to system;
user 생성 (source db 에서 test user로 했기 때문에 target 도 test의 user가 있어야 함)
sql> create user test identified by test
* Source DB 에서 Target DB 로 옮기려고 하는 tablespace 중 target db에 동일한 이름의 tablespace 가 있으면 안됨.
impdp system/oracle dumpfile=test.dmp directory=dump transport_datafiles=/app/oracle/oradata/testdb/test_01/dbf
'오라클 > 백업/복구' 카테고리의 다른 글
RMAN+Clone DB 사용해서 복구 (0) | 2014.11.17 |
---|---|
RMAN 복구하기 (0) | 2014.11.14 |
RMAN (0) | 2014.11.13 |
Flashback (0) | 2014.11.12 |
Clone DB (0) | 2014.11.10 |
sql loader (0) | 2014.11.10 |
데이터 이동하기 (0) | 2014.11.06 |