OracleのDataPumpインポート/エクスポートは、
大量データを保存/再設定する時に非常に便利です。
パラメータの指定もさほど難しくなく、パラメータファイルとして残しておけば使いまわししやすいのも助かりますね。
そんなDataPumpですが、エクスポート時はオプションで細かい条件指定が可能です。
WHERE句で指定してできるため、レコード単位で条件が指定できます。
この場合の構文について、検索で調べてもなかなか出てこないことが多く、自分自身も困ることが多いため備忘として残しておきます。
1.QUERYパラメータ
expdpのパラメータにQUERY句を追加することで条件を指定することができます。
QUERY=スキーマ名.テーブル名:“WHERE句で条件を指定”
サンプル
QUERY=scott.emp1:"WHERE CREATE_DATE >= TO_DATE('20180930','YYYY/MM/DD')"
また、テーブル名を指定していることからも分かる通り、テーブルごとに違う条件を指定することが可能です。
QUERY=scott.emp1:"WHERE CREATE_DATE >= TO_DATE('20180930','YYYY/MM/DD')" ,scott.emp2:"WHERE UPDATE_DATE >= TO_DATE('20180930','YYYY/MM/DD')"
emp1テーブルは作成日で抽出、emp2テーブルは更新日で抽出ということも可能です。
2.注意点
DataPumpのエクスポートはその速さが最大の魅力ですが、QUERYで条件を指定すると抽出には想定より時間がかかります。
メンテナンス等の時間の限られた場面でいきなり使うことは避けましょう。
あらかじめどの程度時間がかかるのか計測する。
または、ディスクの空き容量に余裕があるのであれば、エクスポートは条件指定なしで行い、インポート時に条件を指定することも検討すべきです。
(追記:DataPumpのエクスポートはそれほど負荷は高くないので、システムごとにきちんとルール決めすれば商用稼働中に実行することも可能かとは思います。)