Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@ghogho-seki

【RDS for Oracle】DataPump(エクスポート)をやってみた

事前準備

テストユーザ/データ作成

まずはテストデータ(SCOTT)を作成する。
テストデータなので unlimited tablespaxe と DBAロールでも付与しといた。

SQL> sho user
USER is "TEST" ★マスターユーザ
SQL>
SQL> create user scott identified by tiger;
SQL> grant unlimited tablespace to scott;
SQL> grant dba to scott;

SCOTTでログイン

SQL> conn scott/tiger@orcl1
Connected.
SQL>
SQL> sho user
USER is "SCOTT"

テストデータとして、100万行のデータ作成

SQL> CREATE TABLE tbl1
(
    id  number(8),
    txt varchar2(250)
);

SQL> set timing on
SQL> declare
       vID     char(8);
       vText   varchar2(250);
     begin
       dbms_random.seed(uid); 
       for i in 1..1000000
       loop
             vID := to_char(i, 'FM00000000');
             vText := dbms_random.string('x', 16);
             insert into tbl1 (id, txt) values (vID, vText);
             if (mod(i, 1000) = 0) then
                     commit;
             end if;
       end loop;
       commit;
     end;
     /

SQL> select count(*) from tbl1;

  COUNT(*)
----------
   1000000

ディレクトリオブジェクトの確認

ディレクトリオブジェクトを確認。今回は検証なので、DATA_PUMP_DIR を使用する。

SQL> set pages 100 line 200
SQL> col owner for a10
SQL> col directory_name for a20
SQL> col directory_path for a30
SQL> select * from dba_directories;

OWNER      DIRECTORY_NAME   DIRECTORY_PATH             ORIGIN_CON_ID
---------- -------------------- ------------------------------ -------------
SYS    BDUMP        /rdsdbdata/log/trace               0
SYS    ADUMP        /rdsdbdata/log/audit               0
SYS    OPATCH_LOG_DIR   /rdsdbbin/oracle/QOpatch           0
SYS    OPATCH_SCRIPT_DIR    /rdsdbbin/oracle/QOpatch           0
SYS    OPATCH_INST_DIR  /rdsdbbin/oracle/OPatch            0
SYS    DATA_PUMP_DIR    /rdsdbdata/datapump            0

エクスポート

expdpコマンドは使えないのでDBMS_DATAPUMPパッケージを使用しエクスポートを行う。

SQL> conn TEST/Passw0rd@orcl1
Connected.
SQL>
SQL> sho user
USER is "TEST"

スキーマ単位(SCOTTユーザ)でエクスポート

