*エクスポートはこちら
#ダンプファイルの転送
前回、ORCL1でエクスポートしたダンプをORCL2に転送します。
##データベース・リンクの作成
ORCL1でデータベース・リンクを作成
SQL> sho user
USER is "TEST"
SQL>
SQL> select * from user_db_links;
no rows selected
SQL>
SQL> create database link dblink_orcl connect to test identified by Passw0rd using '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = orcl2.cueblzomfczc.xxxxxx.rds.amazonaws.com)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl2)))';
Database link created.
SQL>
SQL> set pages 100 line 200
SQL> col db_link for a15
SQL> col username for a10
SQL> col password for a10
SQL> col host for a10
SQL> select * from user_db_links;
DB_LINK USERNAME PASSWORD HOST CREATED
--------------- ---------- ---------- ---------- ---------
DBLINK_ORCL TEST ORCL2 01-JUL-19
※メモ DBLINKの削除は "drop database link dblink_orcl;"
##ダンプファイルの転送
ORCL1からORCL2へダンプファイルを転送
SQL> BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'DATA_PUMP_DIR',
source_file_name => 'scott.dmp',
destination_directory_object => 'DATA_PUMP_DIR',
destination_file_name => 'scott_copy.dmp',
destination_database => 'dblink_orcl'
);
END;
/
PL/SQL procedure successfully completed.
-
DBMS_FILE_TRANSFER.PUT_FILEプロシージャ
-
ローカル・ファイルまたはASMを読み取り、リモート・データベースに接続して、リモート・ファイル・システムにそのファイルのコピーを作成。
-
source_directory_object
- ローカル・ソース・サイトにある、ファイルのコピー元のディレクトリ・オブジェクト。このディレクトリ・オブジェクトはソース・サイトに存在している必要があります。
-
source_file_name
- ローカル・ファイル・システムからコピーされるファイルの名前。このファイルは、ローカル・ファイル・システムのソース・ディレクトリ・オブジェクトに関連付けられたディレクトリに存在している必要があります。
-
destination_directory_object
- 宛先サイトにある、ファイルのコピー先となるディレクトリ・オブジェクト。このディレクトリ・オブジェクトはリモート・ファイル・システムに存在している必要があります。
-
destination_file_name
- リモート・ファイル・システムにおいてコピーされるファイルの名前。同じ名前のファイルがリモート・ファイル・システムの宛先ディレクトリに存在しないようにしてください。
-
destination_database
- ファイルのコピー先となるリモート・データベースへのデータベース・リンクの名前
-
##ダンプファイルの確認
ORCL2で転送されたダンプファイルを確認。
SQL> col filename for a20
SQL> SELECT * FROM TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER BY MTIME;
FILENAME TYPE FILESIZE MTIME
-------------------- ---------- ---------- ---------
scott_copy.dmp file 26267648 02-JUL-19 ★転送された
datapump/ directory 4096 02-JUL-19
##DBMS_DATAPUMPでインポート
ORCL2側でテストデータ(SCOTT)を作成
SQL> create user scott identified by tiger;
User created.
SQL> grant unlimited tablespace to scott;
Grant succeeded.
SQL> grant dba to scott;
Grant succeeded.
SQL> conn scott/tiger@orcl2
Connected.
SQL>
SQL> sho user
USER is "SCOTT"
SQL> conn TEST/Passw0rd@orcl2
Connected.
SQL>
SQL> sho user
USER is "TEST"
ORCL2側でインポートを実施
SQL> DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.open( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null, version => 'COMPATIBLE');
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'scott_copy.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.add_file( handle => hdnl, filename => 'imp_scott.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''SCOTT'')');
DBMS_DATAPUMP.start_job(hdnl);
END;
/
PL/SQL procedure successfully completed.
インポートのログを確認
SQL> set pages 100 line 200
SQL> col filename for a20
SQL> select * from TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER BY MTIME;
FILENAME TYPE FILESIZE MTIME
-------------------- ---------- ---------- ---------
scott_copy.dmp file 26267648 02-JUL-19
datapump/ directory 4096 02-JUL-19
imp_scott.log file 1096 02-JUL-19 ★ログが生成されてる
SQL> SELECT TEXT FROM TABLE(RDSADMIN.RDS_FILE_UTIL.READ_TEXT_FILE('DATA_PUMP_DIR','imp_scott.log'));
TEXT
--------------------------------------------------------------------------------
Master table "TEST"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
Starting "TEST"."SYS_IMPORT_SCHEMA_01":
テストデータを確認
SQL> conn scott/tiger@orcl2
Connected.
SQL>
SQL> sho user
USER is "SCOTT"
SQL>
SQL> select count(*) from user_objects;
COUNT(*)
----------
1 ★SCOTTユーザのオブジェクトは1つ
SQL>
SQL> select OBJECT_NAME from user_objects;
OBJECT_NAME
--------------------------------------------------------------------------------
TBL1 ★TBL1テーブルが移行されてる
SQL>
SQL> select count(*) from tbl1;
COUNT(*)
----------
1000000 ★100万行のデータ
移行が完了したらダンプとインポート時のログは不要になるので削除
SQL> exec UTL_FILE.FREMOVE('DATA_PUMP_DIR','imp_scott.log');
PL/SQL procedure successfully completed.
SQL> exec UTL_FILE.FREMOVE('DATA_PUMP_DIR','scott_copy.dmp');
PL/SQL procedure successfully completed.
SQL>
SQL> select * from TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER BY MTIME;
FILENAME TYPE FILESIZE MTIME
-------------------- ---------- ---------- ---------
datapump/ directory 4096 02-JUL-19