表題の通り、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#i1007252Oracle 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. のデータファイル転送(コピー)のところで
最も時間が掛かるのですが、一旦中間ファイルに書き出す今回のやり方よりも、
中間ファイルを介さずに直接転送する方法も有るようなので、
詰める余地が有りますやね彡(゚)(゚)
※2018/6/27追記
「5. dmpファイルとデータファイルの転送(コピー)」の
データファイル転送部分はDBMS_FILE_TRANSFERパッケージでも行けました。
ファイルシステム(中間ファイル)を介さないので理論上速い。
下記記事参照彡(゚)(゚)
DBMS_FILE_TRANSFERパッケージでDB(11gR2) -> DBLINK -> PDB(12cR2)のデータファイルの転送(コピー)を実行する。(Oracle Database)
https://qiita.com/ora_gonsuke777/items/94cf4572cdad942f8d52