impdpの応用

impdbユーティリティの主なパラメータ

impdpの仕様(ヘルプ)
expdpの応用 一部のパラメータは共通である。
REMAP_SCHEMA=source_schema:target_schema
ソース・スキーマにあるすべてのオブジェクトをターゲット・スキーマにロードする。
REMAP_TABLESPACE=source_tablespace:target_tablespace
ターゲット表領域に作成するソース表領域内の永続データを使用して、インポート用に選択されたすべてのオブジェクトを再マップする。
REUSE_DATAFILES={y | n}
インポート・ジョブで、表領域の作成に既存のデータ・ファイルを再利用するかどうかを指定する。
SKIP_UNUSABLE_INDEXES={y | n}
Importで、(システムまたはユーザーのいずれかによって)索引使用禁止に設定されている索引を持つ表をロードするかどうかを指定する。
SQLFILE=[directory_object:]file_name
Importが他のパラメータに基づいて実行するすべてのSQL DDLの書込み先のファイルを指定する。
TRANSFORM = transform_name:value[:object_type]
ロード中のすべての適用可能なオブジェクトおよび特定のオブジェクト用のオブジェクト作成DDLを変更出来る。
TABLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | REPLACE}
Importユーティリティに対して、作成しようとしている表がすでに存在する場合に行う操作を指定する。

impdpユーティリティの応用

特定スキーマのインポート
  • OMRデータベースでPRODデータベーススキーマTOMが持っているオブジェクトをJACKにインポートする。
  • JACKスキーマに同じ名前を持っている表が存在すれば、その表を置き換える。

PRODでTOMスキーマをエクスポート

expdp system/oracle@prod SCHEMAS=TOM DIRECTORY=DATAPUMP_DIR DUMPFILE=exp_prod_tom.dmp LOGFILE=exp_prod_tom.log

OMRのJACKにインポート
[datapump_dir oracle(OMR)] impdp system/oracle@omr REMAP_SCHEMA=tom:jack REMAP_TABLESPACE=EXAMPLE:USERS 
                DIRECTORY=DATAPUMP_DIR DUMPFILE=exp_prod_tom.dmp LOGFILE=exp_prod_tom.log 
                TABLE_EXISTS_ACTION=REPLACE exclude=TABLESPACE_QUOTA,USER

Import: Release 10.2.0.4.0 - 64bit Production on Tuesday, 09 June, 2009 15:21:10

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/********@omr REMAP_SCHEMA=tom:jack REMAP_TABLESPACE=EXAMPLE:USERS 
      DIRECTORY=DATAPUMP_DIR DUMPFILE=exp_prod_tom.dmp LOGFILE=exp_prod_tom.log TABLE_EXISTS_ACTION=REPLACE 
    exclude=TABLESPACE_QUOTA,USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "JACK"."GEN_TEST_DATA"                      11.41 MB  200000 rows
. . imported "JACK"."TAB_HASH_PART":"TAB_HASH_P2"        2.866 MB   50124 rows
. . imported "JACK"."TAB_HASH_PART":"TAB_HASH_P3"        2.867 MB   50122 rows
. . imported "JACK"."TAB_HASH_PART":"TAB_HASH_P4"        2.844 MB   49734 rows
. . imported "JACK"."TAB_HASH_PART":"TAB_HASH_P1"        1.442 MB   25166 rows
. . imported "JACK"."TAB_HASH_PART":"TAB_HASH_P5"        1.424 MB   24854 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_FULL_01" successfully completed at 15:21:21

[datapump_dir oracle(OMR)]

TABLE_EXISTS_ACTION
  • SKIP:表はそのままにして、次のオブジェクトに移動する。
  • APPEND:ソースから行をロードし、既存の行は変更しない。
  • TRUNCATE:既存の行を削除した後、ソースから行をロードする。
  • REPLACE:既存の表を削除した後、ソースから表を作成およびロードする。

REMAP_TABLESPACE
OMRにはEXAMPLE表領域が無いので、PRODのEXAMPLE表領域にあるオブジェクトをUSERSに再マップする。

データベースリンクを介して特定のテーブルをインポート
  • OMRでDBリンクを介してPRODのTOM.GEN_TEST_DATA表をインポート
  • OMRにはGEN_TEST_DATAが既に存在した場合、データを追加する。

OMRでTOMユーザーに接続するDB LINKを作成

SQL> CREATE PUBLIC DATABASE LINK TOM.PROD CONNECT TO TOM IDENTIFIED BY TOM USING 'PROD';

Database link created.

SQL> select count(*) from gen_test_data@tom.prod;

  COUNT(*)
----------
    200000

SQL>

PRODでTOMにEXP_FULL_DATABASEロールを付与する
リモートPRODデータベースのTOMユーザーが特権ユーザーではないので、エクスポートするためにEXP_FULL_DATABASEを付与する必要がある。
該当権限が無ければ「ORA-39149: cannot link privileged user to non-privileged user」エラーが出てくる。
SQL> GRANT EXP_FULL_DATABASE TO TOM;

Grant succeeded.

SQL>

OMRでNETWORK_LINKを介して表をインポートする
[datapump_dir oracle(OMR)] impdp system/oracle@omr REMAP_SCHEMA=tom:jack TABLES=TOM.GEN_TEST_DATA DIRECTORY=DATAPUMP_DIR 
            TABLE_EXISTS_ACTION=APPEND NETWORK_LINK=TOM.PROD

Import: Release 10.2.0.4.0 - 64bit Production on Tuesday, 09 June, 2009 15:44:34

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_IMPORT_TABLE_01":  system/********@omr REMAP_SCHEMA=tom:jack TABLES=TOM.GEN_TEST_DATA 
    DIRECTORY=DATAPUMP_DIR TABLE_EXISTS_ACTION=APPEND NETWORK_LINK=TOM.PROD
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 13 MB
Processing object type TABLE_EXPORT/TABLE/TABLE
ORA-39152: Table "JACK"."GEN_TEST_DATA" exists.     ← GEN_TEST_DATAが既に存在したので、テーブルを作成しようとしたらエラーになる。
Data will be appended to existing table but all dependent metadata will be skipped due to table_exists_action of append
. . imported "JACK"."GEN_TEST_DATA"                      200000 rows
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_TABLE_01" completed with 1 error(s) at 15:44:41

[datapump_dir oracle(OMR)]
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License