【Oracle】expdpでWHERE句を使って一部データだけをエクスポートする方法

【Oracle】expdpでWHERE句を使って一部データだけをエクスポートする方法 Oracle

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'"

複数の条件もANDORを使って組み合わせ可能です。

文字列はシングルクォートで囲む

文字列条件を記述する際は、SQLのルール通り、シングルクォート(')で囲む必要があります。また、UNIXシェルなどでクォートが干渉することがあるため、全体をダブルクォートで囲み、中の文字列をシングルクォートで囲むことがポイントです。

注意点とトラブル対策

  • 条件式は対象のテーブル1つに対してのみ使用可能
  • テーブル名の前にスキーマ名を付けないと失敗する場合がある
  • 特殊文字(&、<、>など)を含む場合はエスケープまたは文字コードに注意

まとめ

Data Pumpのexpdpqueryパラメータを組み合わせることで、必要なデータだけを効率よくバックアップ・抽出することができます。開発環境へのデータ移行や一時的な検証用データの抽出にも非常に便利です。

条件指定を上手に活用し、必要なデータだけを安全かつスピーディにエクスポートしましょう。