Oracle Database 11gR2(11.2.0.4)から12cR2(12.2.0.1)のPDBにTTS(トランスポータブル表領域)をしてみる。
表題の通り、Oracle Database 11gR2(11.2.0.4)から12cR2(12.2.0.1)の
PDBにTTS(トランスポータブル表領域)を実行してみるやで彡(゚)(゚)
プラットフォームはどちらも Linux x86 64bitで試します。
特別な手順は必要なくマニュアル通りに粛々と実施するだけです。
Oracle Database管理者ガイド 11gリリース2 (11.2) B56301-08 データベース間で表領域をトランスポートする手順および例 https://docs.oracle.com/cd/E16338_01/server.112/b56301/tspaces.htm#i1007252 Oracle Database データベース管理者ガイド 12c リリース2 (12.2) 15.1.2.2 トランスポータブル表領域またはトランスポータブル表の使用例 https://docs.oracle.com/cd/E82638_01/admin/transporting-data.html#GUID-5158E6EB-591A-4DF0-9A44-BAF1E10338A8
0. 移行対象の表/表領域
移行対象は以下の表(TBL_TEST_TTS1,TBL_TEST_TTS2)/表領域(TBS_TTS1,TBS_TTS2)とします。
-- 11gR2 COLUMN OWNER FORMAT A20; COLUMN SEGMENT_NAME FORMAT A20; COLUMN BYTES FORMAT 999,999,999; COLUMN TABLESPACE_NAME FORMAT A20; SELECT OWNER, SEGMENT_NAME, BYTES, TABLESPACE_NAME FROM DBA_SEGMENTS WHERE TABLESPACE_NAME IN ('TBS_TTS1', 'TBS_TTS2'); OWNER SEGMENT_NAME BYTES TABLESPACE_NAME -------------------- -------------------- ------------ -------------------- AYSHIBAT TBL_TEST_TTS1 196,608 TBS_TTS1 AYSHIBAT TBL_TEST_TTS2 196,608 TBS_TTS2
1. 移行元/移行先のエンディアンを確認
まず移行元/移行先のエンディアンを確認します。
今回はどちらも同じエンディアン彡(゚)(゚)
-- 移行元(11gR2)のエンディアン COLUMN PLATFORM_NAME FORMAT A30; COLUMN ENDIAN_FORMAT FORMAT A30; SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME; PLATFORM_NAME ENDIAN_FORMAT ------------------------------ ------------------------------ Linux x86 64-bit Little -- 移行先(12cR2)のエンディアン COLUMN PLATFORM_NAME FORMAT A30; COLUMN ENDIAN_FORMAT FORMAT A30; SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME; PLATFORM_NAME ENDIAN_FORMAT ------------------------------ ------------------------------ Linux x86 64-bit Little
2. 表領域が自己完結しているかを確認
下記のコマンドで表領域が自己完結しているかを確認します。
TRANSPORT_SET_VIOLATIONSで行が出なければ、自己完結しています。
-- 11gR2 EXECUTE SYS.DBMS_TTS.TRANSPORT_SET_CHECK('TBS_TTS1, TBS_TTS2', TRUE); SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS; PL/SQL procedure successfully completed. no rows selected
3. 移行対象の表領域を READ ONLY にします。
下記のコマンドで移行対象の表領域を READ ONLY にします。
-- 11gR2 ALTER TABLESPACE TBS_TTS1 READ ONLY; ALTER TABLESPACE TBS_TTS2 READ ONLY; Tablespace altered. Tablespace altered.
4. 表領域の定義情報をエクスポート(expdp)
expdpコマンドで表領域の定義情報をエクスポートします。
定義情報だけのエクスポートなので、時間はそれほど掛かりません。
# 11gR2 expdp AYSHIBAT/xxxxxxxx@orcl dumpfile=tts_users.dmp directory=DIR_AYSHIBAT transport_tablespaces=TBS_TTS1,TBS_TTS2 logfile=exp_tts_users.log Export: Release 11.2.0.4.0 - Production on Tue Jun 26 18:49:44 2018 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options Starting "AYSHIBAT"."SYS_EXPORT_TRANSPORTABLE_01": AYSHIBAT/********@orcl dumpfile=tts_users.dmp directory=DIR_AYSHIBAT transport_tablespaces=TBS_TTS1,TBS_TTS2 logfile=exp_tts_users.log Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK Processing object type TRANSPORTABLE_EXPORT/TABLE Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK Master table "AYSHIBAT"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for AYSHIBAT.SYS_EXPORT_TRANSPORTABLE_01 is: /home/oracle/work/ayshibat/tts_users.dmp ****************************************************************************** Datafiles required for transportable tablespace TBS_TTS1: +DATA/orcl/datafile/tbs_tts1.266.979841605 Datafiles required for transportable tablespace TBS_TTS2: +DATA/orcl/datafile/tbs_tts2.267.979841605 Job "AYSHIBAT"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Tue Jun 26 18:50:53 2018 elapsed 0 00:01:06
5. dmpファイルとデータファイルの転送(コピー)
dmpファイルとデータファイルを移行先(12cR2)に転送(コピー)します。
データファイルの転送にはcpコマンド/DBMS_FILE_TRANSFER/RMAN等々の手段が有りますが、
今回は 11gR2のASM ⇒ asmcmdでファイルシステムに出力 ⇒ scpで転送 ⇒ 12cR2のファイルシステム とします。
# 11gR2 asmcmd cd +DATA/ORCL/DATAFILE ls -l Type Redund Striped Time Sys Name DATAFILE MIRROR COARSE JUN 26 18:00:00 Y SYSAUX.257.836897651 DATAFILE MIRROR COARSE JUN 26 18:00:00 Y SYSTEM.256.836897649 DATAFILE MIRROR COARSE JUN 26 18:00:00 Y TBS_TTS1.266.979841605 DATAFILE MIRROR COARSE JUN 26 18:00:00 Y TBS_TTS2.267.979841605 DATAFILE MIRROR COARSE JUN 26 18:00:00 Y UNDOTBS1.258.836897653 DATAFILE MIRROR COARSE JUN 26 18:00:00 Y USERS.259.836897653 cp '+DATA/ORCL/DATAFILE/TBS_TTS1.266.979841605' '/home/grid/work/ayshibat/TBS_TTS1.266.979841605' cp '+DATA/ORCL/DATAFILE/TBS_TTS2.267.979841605' '/home/grid/work/ayshibat/TBS_TTS2.267.979841605' copying +DATA/ORCL/DATAFILE/TBS_TTS1.266.979841605 -> /home/grid/work/ayshibat/TBS_TTS1.266.979841605 copying +DATA/ORCL/DATAFILE/TBS_TTS2.267.979841605 -> /home/grid/work/ayshibat/TBS_TTS2.267.979841605 ↓ 【scpでdmpファイルとデータファイルを転送(コピー)】 ↓ # 12cR2 cd /u01/app/oracle/oradata/AYUCDB/6C4B2D3386C20FB8E055000000000001/datafile/ ls -la -rw-r--r--. 1 oracle oinstall 10493952 Jun 26 18:55 TBS_TTS1.266.979841605 ★scpで転送(コピー)したデータファイル -rw-r--r--. 1 oracle oinstall 10493952 Jun 26 18:56 TBS_TTS2.267.979841605 ★scpで転送(コピー)したデータファイル -rw-r-----. 1 oracle oinstall 398467072 Jun 26 18:35 o1_mf_sysaux_fhq8s86l_.dbf -rw-r-----. 1 oracle oinstall 272637952 Jun 26 18:57 o1_mf_system_fhq8s865_.dbf : cd /home/oracle/work/ayshibat ls -la tts_users.dmp -rw-r--r--. 1 oracle oinstall 94208 Jun 26 18:50 tts_users.dmp ★scpで転送(コピー)したdmpファイル
6. PDBに表領域の定義情報をインポート(impdp)
impdpコマンドで表領域の定義情報をインポートします。
やはり定義情報だけのインポートなので、時間はそれほど掛かりません。
# 12cR2 impdp AYSHIBAT/xxxxxxxx@PDB01 dumpfile=tts_users.dmp directory=DIR_AYSHIBAT \ transport_datafiles=\ '/u01/app/oracle/oradata/AYUCDB/6C4B2D3386C20FB8E055000000000001/datafile/TBS_TTS1.266.979841605',\ '/u01/app/oracle/oradata/AYUCDB/6C4B2D3386C20FB8E055000000000001/datafile/TBS_TTS2.267.979841605' \ logfile=imp_tts_users.log Import: Release 12.2.0.1.0 - Production on Tue Jun 26 19:10:48 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production Master table "AYSHIBAT"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded Starting "AYSHIBAT"."SYS_IMPORT_TRANSPORTABLE_01": AYSHIBAT/********@PDB01 dumpfile=tts_users.dmp directory=DIR_AYSHIBAT transport_datafiles=/u01/app/oracle/oradata/AYUCDB/6C4B2D3386C20FB8E055000000000001/datafile/TBS_TTS1.266.979841605,/u01/app/oracle/oradata/AYUCDB/6C4B2D3386C20FB8E055000000000001/datafile/TBS_TTS2.267.979841605 logfile=imp_tts_users.log Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK Processing object type TRANSPORTABLE_EXPORT/TABLE Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK Job "AYSHIBAT"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Tue Jun 26 19:11:05 2018 elapsed 0 00:00:13
7. PDBに接続してデータを確認
PDBに接続してデータを確認します。見事にデータが転送されています。
やったぜ彡(^)(^)
-- 12cR2 sqlplus /nolog CONNECT AYSHIBAT/xxxxxxxx@PDB01 SHOW CON_NAME; COLUMN OWNER FORMAT A20; COLUMN SEGMENT_NAME FORMAT A20; COLUMN BYTES FORMAT 999,999,999; COLUMN TABLESPACE_NAME FORMAT A20; SELECT OWNER, SEGMENT_NAME, BYTES, TABLESPACE_NAME FROM DBA_SEGMENTS WHERE TABLESPACE_NAME IN ('TBS_TTS1', 'TBS_TTS2'); SELECT COUNT(*) FROM TBL_TEST_TTS1; SELECT COUNT(*) FROM TBL_TEST_TTS2; SQL*Plus: Release 12.2.0.1.0 Production on Tue Jun 26 19:14:27 2018 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected. CON_NAME ------------------------------ PDB01 OWNER SEGMENT_NAME BYTES TABLESPACE_NAME -------------------- -------------------- ------------ -------------------- AYSHIBAT TBL_TEST_TTS2 196,608 TBS_TTS2 AYSHIBAT TBL_TEST_TTS1 196,608 TBS_TTS1 COUNT(*) ---------- 10000 COUNT(*) ---------- 10000
8. 表領域の READ ONLY状態を解除
表領域のREAD ONLY状態を解除します。ちな移行元(今回は11gR2)のREAD ONLY解除は、
データファイル書き出しが終わった時点で実施してOKですやで彡(゚)(゚)
-- 11gR2 SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES WHERE TABLESPACE_NAME IN ('TBS_TTS1', 'TBS_TTS2'); ALTER TABLESPACE TBS_TTS1 READ WRITE; ALTER TABLESPACE TBS_TTS2 READ WRITE; SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES WHERE TABLESPACE_NAME IN ('TBS_TTS1', 'TBS_TTS2'); TABLESPACE_NAME STATUS ------------------------------ --------- TBS_TTS1 READ ONLY TBS_TTS2 READ ONLY Tablespace altered. Tablespace altered. TABLESPACE_NAME STATUS ------------------------------ --------- TBS_TTS1 ONLINE TBS_TTS2 ONLINE -- 12cR2 SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES WHERE TABLESPACE_NAME IN ('TBS_TTS1', 'TBS_TTS2'); ALTER TABLESPACE TBS_TTS1 READ WRITE; ALTER TABLESPACE TBS_TTS2 READ WRITE; SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES WHERE TABLESPACE_NAME IN ('TBS_TTS1', 'TBS_TTS2'); TABLESPACE_NAME STATUS ------------------------------ --------- TBS_TTS1 READ ONLY TBS_TTS2 READ ONLY Tablespace altered. Tablespace altered. TABLESPACE_NAME STATUS ------------------------------ --------- TBS_TTS1 ONLINE TBS_TTS2 ONLINE
9. まとめ
特別な手順は無く、11gR2 ⇒ 12cR2(PDB) の
TTS(トランスポータブル表領域)が実行できました彡(^)(^)
リアルな環境を考慮すると、5. のデータファイル転送(コピー)のところで
最も時間が掛かるのですが、一旦中間ファイルに書き出す今回のやり方よりも、
中間ファイルを介さずに直接転送する方法も有るようなので、
詰める余地が有りますやね彡(゚)(゚)