RDS for Oracle 同士の DataPump
エクスポートしたら DBLink を張って、Dump を送り込み、インポートするだけの作業です。
この記事は、訳あって 12c -> 11g への移行した際のメモになります。
手順
エクスポート
RDS for Oracle の DATA_PUMP_DIR
は変更出来ない。
SELECT directory_name, directory_path FROM dba_directories WHERE directory_name='DATA_PUMP_DIR';
DIRECTORY_NAME
--------------------------------------------------------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------------------
DATA_PUMP_DIR
/rdsdbdata/datapump
DBMS_DATAPUMP でエクスポートを実行する。
ダウングレードしないのであれば、version の指定はいらない。
DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.open( operation => 'EXPORT', job_mode => 'SCHEMA', job_name => null, version => '11.2.0');
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => '<<hoge.dmp>>', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.add_file( handle => hdnl, filename => '<<exp_hoge.log>>', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''<<SCHEMA_NAME>>'')');
DBMS_DATAPUMP.start_job(hdnl);
END;
/
出力したファイルを確認する。
SELECT * FROM TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER BY MTIME;
ログを確認する。
SELECT TEXT FROM TABLE(RDSADMIN.RDS_FILE_UTIL.READ_TEXT_FILE('DATA_PUMP_DIR','<<exp_hoge.log>>'));
転送
まずは DBLink を作成する。
CREATE DATABASE LINK <<DB_LINK_NAME>> CONNECT TO <<USER_NAME>> IDENTIFIED BY <<USER_PASSWORD>> USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<<host>>)(PORT=<<port>>))(CONNECT_DATA=(SID=<<identifier>>)))';
そしてダンプファイルを送りこむ。
BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'DATA_PUMP_DIR',
source_file_name => '<<hoge.dmp>>',
destination_directory_object => 'DATA_PUMP_DIR',
destination_file_name => '<<from_hoge.dmp>>',
destination_database => '<<DB_LINK_NAME>>'
);
END;
/
インポート
ファイルが転送されている事を確認する。
SELECT * FROM TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER BY MTIME;
確認出来たら、DBMS_DATAPUMP を使い、インポートを実行する。
DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.open( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null);
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => '<<from_hoge.dmp>>', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.add_file( handle => hdnl, filename => '<<imp_hoge.log>>', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''<<SCHEMA_NAME>>'')');
DBMS_DATAPUMP.start_job(hdnl);
END;
/
ログを確認する。
SELECT TEXT FROM TABLE(RDSADMIN.RDS_FILE_UTIL.READ_TEXT_FILE('DATA_PUMP_DIR','<<imp_hoge.log>>'));
不要になったファイルは消しましょう。
BEGIN
utl_file.fremove('DATA_PUMP_DIR', '<<hoge.dmp>>');
utl_file.fremove('DATA_PUMP_DIR', '<<exp_hoge.log>>');
END;
/
DBLink も不要なら消しましょう。
DROP DATABASE LINK <<DB_LINK_NAME>>;
以上です。
仲間募集中
弊社ではエンジニアを募集中です。インフラからアプリ、ユーザサポートまで幅広く業務を行ってます。
https://www.nittsu-infosys.com/recruit/2019/index.html