以前、SQL*Loaderで大量にデータをインポートしたので
バックアップを取得しておきたく、更に別の環境に一部のマスタデータのみを復元したく
それをインポートもしたので、コマンドと調査した内容を公開します。
エクスポート:コマンド
◆最終的に使ったコマンドプロンプトでの実行コマンド
expdp db_id/db_pass@//XXX.XX.XXX.XXX:1520/PDB directory=USER_DMP dumpfile=TARGETyyyymmdd.dmp logfile=EX_TARGETyyyymmdd.log schemas=db_id
エクスポート:今回調べた点
◆ディレクトリオブジェクトの確認
Oracleではディレクトリを指定するために名前を付けて登録しなければならないとのこと。
まず登録されている内容を確認してみる
⇒全ディレクトリ一覧(DB全体)
SELECT * FROM DBA_DIRECTORIES;
◆ディレクトリオブジェクトの作成
個別に作成した方が良さそうだったため作成しました。
CREATE OR REPLACE DIRECTORY USER_DMP AS 'C:\target_dmp';
◆ディレクトリオブジェクトの権限付与
GRANT READ ON DIRECTORY USER_DMP TO db_id;
GRANT WRITE ON DIRECTORY USER_DMP TO db_id;
◆expdp コマンドが使える環境か確認
expdp help=y
インポート:コマンド
◆最終的に使ったコマンドプロンプトでの実行コマンド
エクスポートしたダンプデータから「別のスキーマに対して」
「一部のテーブル」の「データのみ」をインポートしています。
impdp super_id/super_pass@//XXX.XX.XXX.XXX:1520/PDB directory=USER_DMP dumpfile=TARGETyyyymmdd.dmp logfile=IM_TARGETyyyymmdd.log REMAP_SCHEMA=db_id:db_id2 CONTENT=DATA_ONLY TABLES="DB_ID"."XX表","DB_ID"."XX情報","DB_ID"."所属マスタ","DB_ID"."XX管理表"
※異なるスキーマへのインポートのため、指定するユーザの権限に注意。
インポート:今回調べた点
◆インポートのオプション:REMAP_SCHEMA
REMAP_SCHEMA=test:newuser
は、test⇒newuser
◆インポートのオプション:TABLE_EXISTS_ACTION
・SKIP(デフォルト):無視(何もしない)
・APPEND:データ追加
・TRUNCATE:中身だけ削除して入れる
・REPLACE:テーブルごと作り直す
◆インポートのオプション:CONTENT
・ALL:全部(デフォルト)
・DATA_ONLY:データだけ
・METADATA_ONLY:定義だけ
◆ 元々schemas=の指定を入れていたが、削除
UDI-00010: 複数のジョブ・モードがリクエストされました(schemaおよびtables)
というエラーが発生したため削除した。
Data Pumpは1回の実行で1つのモードしか使えないとのこと。
⇒SCHEMASスキーマ単位
⇒TABLESテーブル単位
⇒FULL全体
まとめ
SQL*Loaderでインポートしたデータを触ってしまわないうちに
と思っていましたが、やり方が分からなかったため結構後回しにしてしまっていました。
ディレクトリオブジェクトなど、通常データを扱うだけでは知らないものがまだまだあるなと感じました。