Oracle Databaseでデータの取り込みや外部ファイル参照を行う方法として、以下の3つの代表的な機能があります。
- 外部表(External Table)
- SQL*Loader
- Data Pump(
impdp/expdp)
それぞれ役割や特徴が異なるため、用途に応じた使い分けが重要です。
本記事では、違いや使い分け方を丁寧に解説します。
🔸 それぞれの概要
| 機能名 | 概要 |
|---|---|
| 外部表 | 外部ファイル(CSV等)を読み取り専用でSQL参照できる仮想テーブル |
| SQL*Loader | CSV等のファイルをOracleの表にロードするためのツール |
| Data Pump | Oracle独自のバイナリ形式でエクスポート/インポートを行う高速ツール |
🔸 比較表:外部表 vs SQL*Loader vs Data Pump
| 比較項目 | 外部表(External Table) | SQL*Loader | Data Pump(expdp/impdp) |
|---|---|---|---|
| 対象ファイル形式 | CSV、固定長など(テキスト) | CSV、固定長、TSVなど | Oracle独自のDMPファイル形式 |
| 処理の目的 | SQLで参照(読み取り専用) | Oracle表へのデータ取り込み | DBオブジェクトの論理的な移送 |
| 書き込み可否 | ❌ 読み取り専用 | ✅ INSERT可能 | ✅ テーブル/スキーマ単位で取り込み |
| ログ・エラー出力 | 自動生成(*.log, *.badなど) | 自動生成(*.log, *.badなど) | 自動生成(ログあり) |
| トランザクション対応 | ❌ 非対応(SQL*Loaderベース) | ❌ 非対応 | ✅ COMMIT単位で管理可能 |
| 並列処理・パフォーマンス | △ 遅い(都度ファイル読み込み) | ○ 多量データでもまずまず | ◎ 並列処理・圧縮・高速対応 |
| 主な用途 | 内容確認・集計・突合せなど | データベースへの初期ロードなど | バックアップや本番環境移送 |
| ライセンス | EE/SE2共通(基本機能) | EE/SE2共通(基本機能) | EE/SE2共通(基本機能) |
🔸 外部表(External Table)の特徴と向いている場面
✅ 特徴
- CSVなどを直接SQLで読み取れる
- 表ではなく、ファイルを参照する仮想的な構造
- Oracleサーバー上のファイルにアクセスする
- 書き込み不可、読み取り専用
✅ 向いている場面
- 業務委託先から受け取ったCSVをSQLで検証したい
- 簡易的にCSVをJOINしたい
- ロードせず、集計・突合せしたい
🔸 SQL*Loaderの特徴と向いている場面
✅ 特徴
- CSVや固定長ファイルをOracle表に取り込む専用ツール
- コントロールファイルで項目定義が必要
- 複雑なマッピングやフィールド制御も可能
✅ 向いている場面
- 定型的にCSVをOracleに定期ロードする処理
- ファイル単位で大量の初期データを登録したい
- 項目整形や無視・変換ルールを柔軟に設定したい
🔸 Data Pumpの特徴と向いている場面
✅ 特徴
- Oracle独自のバイナリ形式(.dmp)で高速にデータ移送
- 論理バックアップ・リストアに利用される
- 並列処理、圧縮、リモート接続などに対応
✅ 向いている場面
- テーブル単位・スキーマ単位で本番→開発環境へデータ移送
- データベースの論理バックアップ
- 特定条件のWHERE句エクスポート/インポート
🔸 実務における使い分けの目安
| 利用目的 | 推奨機能 |
|---|---|
| 一時的にCSVを参照したい | 外部表 |
| 大量のCSVをテーブルにロードしたい | SQL*Loader |
| テーブルやスキーマを丸ごと移行したい | Data Pump |
| バッチ出力されたCSVと突合せしたい | 外部表 |
| 既存テーブルへの差分取り込み | SQL*Loader |
| Oracle間で環境間移送(高速) | Data Pump |
🔸 各機能のコマンド例(概要)
外部表(ext_user接続)
SELECT * FROM ext_emp;
SQL*Loader(コマンドライン)
sqlldr userid=hr/password control=emp.ctl log=emp.log
Data Pump(インポート)
impdp hr/password DIRECTORY=dp_dir DUMPFILE=emp.dmp LOGFILE=imp.log
🔸 まとめ
| ポイント | 内容 |
|---|---|
| 外部表はSQLで直接参照したいときに便利 | 書き込み不可だが軽量で柔軟 |
| SQL*LoaderはCSVからのロード処理に特化 | 表に格納する用途でシンプル・高速 |
| Data Pumpは環境間移行やバックアップに最適 | スキーマ/テーブル単位での完全な論理移送、圧縮・並列も可能 |
[参考]
Oracle Database データベース概要 19c


コメント