#事前準備
##テストユーザ/データ作成
まずはテストデータ(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