HOME > SQL*Loader編
SQL*Loader
SQL*LoaderはOracleが提供するユーティリティで、CSV形式などのテキストファイルからデータベース内にデータを取り込むためのツールです。
データの取り込みにはデータファイルと、取込時の設定を記述した制御ファイルが必要です。
(ここで言うデータファイルと制御ファイルは、DB構成ファイルとは全く違うものです。)

<入力ファイル>
- データファイル:データベースにロードするデータファイル(CSV形式が多い)
- 制御ファイル:ロード時の設定が記述されたファイル
<出力ファイル>
- ログファイル:実行時のログが書き込まれるファイル
- 不良ファイル:ロード失敗行が書き込まれるファイル
- 廃棄ファイル:ロード時の条件に合わないデータが書き込まれるファイル
SQL*Loader使用例
制御ファイル、データファイル、実行SQLの例です。
- 制御ファイル例(pref.ctl)
- OPTIONS(LOAD=-1,SKIP=0,ERRORS=-1,ROWS=-1) LOAD DATA INFILE 'c:\pref.csv' BADFILE 'c:\pref.bad' APPEND INTO TABLE pref_mst FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "'" TRAILING NULLCOLS ( PREF_CODE, PREF_NAME, PREF_POPULATION )
- データファイル例(pref.csv)
- '01','北海道',5641529 '02','青森県',1450681 '03','岩手県',1394810 ...
- 実行コマンド例
- C:\>sqlldr userid=user/pass@db01 control=pref.ctl log=pref.log
SQL*Loaderのパラメータ
パラメータには制御ファイル内で指定するパラメータと、実行時のコマンドに指定するパラメータがあります。
| 制御ファイルのパラメータ | |
|---|---|
| OPTIONS |
・LOAD:ロード対象レコード行数 ・SKIP:スキップレコード行数 ・ERRORS:エラー許容数 ・ROWS:コミットをかけるタイミング (※「-1」を指定すると無限大) |
| LOAD DATA | 新規ロードが開始されることを指定 |
| INFILE | データファイル名を指定 (例)INFILE 'c:\pref.csv' |
| BADFILE | 不良ファイル名を指定 ※不良ファイル:何らかのエラーにより、データファイルからDBに取り込めなかったデータを格納するファイル |
| DISCARDFILE | 廃棄ファイル名を指定 ※廃棄ファイル:WHEN条件(3つ下の項目参照)にて弾かれたデータを格納するファイル |
|
INSERT APPEND REPLACE TRUNCATE ※どれかひとつ指定 |
INSERT:空の表に対するロード。空でない場合はエラー APPEND:行の追加。既存行がある場合は新しい行として追加。 REPLACE:行の置換。既存行は全てDELETEしてからロード。 TRUNCATE:行の置換。既存行をTRUNCATEしてからロード。 |
| INTO TABLE | データをロードする表名 |
| WHEN | ロード時のフィールドの条件。条件に一致しないものが廃棄ファイルに出力される。 |
| FIELDS TERMINATED BY "," | 可変長データを区切る区切り文字 |
| OPTIONALLY ENCLOSED BY '"' | オプションとしての区切り記号の指定。 |
| コマンド実行時のパラメータ | |
|---|---|
| USERID | SQL*Loaderを実行するID/PW (例)userid=user/pass@db01 |
| CONTROL | 制御ファイル名を指定する (例)control=pref.ctl |
| DATA | データファイル名を指定する (例)data=pref.csv |
| PARFILE | パラメータファイル (パラメータを記載したファイルを指定する) (例)parfile=par.txt |
| LOG | 実行時のログを出力するファイル名を指定する (例)log=pref.log |
| BAD | ロード失敗行を出力するファイルを指定する |
| DISCARD | 廃棄ファイル名を指定する |
| DISCARDMAX | 廃棄する最大レコード数 |
| ERRORS | 許容されるエラーの最大レコード数 |
| DIRECT=TRUE | ダイレクトパスロードで実行することを指定 |
| PARALLEL=TRUE | パラレルダイレクトパスロードで実行することを指定 |
| SKIP | 読み飛ばす行数(デフォルト=0) ※データファイルの1行目がタイトルの場合は1を指定 |
| LOAD | ロードするレコード数(デフォルト=全て) |
| ROWS | 配列レコード数 |
| BINDSIZE | 配列バッファのサイズ |
SQL*Loaderの戻り値
sqlldrコマンドを実行した時の戻り値は以下の通りです。
| 戻り値 | 分類 | 意味 |
|---|---|---|
| 0 | SUCCESS | すべてのデータが正常にロードされた |
| 1 | FAIL | コマンドや制御ファイル不正 |
| 2 | WARNING | 全てまたは一部のデータのロードが失敗した |
| 3 | FATAL | OS関連のエラー ※UNIX系OSの場合 |
| 4 | FATAL | OS関連のエラー ※Windows系OSの場合 |
0以外のコードが返った場合の詳細は、ログファイルをご確認ください。

