
本記事の目的
DBaaSへのDB移行手法の確立のため、今回は「Data Pump Transportable Tablespace(TTS)」によるDB移行手順を確認してみました。
前提/準備
検証に利用した環境情報は以下の通り。
・移行元
OS:RHEL 6.10
DBバージョン:11gR2(11.2.0.4.0)
DBエディション:Enterprise Edition(TTSのエクスポート元はEEライセンスが必要)
構成:Single/Non-MTA
マシン名:vmee01
・移行先
OS:RHEL 6.10
DBバージョン:18c(18.3.0)
DBエディション:Standard Edition
構成:Single/MTA
マシン名:vmse01(3文字目がSという違いだけ・・・)
移行元のデータベースはオンプレ環境の想定ですが、今回は手順検証のため移行元と移行先の両方をOracle CloudのDBaaS(VM)上に準備しました。
なお、トランスポータブル表領域の前提条件は事前に確認済みとしています。
ポイント
TTSを利用した移行手順の流れに関しては、環境がオンプレミスからクラウドに変わるだけなので、従来と大きく変わるところはありません。
今回、実際に検証してみて感じた考慮すべきポイントとしては以下の2点がありました。
- DBaaSのデータファイルはASM上に配置されている
⇒ASM上のデータファイルは、DBMS_FILE_TRANSFERパッケージを利用してコピー可能
(今回はDBリンクと組み合わせて、Data Pumpの中間ファイル生成なしの手順を検証) - DBaaSの表領域はデフォルトで暗号化されている
⇒移行元も表領域暗号化の場合、walletファイルのマージを考慮する
あとは、実際の業務システムのDBを移行する場合には以下がポイントとなりそうですが、これについてはまた別の機会に。
- データファイルの転送時間(高速化のためのチューニング手法)
手順
本記事では、移行元、移行先のDBaaS(VM)は予めプロビジョニング済みのところからスタート。
後述のデータベースリンク経由接続のためのセキュリティリスト(TCPポート1521通信許可)も設定済み。
移行元:テストデータ格納用表領域作成
[oracle@vmee01 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sat Mar 30 03:30:11 2019 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Real Application Clusters and Automatic Storage Management options -- テストデータ用表領域作成 SQL> create tablespace test001 datafile size 1024m uniform size 1m segment space management auto; Tablespace created. SQL> select tablespace_name, file_name from dba_data_files; TABLESPACE_NAME FILE_NAME ------------------------------ -------------------------------------------------------------------------------- UNDOTBS1 +DATA/ora1124_phx1xx/datafile/undotbs1.263.1004236517 SYSAUX +DATA/ora1124_phx1xx/datafile/sysaux.262.1004236517 SYSTEM +DATA/ora1124_phx1xx/datafile/system.261.1004236517 USERS +DATA/ora1124_phx1xx/datafile/users.266.1004236875 TEST001 +DATA/ora1124_phx1xx/datafile/test001.267.1004247931★ 5 rows selected.
⇒今回は1表領域だけで検証。
移行元:テストデータ作成
-- 移行データ所有ユーザ作成 SQL> create user test001 identified by ******* default tablespace TEST001; User created. SQL> grant connect,resource to test001; Grant succeeded. SQL> conn test001/******* Connected. -- テスト用データ作成 SQL> create table test(col1 char(8)); Table created. SQL> insert into test select level from dual connect by level<=50000; 50000 rows created. SQL> create index i_test on test(col1); Index created. SQL> commit; Commit complete. SQL> select count(*) from test; COUNT(*) ---------- 50000
移行元:TTS作業用スキーマ作成
sqlplus / as sysdba -- ユーザー作成 CREATE USER EXPUSER IDENTIFIED BY ******* DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP; -- 権限付与 GRANT CREATE SESSION TO EXPUSER; GRANT DATAPUMP_EXP_FULL_DATABASE TO EXPUSER; ALTER USER EXPUSER QUOTA UNLIMITED ON USERS;
移行元:ディレクトリオブジェクト作成
-- datapumpデータ用ディレクトリ・オブジェクト作成 SQL> CREATE OR REPLACE DIRECTORY dp_for_cloud as '+DATA/ora1124_phx1xx/datafile/'; Directory created. -- datapumpログ用ディレクトリ・オブジェクト作成 SQL> CREATE DIRECTORY DIR_LOGFILE as '/home/oracle/log'; -- 各ディレクトリ・オブジェクトへのREAD、WRITE権限付与 SQL> GRANT READ, WRITE ON DIRECTORY dp_for_cloud TO EXPUSER; Grant succeeded. SQL> GRANT READ, WRITE ON DIRECTORY DIR_LOGFILE TO EXPUSER; Grant succeeded.
移行元:現環境のエンディアンを確認(オプション)
COLUMN PLATFORM_NAME FORMAT A30; COLUMN ENDIAN_FORMAT FORMAT A30; SELECT d.DB_UNIQUE_NAME, d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp , V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME; DB_UNIQUE_NAME PLATFORM_NAME ENDIAN_FORMAT ------------------------------ ------------------------------ ------------------------------ ora1124_phx1xx Linux x86 64-bit Little
⇒後述のDBMS_FILE_TRANSFERを利用した場合、エンディアン変換してくれるので確認作業は必須ではないはず。
移行元:移行対象表領域の自己完結確認
SQL> execute DBMS_TTS.TRANSPORT_SET_CHECK('TEST001', TRUE); PL/SQL procedure successfully completed. SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS; no rows selected
⇒移行対象表領域が複数ある場合、全ての表領域を確認すること。
移行先:TTS作業用スキーマ作成
※ここからしばらく移行先環境での作業
[oracle@vmse01 ~]$ sqlplus / as sysdba SQL*Plus: Release 18.0.0.0.0 - Production on Sat Mar 30 03:44:20 2019 Version 18.3.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Connected to: Oracle Database 18c Standard Edition 2 Release 18.0.0.0.0 - Production Version 18.3.0.0.0 -- pdb1に切り替え alter session set container=pdb1; -- ユーザー作成 CREATE USER IMPUSER IDENTIFIED BY ******* DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP; -- 権限付与 GRANT CREATE SESSION TO IMPUSER; GRANT DATAPUMP_IMP_FULL_DATABASE TO IMPUSER; ALTER USER IMPUSER QUOTA UNLIMITED ON USERS;
移行先:ディレクトリオブジェクト作成
-- datapumpデータ用ディレクトリ・オブジェクト作成 SQL> CREATE OR REPLACE DIRECTORY dp_from_onprem as '+DATA/VMSE01_PHX12D/841B34CDC98721D5E0530201000A6B72/DATAFILE/'; Directory created. -- datapumpログ用ディレクトリ・オブジェクト作成 SQL> CREATE DIRECTORY DIR_LOGFILE as '/home/oracle/log'; Directory created. -- 各ディレクトリ・オブジェクトへのREAD, WRITE権限付与 SQL> GRANT READ, WRITE ON DIRECTORY dp_from_onprem TO IMPUSER; Grant succeeded. SQL> GRANT READ, WRITE ON DIRECTORY DIR_LOGFILE to IMPUSER; Grant succeeded.
移行先:移行先環境のエンディアン確認(オプション)
COLUMN PLATFORM_NAME FORMAT A30; COLUMN ENDIAN_FORMAT FORMAT A30; SELECT d.DB_UNIQUE_NAME, d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp , V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME; DB_UNIQUE_NAME PLATFORM_NAME ENDIAN_FORMAT ------------------------------ ------------------------------ ------------------------------ vmse01_phx12d Linux x86 64-bit Little
⇒移行元と同じリトルエンディアンであることを確認
移行先:データファイルコピー用のデータベースリンク作成
SQL> CREATE PUBLIC DATABASE LINK DBL_ORCL_11GR2 CONNECT TO EXPUSER IDENTIFIED BY xxxxx USING 'xxxxx:1521/"xxxxx"'; Database link created. -- DBLINKのテスト SQL> SELECT BANNER FROM V$VERSION@DBL_ORCL_11GR2; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production PL/SQL Release 11.2.0.4.0 - Production CORE 11.2.0.4.0 Production TNS for Linux: Version 11.2.0.4.0 - Production NLSRTL Version 11.2.0.4.0 - Production
⇒移行先のDB(18c)から、DBリンク経由で移行元DB(11gR2)へ接続できていることを確認
移行元で業務停止★
★★★ 業務停止ここから ★★★
移行元:移行対象表領域をREAD ONLYモードに変更
SQL> ALTER TABLESPACE TEST001 READ ONLY; Tablespace altered.
⇒一貫性を保った状態でコピーするため、移行対象の表領域を一旦read onlyステータスに変更
移行元:Data Pump(expdp)のTTSを実行
expdp EXPUSER/******* \ TRANSPORT_TABLESPACES=test001 \ TRANSPORT_FULL_CHECK=YES \ DIRECTORY=dp_for_cloud \ logfile= DIR_LOGFILE:expdp_tts_20190330.log Export: Release 11.2.0.4.0 - Production on Sat Mar 30 06:31:41 2019 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 Real Application Clusters and Automatic Storage Management options Starting "EXPUSER"."SYS_EXPORT_TRANSPORTABLE_01": EXPUSER/******** TRANSPORT_TABLESPACES=test001 TRANSPORT_FULL_CHECK=YES DIRECTORY=dp_for_cloud logfile= Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK Processing object type TRANSPORTABLE_EXPORT/TABLE Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK Master table "EXPUSER"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for EXPUSER.SYS_EXPORT_TRANSPORTABLE_01 is: +DATA/ora1124_phx1xx/datafile/expdat.dmp ****************************************************************************** Datafiles required for transportable tablespace TEST001: +DATA/ora1124_phx1xx/datafile/test001.267.1004247931 Job "EXPUSER"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Sat Mar 30 06:31:59 2019 elapsed 0 00:00:17
移行先:DBMS_FILE_TRANSFERパッケージによるデータファイルの転送
-- 移行先PDBで作業 SQL> show con_name CON_NAME ------------------------------ PDB1 -- 移行対象test001表領域用のデータファイルを移行元からコピー BEGIN DBMS_FILE_TRANSFER.GET_FILE( 'dp_for_cloud' -- 現環境のディレクトリ・オブジェクト , 'test001.267.1004247931' -- 現環境のデータファイル名 , 'DBL_ORCL_11GR2' -- 新環境 ⇒ 現環境 の DBLINK名 , 'dp_from_onprem' -- 新環境のPDBのディレクトリ・オブジェクト , 'test001.dbf' -- 新環境のデータファイル名 ); END; / PL/SQL procedure successfully completed. Elapsed: 00:00:17.20
⇒ファイルサイズおよびデータセンター間の距離に応じて時間かかると想定される部分。
移行先:データファイル転送結果確認
[opc@vmse01 ~]$ sudo su - grid [grid@vmse01 ~]$ asmcmd cd ASMCMD> +DATA/VMSE01_PHX12D/841B34CDC98721D5E0530201000A6B72/DATAFILE/ ASMCMD> ls FILE_TRANSFER.282.1004241403 FILE_TRANSFER.283.1004241439 SYSAUX.272.1002946175 SYSTEM.271.1002946175 UNDOTBS1.270.1002946175 USERS.275.1002946509 test001.dbf★
移行先:DBMS_FILE_TRANSFERパッケージによるメタデータファイルの転送
SQL> show con_name CON_NAME ------------------------------ PDB1 -- test001表領域用のメタデータファイルをコピー BEGIN DBMS_FILE_TRANSFER.GET_FILE( 'dp_for_cloud' -- 現環境のディレクトリ・オブジェクト , 'expdat.dmp' -- ダンプファイル名 , 'DBL_ORCL_11GR2' -- 新環境 ⇒ 現環境 の DBLINK名 , 'dp_from_onprem' -- 新環境のPDBのディレクトリ・オブジェクト , 'expdat.dmp' -- ダンプファイル名 ); END; / PL/SQL procedure successfully completed. Elapsed: 00:00:17.20
移行先:メタデータファイルの転送結果確認
[opc@vmse01 ~]$ sudo su - grid [grid@vmse01 ~]$ asmcmd ASMCMD> cd +DATA/VMSE01_PHX12D/841B34CDC98721D5E0530201000A6B72/DATAFILE/ ASMCMD> ls FILE_TRANSFER.282.1004251069 FILE_TRANSFER.283.1004241439 SYSAUX.272.1002946175 SYSTEM.271.1002946175 UNDOTBS1.270.1002946175 USERS.275.1002946509 expdat.dmp★ test001.dbf
移行元:移行対象表領域をREAD WRITEモードに変更
SQL> ALTER TABLESPACE TEST001 READ write; Tablespace altered.
⇒移行作業が全て完了してからでも良いが、移行元環境の開放のためこのタイミングで実行。
移行元で業務再開★
★★★ 業務停止ここまで ★★★
移行元&移行先:walletファイルのマージ(オプション)
DBaaSの表領域はデフォルトで暗号化される仕様となっているので、移行元DBのwalletファイルのキー情報を、移行先DBのwalletファイルにマージする必要がある。
※移行元がオンプレミスで、かつ、表領域暗号化の設定でなければ要らない手順となるはず。
参考)
How to Merge a TDE Wallet From 11gR2 Into a New 12c Database Keystore? (Doc ID 2254960.1)
まずは以下の要領で、移行元にあるwalletファイルセットを、移行先の任意のディレクトリー(マージ実施までの一時的な作業フォルダ)にコピー。
-- walletファイルの配置場所をsqlnet.oraより確認 [oracle@vmee01 ~]$ cd $ORACLE_HOME/network/admin [oracle@vmee01 admin]$ ls samples shrept.lst sqlnet.ora tnsnames.ora [oracle@vmee01 admin]$ cat sqlnet.ora ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME))) SQLNET.ENCRYPTION_SERVER=REQUIRED SQLNET.CRYPTO_CHECKSUM_SERVER=REQUIRED SQLNET.ENCRYPTION_TYPES_SERVER=(AES256,AES192,AES128) SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(SHA1) SQLNET.ENCRYPTION_CLIENT=REQUIRED SQLNET.CRYPTO_CHECKSUM_CLIENT=REQUIRED SQLNET.ENCRYPTION_TYPES_CLIENT=(AES256,AES192,AES128) SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(SHA1) [oracle@vmee01 admin]$ cd /opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME [oracle@vmee01 ora1124_phx1xx]$ ls cwallet.sso ewallet.p12
⇒上記で確認したWalletファイルのセットを、移行先の任意のフォルダへコピーする。
続いて、移行先での作業。
-- 現状確認 SQL> show con_name CON_NAME ------------------------------ PDB1 col KEY_ID for a60 col TAG for a10 col CREATION_TIME for a30 col CREATOR for a10 set line 200 SQL> select key_id, TAG, CREATION_TIME, CREATOR from V$ENCRYPTION_KEYS; KEY_ID TAG CREATION_TIME CREATOR ------------------------------------------------------------ ---------- ------------------------------ ---------- AUH5rdTCNU8Zv2PKjWeXBBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA defaultTag 15-MAR-19 04.13.36.63394800:00 AM + SYS [oracle@vmse01 vmse01_phx12d]$ pwd /opt/oracle/dcs/commonstore/wallets/tde/vmse01_phx12d [oracle@vmse01 vmse01_phx12d]$ ls -lt total 28 -rw------- 1 oracle asmadmin 5880 Mar 15 04:13 cwallet.sso -rw------- 1 oracle asmadmin 5819 Mar 15 04:13 ewallet.p12 -rw------- 1 oracle asmadmin 2555 Mar 15 04:13 ewallet_2019031504133615_defaultTag.p12 -- 念のためバックアップ [oracle@vmse01 vmse01_phx12d]$ cp -p ewallet.p12 ewallet.p12.bak [oracle@vmse01 vmse01_phx12d]$ cp -p cwallet.sso cwallet.sso.bak
以下のコマンドでマージ
SQL> conn / as sysdba Connected. SQL> ADMINISTER KEY MANAGEMENT MERGE KEYSTORE '/tmp' IDENTIFIED BY *******_ INTO EXISTING KEYSTORE '/opt/oracle/dcs/commonstore/wallets/tde/vmse01_phx12d' IDENTIFIED BY ******* WITH BACKUP; keystore altered.★マージ成功 -- ステータス確認 SQL> col KEY_ID for a60 col TAG for a10 col CREATION_TIME for a30 col CREATOR for a10 set line 200 SQL> select key_id, TAG, CREATION_TIME, CREATOR from V$ENCRYPTION_KEYS; KEY_ID TAG CREATION_TIME CREATOR ------------------------------------------------------------ ---------- ------------------------------ ---------- Ac7GAjlZB0/ev5DiwEgetVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA defaultTag 15-MAR-19 04.13.36.43659400:00 AM + SYS★このエントリが追加された AUH5rdTCNU8Zv2PKjWeXBBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA defaultTag 15-MAR-19 04.13.36.63394800:00 AM + SYS SQL> select * from V$ENCRYPTION_WALLET WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_OR KEYSTORE FULLY_BAC CON_ID ---------- ------------------------------------------------------------ ------------------------------ -------------------- --------- -------- --------- ---------- FILE /opt/oracle/dcs/commonstore/wallets/tde/vmse01_phx12d/ OPEN PASSWORD SINGLE NONE NO 1 FILE CLOSED UNKNOWN SINGLE UNITED UNDEFINED 2 FILE CLOSED UNKNOWN SINGLE UNITED UNDEFINED 3 -- PDB用のwalletファイルがCLOSEDステータスのため、手動でオープン SQL> ALTER SESSION SET CONTAINER = pdb1; Session altered. SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY *******; keystore altered.
移行先:自動ログインwalletファイルの再作成(オプション)
上記マージ作業では、自動ログインwalletファイル(cwallet.sso)のタイプスタンプが更新されていなかったため、念のため手動で再作成(この手順が必須かどうかは要確認)
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY *******; SQL> ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/opt/oracle/dcs/commonstore/wallets/tde/vmse01_phx12d/' IDENTIFIED BY *******; 2 3 keystore altered. SQL> !ls cwallet.sso
移行先:移行データ用のスキーマ作成
SQL> alter session set container=pdb1; Session altered. SQL> create user test001 identified by *******; User created. SQL> grant connect,resource to test001; Grant succeeded.
⇒事前にスキーマを作成しておかないと、impdp実行時にエラーとなるので注意。
移行先:Data Pump(impdp)のTTSを実行
インポート先のPDBを指定して、impdpを実行。
[oracle@vmse01 ~]$ impdp IMPUSER/*******@xxxx:1521/xxxxxxx \ > dumpfile=dp_from_onprem:expdat.dmp \ > transport_datafiles=\ > '+DATA/VMSE01_PHX12D/841B34CDC98721D5E0530201000A6B72/DATAFILE/test001.dbf' \ > logfile=DIR_LOGFILE:impdp_tts_20190330.log Import: Release 18.0.0.0.0 - Production on Sat Mar 30 09:44:30 2019 Version 18.3.0.0.0 Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 18c Standard Edition 2 Release 18.0.0.0.0 - Production Master table "IMPUSER"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded Starting "IMPUSER"."SYS_IMPORT_TRANSPORTABLE_01": IMPUSER/********@10.0.1.2:1521/xxxxxxx.oraclevcn.com dumpfile=dp_from_onprem:expdat.dmp transport_datafiles=+DATA/VMSE01_PHX12D/841B34CDC98721D5E0530201000A6B72/DATAFILE/test001.dbf logfile=DIR_LOGFILE:impdp_tts_20190330.log Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK Processing object type TRANSPORTABLE_EXPORT/TABLE Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK Job "IMPUSER"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Sat Mar 30 09:44:36 2019 elapsed 0 00:00:05
⇒成功!
移行先:テストデータ移行結果の確認
[oracle@vmse01 ~]$ sqlplus test001/*******@xxxx:1521/xxxxxxx SQL> col object_name for a30 SQL> select object_name, object_type from user_objects OBJECT_NAME OBJECT_TYPE ------------------------------ ----------------------- TEST TABLE I_TEST INDEX SQL> select count(*) from test; COUNT(*) ---------- 50000
おまけ:注意事項(検証時に遭遇したエラー紹介)
TTSのエクスポート元DBは、Enterprise Editionライセンスが必要
Standard Edition環境でTTSを実行しようとしたら、以下のエラーが発生。
ORA-39123: Data Pump transportable tablespace job aborted ORA-00439: feature not enabled: Export transportable tablespaces
詳しくは、以下の記事を参照。
・[Oracle DB] ORA-00439の発生原因と対処方法
ENCRYPTION_PASSWORDパラメータの利用条件
[oracle@vmee01 ~]$ expdp EXPUSER/******* TRANSPORT_TABLESPACES=test001 \ TRANSPORT_FULL_CHECK=YES \ DIRECTORY=dp_for_cloud \ encryption_password=*******_ \ logfile= DIR_LOGFILE:expdp_tts_20190330.log Export: Release 11.2.0.4.0 - Production on Sat Mar 30 06:20:54 2019 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 Real Application Clusters and Automatic Storage Management options ORA-39005: inconsistent arguments ORA-39032: function ENCRYPTION_PASSWORD is not supported in TRANSPORT_TABLESPACES jobs
⇒Full Transportableの場合にはENCRYPTION_PASSWORにてTDEに対応できるが、通常のTTSでは本パラメータは利用できない。
移行先へのスキーマ事前作成は必須
[oracle@vmse01 ~]$ impdp IMPUSER/*******@xxxxx:1521/xxxxx.oraclevcn.com \ > dumpfile=dp_from_onprem:expdat.dmp \ > transport_datafiles=\ > '+DATA/VMSE01_PHX12D/841B34CDC98721D5E0530201000A6B72/DATAFILE/test001.dbf' \ > logfile=DIR_LOGFILE:impdp_tts_20190330.log Import: Release 18.0.0.0.0 - Production on Sat Mar 30 09:41:58 2019 Version 18.3.0.0.0 Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 18c Standard Edition 2 Release 18.0.0.0.0 - Production Master table "IMPUSER"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded Starting "IMPUSER"."SYS_IMPORT_TRANSPORTABLE_01": IMPUSER/********@xxxxx:1521/xxxxxx.oraclevcn.com dumpfile=dp_from_onprem:expdat.dmp transport_datafiles=+DATA/VMSE01_PHX12D/841B34CDC98721D5E0530201000A6B72/DATAFILE/test001.dbf logfile=DIR_LOGFILE:impdp_tts_20190330.log Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK ORA-39123: Data Pump transportable tablespace job aborted ORA-29342: user TEST001 does not exist in the database Job "IMPUSER"."SYS_IMPORT_TRANSPORTABLE_01" stopped due to fatal error at Sat Mar 30 09:42:03 2019 elapsed 0 00:00:04
⇒TTSの場合も、移行先DBに予めスキーマ作成が必要
TDE環境からの移行時にはWalletファイルを考慮
walletファイルをマージせずにimpdpを実行すると以下のようなエラーが出るらしい(事前対処したため、実際には遭遇してない)。
ORA-39123: Data Pump transportable tablespace job aborted ORA-28374: typed master key not found in wallet
参考情報
・マニュアルData Pump Transportable Tablespace
https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/mig-data-pump-transp-tablespace.htm
・マニュアル「Database Administrator’s Guide」
15.6 データファイルを転送するためのガイドライン
https://docs.oracle.com/cd/E96517_01/admin/transporting-data.html#GUID-4F6AE634-053F-4CA9-AB53-7DA8B0047699
・マニュアル「Database Administrator’s Guide」
15.3.2 トランスポータブル表領域に関する制限事項
https://docs.oracle.com/cd/E96517_01/admin/transporting-data.html#GUID-DAB51E42-9BBC-4001-B5CB-0ECDBE128787
・マニュアル「PL/SQL Packages and Types Reference」
DBMS_FILE_TRANSFER
https://docs.oracle.com/cd/E96517_01/arpls/DBMS_FILE_TRANSFER.html#GUID-9E206058-78CB-4028-8883-7C28B845F86C
DBMS_FILE_TRANSFERパッケージは、データベース内のバイナリ・ファイルをコピーし、データベース間でバイナリ・ファイルを転送するプロシージャを提供します。
(中略)
エンディアンの異なるプラットフォームからファイルを受け取ると、宛先データベースにより各ブロックが変換されます。データファイルは、トランスポータブル操作(RMAN変換なし)の一環として接続先データベースに移動された後でインポートできます。GETおよびPUT操作は両方とも、プラットフォーム間の相違を反映するように宛先のファイル内で変換されます。一方、COPYはローカル操作であるため、変換は不要です。
(中略)
DBMS_FILE_TRANSFERでは、オンライン・バックアップがサポートされています。データベースで変更中のファイルをコピーまたは転送する場合は、ファイルの一貫性が失われリカバリが必要になる可能性があるため、注意する必要があります。一貫性を保証するには、データベースの使用中はファイルをオフラインにしてください。
——————————
⇒DBリンク越しにデータファイルを直接コピーできるため、中間ファイル(ダンプファイル)の出力場所を別途確保する必要がなく、エンディアン変換も自動的に行うので便利。
DBリンク越しの転送時間がネックとなる場合は、一旦ファイルシステム上に出力して圧縮やパラレル転送を検討するのが良いかも。
Leave a Reply