OracleのData Pump Export(expdp
)は、データベースのバックアップや移行に使われる便利なツールですが、特定の条件に合致するデータだけをエクスポートしたいというケースも多くあります。例えば、「ある部署の従業員だけ」「更新日時が指定期間内のデータだけ」などを抽出してエクスポートしたい場合、WHERE句(queryパラメータ)を使うことで実現できます。
WHERE句を使ったエクスポートの基本構文
expdp
では query
パラメータを使用することで、SQLの WHERE 句を指定して、対象レコードを絞り込んでエクスポートできます。
expdp ユーザー名/パスワード directory=ディレクトリ名 dumpfile=ファイル名.dmp logfile=ログファイル名.log tables=テーブル名 query="WHERE 条件式"
使用例:部署番号が10の従業員だけをエクスポート
expdp scott/tiger directory=DATA_PUMP_DIR dumpfile=emp_dept10.dmp logfile=emp_dept10.log tables=emp query="WHERE deptno = 10"
このコマンドは、EMP
テーブルからDEPTNO = 10
に該当するレコードだけを抽出してエクスポートします。
使用例:日付で絞り込み(特定期間内のデータ)
expdp scott/tiger directory=DATA_PUMP_DIR dumpfile=emp_recent.dmp logfile=emp_recent.log tables=emp query="WHERE hiredate >= TO_DATE('2023-01-01','YYYY-MM-DD')"
TO_DATE
関数を使うことで、日付を条件にしてデータを絞ることができます。
複数条件を組み合わせる
expdp scott/tiger directory=DATA_PUMP_DIR dumpfile=emp_10_mgr.dmp logfile=emp_10_mgr.log tables=emp query="WHERE deptno = 10 AND job = 'MANAGER'"
複数の条件もAND
やOR
を使って組み合わせ可能です。
文字列はシングルクォートで囲む
文字列条件を記述する際は、SQLのルール通り、シングルクォート('
)で囲む必要があります。また、UNIXシェルなどでクォートが干渉することがあるため、全体をダブルクォートで囲み、中の文字列をシングルクォートで囲むことがポイントです。
注意点とトラブル対策
- 条件式は対象のテーブル1つに対してのみ使用可能
- テーブル名の前にスキーマ名を付けないと失敗する場合がある
- 特殊文字(&、<、>など)を含む場合はエスケープまたは文字コードに注意
まとめ
Data Pumpのexpdp
にquery
パラメータを組み合わせることで、必要なデータだけを効率よくバックアップ・抽出することができます。開発環境へのデータ移行や一時的な検証用データの抽出にも非常に便利です。
条件指定を上手に活用し、必要なデータだけを安全かつスピーディにエクスポートしましょう。