이번 테스트는 같은 OS platform에서 11g -> 18c로 Migration하는 방법을 포스팅합니다.
사전확인
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 18.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
---------- --------- ----------- ------------------ --------------
1683620464 13 Linux x86 64-bit Little-
TTS가 활용가능한지 체크 후에 다음으로 진행한다.
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:trans.dmp transport_tablespaces=tts;
Export: Release 11.2.0.1.0 - Production on Tue Oct 29 10:03:35 2019
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
...생략
- 이로써 Source DB의 준비는 끝났으며 Target DB 설정 후 TTS를 진행한다.
Target DB
▶ DB 유저 생성 및 디렉토리 생성
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파일을 전송한다.
▶dbf [datafile 경로] 밑으로옮겨준다
▶메타데이터 dmp파일을 impdp를사용하여 넣어준다
$impdp system/oracle dumpfile=trans_dir:trans.dmp transport_datafiles=’ /u01/app/oracle/oradata/tts.dbf’
Import: Release 18.0.0.0.0 - Production on Tue Oct 29 10:48:15 2019
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
…생략
▶ 데이터가 Migration되었는지 확인
SQL> conn tts/tts
Connected.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
TTS_1 TABLE
SQL> select count(*) from tts_1;
COUNT(*)
----------
1000000
SQL> select segment_name,segment_type from user_segments;
SEGMENT_NAME SEGMENT_TYPE
---------------------------
TTS_1 TABLE
TTS_1_LVL INDEX
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
TTS_1 TABLE
▶ 유저의 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 tts default tablespace tts;
User altered.
SQL> select username,default_tablespace from dba_users where username='TTS';
USERNAME DEFAULT_TABLESPACE
-------------------------------
TTS TTS
이상입니다.
'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 11g window migration (0) | 2019.11.05 |
[TTS]11g file system to 19c ASM Migration (0) | 2019.11.05 |
댓글