SQL> DECLARE
        hdnl NUMBER;
     BEGIN
        hdnl := DBMS_DATAPUMP.open( operation => 'EXPORT', job_mode => 'SCHEMA', job_name => null, version => 'COMPATIBLE');
        DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'scott.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
        DBMS_DATAPUMP.add_file( handle => hdnl, filename => 'exp_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;
    /
  • DBMS_DATAPUMP.OPEN

    • データ・ポンプAPIを使用して新規ジョブを設定するために使用
    • operation:実行する操作のタイプ
      • EXPORT:データおよびメタデータをダンプ・ファイル・セットに保存します。または操作に必要なデータの見積りサイズを取得
      • IMPORT:データおよびメタデータをダンプ・ファイル・セットあるいはデータベース・リンクからリストア
      • SQL_FILE:ダンプ・ファイル・セット内あるいはネットワーク・リンクからのメタデータをSQLスクリプトとして表示。SQLスクリプトの場所は、ADD_FILEプロシージャで指定
    • job_mode:実行する操作の有効範囲
      • FULL:Oracle Databaseの内部スキーマを除く、全データベースまたは全ダンプ・ファイル・セットで動作
      • SCHEMA:選択された一連のスキーマで動作
      • TABLE:選択された一連の表で動作
      • TABLESPACE:選択された一連の表領域で動作
      • TRANSPORTABLE:選択された一連の表領域内の表(およびその表が依存するオブジェクト)に関するメタデータで動作し、トランスポータブル表領域のエクスポートおよびインポートを実行
    • version:抽出されるデータベース・オブジェクトのバージョン
      • COMPATIBLE:(デフォルト)データベース互換性レベルおよび機能の互換性リリース・レベルに対応するメタデータのバージョン
      • LATEST:データベース・バージョンに対応するメタデータのバージョン
      • 11.0.0'など特定のデータベース・バージョン
  • DBMS_DATAPUMP.ADD_FILE

    • エクスポート、インポートまたはSQL_FILEの各操作に使用されるダンプ・ファイル・セットにファイルを追加します。あるいは、SQL_FILE操作に使用されるログ・ファイルまたは出力ファイルを指定
    • handle:ジョブのハンドル。 現行のセッションは、OPENファンクションまたはATTACHファンクションへのコールを使用して、あらかじめこのハンドルに連結しておく必要があります。
    • filename:追加されるファイルの名前
    • directory:filenameを探すために使用するデータベース内のディレクトリ・オブジェクトの名前
    • filetype:追加されるファイルのタイプ。有効な値は次のとおりで、DBMS_DATAPUMP.を前に付ける必要があります
      • KU$_FILE_TYPE_DUMP_FILE(ジョブのダンプ・ファイル)
      • KU$_FILE_TYPE_LOG_FILE(ジョブのログ・ファイル)
      • KU$_FILE_TYPE_SQL_FILE(SQL_FILEジョブの出力)
  • DBMS_DATAPUMP.METADATA_FILTER

    • ジョブに含まれる項目を制限するためのフィルタを提供
    • handle:OPENファンクションから戻されたハンドル
    • name:フィルタ名
    • SCHEMA_LIST:スキーマ・モードでは、処理対象のユーザーを指定
  • DBMS_DATAPUMP.START_JOB

    • ジョブの実行を開始または再開
    • handle:ジョブのハンドル。現行のセッションは、OPENファンクションまたはATTACHファンクションへのコールを使用して、あらかじめこのハンドルに連結しておく必要があります
  • DBMS_DATAPUMP.WAIT_FOR_JOB

    • 正常に完了するか、またはなんらかの理由で停止するまでジョブを実行
    • handle:ジョブのハンドル。現行のセッションは、OPENファンクションまたはATTACHファンクションへのコールを使用して、あらかじめこのハンドルに連結しておく必要があります。このプロシージャが終了すると、ユーザーはハンドルから連結を解除されます。
    • job_state:実行を停止したときのジョブの状態(STOPPEDまたは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
-------------------- ---------- ---------- ---------
expdb_tables.dmp     file           4096    28-JUN-19
expdb_tables.log     file           89      28-JUN-19
exp_scott.log        file           88      28-JUN-19 ★出力されたログ
datapump/            directory      4096    28-JUN-19
scott.dmp            file           24576   28-JUN-19 ★出力されたダンプ

出力されたログを確認

SQL> col text for a100
SQL> SELECT TEXT FROM TABLE(RDSADMIN.RDS_FILE_UTIL.READ_TEXT_FILE('DATA_PUMP_DIR','exp_scott.log'));

TEXT
----------------------------------------------------------------------------------------------------
Starting "TEST"."SYS_EXPORT_SCHEMA_04":
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 30 MB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_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/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
. . exported "SCOTT"."TBL1"              24.78 MB 1000000 rows
Master table "TEST"."SYS_EXPORT_SCHEMA_04" successfully loaded/unloaded
******************************************************************************
Dump file set for TEST.SYS_EXPORT_SCHEMA_04 is:
  /rdsdbdata/datapump/scott.dmp
Job "TEST"."SYS_EXPORT_SCHEMA_04" successfully completed at Fri Jun 28 03:56:29 2019 elapsed 0 00:
03:35


18 rows selected.

インポートはこちら

参考

RDS for Oracle環境でData Pumpを利用する
RDS for Oracle の DataPump

8
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
8
Help us understand the problem. What is going on with this article?