본문 바로가기
Oracle/이관

[TTS]11g file system to 19c ASM Migration

by 취미툰 2019. 11. 5.
반응형

오늘은 현재 오라클 최신버전인 19c 버전으로 Migration하는 방법을 포스팅하려고 한다.

 

TTS 사용시엔 아래와 같은 제약사항이 존재한다.

- Source DBTarget DB 간의 character set이 동일해야 한다.

- system,undo,sysaux,temp는 지원 불가능

- 10g 이전 버전은 source target이 같은 플랫폼일 때만 지원

- 10g 이후 버전은 rman 변환 작업을 통하여 지원가능

- SourceTarget은 동일한 Block Size를 사용해야 한다.

- Standard Edition은 지원 불가능

- Target DBSource 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.

 

중요!!!▶ 옮길 Tablespaceread only로 변경

sql> alter tablespace tts read only;

 

▶ expdpobject 정보의 메타데이터 추출

$ 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

댓글