LoginSignup
1
1

More than 3 years have passed since last update.

【RDS for Oracle】DataPump(インポート)をやってみた

Last updated at Posted at 2019-07-02

*エクスポートはこちら

ダンプファイルの転送

前回、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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1