오늘은 현재 오라클 최신버전인 19c 버전으로 Migration하는 방법을 포스팅하려고 한다.
TTS 사용시엔 아래와 같은 제약사항이 존재한다.
- 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를 생성해야 한다.
먼저 Source DB의 정보.
▶ nls_characterset이 같은지 확인한다.
select value from nls_database_parameters where parameter='NLS_CHARACTERSET'
VALUE
---------------
KO16MSWIN949
▶ compatible을 확인한다. (양쪽다 10.0 이상이어야 한다)
show parameter compatible
NAME TYPE VALUE
------------ ----------- ------------------------------
compatible string 11.2.0.0.0
▶ 블록사이즈를 확인한다.
show parameter db_block_size
NAME TYPE VALUE
-------------- ----------- ---------
db_block_size integer 8192
▶ Endian_format을 확인한다.
select d.dbid,d.name,tp.platform_id,tp.platform_name,endian_format from v$transportable_platform tp,v$database d
where tp.platform_name=d.platform_name
DBID NAME PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
---------- --------- ----------- ------------------ --------------
1681187063 13 Linux x86 64-bit Little
그다음은 Target DB 정보
▶ nls_characterset이 같은지 확인한다.
select value from nls_database_parameters where parameter='NLS_CHARACTERSET'
VALUE
----------------
KO16MSWIN949
▶ compatible을 확인한다. (양쪽다 10.0 이상이어야 한다)
show parameter compatible
NAME TYPE VALUE
------------ ----------- ------------------------------
compatible string 19.0.0
▶ 블록사이즈를 확인한다.
show parameter db_block_size
NAME TYPE VALUE
-------------- ----------- ---------
db_block_size integer 8192
▶ Endian_format을 확인한다.
select d.dbid,d.name,tp.platform_id,tp.platform_name,endian_format from v$transportable_platform tp,v$database d
where tp.platform_name=d.platform_name
DBID NAME PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
---------- --------- ----------- ------------------ --------------
1893767306 13 Linux x86 64-bit Little
확인해서 봐야하는것이 block size와 endian_format이 같은형식인지 그리고 nls_characterset이 동일한지 봐야한다.
동일하다면 다음으로 진행한다.
Source DB
▶ 테스트용 테이블 생성
sql> create tablespace tts
datafile '/app/oracle/oradata/ysbae/tts.dbf' size 1G;
Tablespace created.
▶ 유저 생성
sql> create user tts identified by tts default tablespace tts quota unlimited on tts;
▶ tts 유저에 접속권한 부여
sql> grant connect,resource to tts;
Grant succeeded.
▶ 테스트 테이블 및 인덱스 생성
sql> conn tts/tts
sql> create table tts_1 as
select l.*, o.*
from
(select dbms_random.string('l',10) from dual) o,
(select level as lvl
from dual connect by level <= 1000000) l ;
Table created.
sql> select count(*) from tts_1;
COUNT(*)
----------
1000000
sql> create index tts_1_lvl on tts_1(lvl);
Index created.
sql> select segment_name,segment_type from user_segments;
SEGMENT_NAME SEGMENT_TYPE
----------------- ------------------
TTS_1 TABLE
TTS_1_LVL INDEX
-테스트용 테이블과 인덱스가 정상생성된 것을 확인할 수 있다.
▶ tts 가능여부 체크(sys 계정에서 진행)
sql> exec dbms_tts.transport_set_check('TTS',true);
PL/SQL procedure successfully completed.
sql> select * from transport_Set_violations
no rows selected
- no rows selected가 뜨면 위반사항이 없다는 뜻이고 진행하면 된다.
▶ expdp/impdp위한 디렉토리 생성
$mkdir /home/oracle/tts
sql> create or replace directory trans_dir as '/home/oracle/tts'
Directory created.
sql> grant read,write on directory trans_dir to system;
Grant succeeded.
중요!!!▶ 옮길 Tablespace를 read only로 변경
sql> alter tablespace tts read only;
▶ expdp로 object 정보의 메타데이터 추출
$ expdp system/oracle dumpfile=trans_dir:asm2.dmp transport_tablespaces=tts;
Export: Release 11.2.0.1.0 - Production on Tue Nov 5 11:11:29 2019
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=trans_dir:asm2.dmp transport_tablespaces=tts
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/tts/asm2.dmp
******************************************************************************
Datafiles required for transportable tablespace TTS:
/app/oracle/oradata/ysbae/tts.dbf
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 11:12:00
- 이로써 Source DB의 준비는 끝났으며 Target DB 설정 후 TTS를 진행한다.
Target DB
▶ DB 유저 생성 및 디렉토리 생성
$mkdir /home/oracle/tts
sql> create or replace directory trans_dir as '/home/oracle/tts'
Directory created.
Sql>grant read,write on directory trans_dir to system;
Sql> create user tts identified by tts default tablespace users;
User created.
sql> grant connect,resource to tts;
▶ TTS에 필요한 dbf파일과 dmp파일을 Target DB로 전송
-파일전송 툴을 사용하여 dmp파일과 dbf파일을 전송한다.
(작성자는 file zilla를 통해 dbf파일과 dmp파일을 전송하였다)
$ pwd
/home/oracle/tts
$ ls
afiedt.buf asm2.dmp import.log tts.dbf
중요!
▶ ASM 시스템에 rman convert를 수행한다.
$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on Tue Nov 5 11:00:30 2019
Version 19.5.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database:
RMAN> convert datafile '/home/oracle/tts/tts.dbf' format '+DATA/ORAASM/tts.dbf';
Starting conversion at target at 19/10/29
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=280 device type=DISK
channel ORA_DISK_1: starting datafile conversion
input file name=/home/oracle/tts/tts.dbf
converted datafile=+DATA/ORAASM/tts.dbf
Channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:35
Finished conversion at target at 19/10/29
Starting Control File and SPFILE Autobackup at 19/10/29
piece handle=+FRA/ORAASM/AUTOBACKUP/2019_10_29/s_1022949209.323.1022949211 comment=NONE
Finished Control File and SPFILE Autobackup at 19/10/29
RMAN-08591: warning: invalid archived log deletion policy
▶메타데이터 dmp파일을 impdp를사용하여 넣어준다
$ impdp system/oracle dumpfile=trans_dir:asm2.dmp transport_datafiles='+DATA/ORAASM/tts.dbf'
Import: Release 19.0.0.0.0 - Production on Tue Oct 29 16:37:12 2019
Version 19.5.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
…생략
▶ 데이터가 Migration되었는지 확인
SQL> select segment_name,segment_type from user_segments;
SEGMENT_NAME SEGMENT_TYPE
-----------------------------
TTS_1 TABLE
TTS_1_LVL INDEX
SQL> select count(*) from tts_1;
COUNT(*)
----------
1000000
▶ 유저의 default tablespace 확인 및 read write mode 변경
SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces
where tablespace_name='TTS';
TABLESPACE_NAME STATUS
------------------------------
TTS READ ONLY
SQL> alter tablespace tts read write ;
Tablespace altered.
SQL> select tablespace_name,status from dba_tablespaces
2 where tablespace_name='TTS';
TABLESPACE_NAME STATUS
------------------------------
TTS ONLINE
SQL> alter user tts identified by "tocsg0124!" default tablespace tts;
User altered.
SQL> select username,default_tablespace from dba_users where username='TTS';
USERNAME DEFAULT_TABLESPACE
-------------------------------
TTS TTS
이로써 테이블과 인덱스가 잘 옮겨진것을 확인하였다.
ASM일 경우 rman으로 convert해주는것이 중요 point라고 생각이 든다.
'Oracle > 이관' 카테고리의 다른 글
Redo log,Datafile 경로 변경 (0) | 2020.10.27 |
---|---|
MSSQL to Oracle DB Link (2) | 2020.09.14 |
[TTS]11g file system to 19c ASM Migration_2 (0) | 2020.03.05 |
[TTS]11g linux to 18c linux migration (0) | 2019.11.05 |
[TTS]11g linux to 11g window migration (0) | 2019.11.05 |
댓글