忘れかけのIT備忘録

今まで学んできた知識や小技、なるほど!と思ったことをメモするブログです。

SQL*Loader

データファイル(CSVやTSV、固定長のファイル)からテーブルにデータを流すOracleのユーティリティ

【コマンド書式】
sqlldr userid/password@SID control=xxx data=xxx

【制御ファイル】
制御ファイルは下記で構成される
・ロード対象データの場所
・データのフォーマット方法(データファイルのレコード形式)
・構成方法(メモリー管理、拒否するレコード、中断するレコードの詳細)
・ロード中のデータの操作方法

OPTIONS:SQL*Loaderに渡す引数
 LOAD:ロードする論理レコードの最大件数を指定する(デフォルト値:すべて)
 SKIP:先頭から読み飛ばす論理レコードを指定する(デフォルト値:0)
 ERRORS:許容するエラーの件数を指定する。指定した件数を超えると中止する
 ROWS:何件ごとにコミットするかを指定する
LOAD DATA:下記に記述する制御情報を読み込む宣言(お約束)
CHARACTERSET:データファイルの文字コードを指定する
INFILE:データファイル名を指定する
BADFILE:不良ファイル名を指定する。何らかの理由でテーブルへロードできなかった論理レコードが出力される
DISCARDFILE:廃棄ファイル名を指定する。WHEN条件によって弾かれた論理レコードが出力される
LOAD MODE:データをロードするモードを指定する
 INSERT:空の表にデータを追加する。表が空でない場合、エラーとなる
 APPEND:表にデータを追加する。既にデータがある場合、重複しないレコードのみが追加される
 REPLACE:表のデータをすべて入れ替える。既存のデータはDELETEしてからロードされる
 TRUNCATE:表のデータを切り捨てて追加する。既存のデータはTRUNCATEしてからロードされる
INTO TABLE tablename:データを登録するテーブル名を指定する
WHEN condition:データを登録する条件を指定する。書き方はWHERE句と同様。不一致データは廃棄ファイルに出力される

FIELDS TERMINATED BY 区切り文字 OPTIONALLY ENCLOSED BY 囲み文字:項目の区切り方を指定する。固定長の場合、項目ごとにPOSITIONで指定する。

・例
カンマ区切り
タブ区切り
ダブルクォーテーションで囲まれている場合、SQL文字列を使用して日付データをロードする

TRAILING NULLCOLS

PRESERVE BLANKS


SQL*Loaderの入力ファイルは下記2種類
コントロールファイル
データファイル(CSV、TSV、固定長のファイル)

SQL*Loaderの出力ファイルは下記2種類
ログファイル
不良・廃棄ファイル(何かしらの理由でテーブルにデータを登録できなかったレコード)

なお、SQL*Loaderダイレクトパスロードでは下記制限がある
・すべてのREDOログが生成されるわけではない
・データ保存を用いて直接データブロックをデータファイルに書き込む
・INSERTトリガーを起動しない(INSERTを使わない)
・ロードできる制約はPK、UK、NOT NULLだけ
クラスタ表にロードできない
・ロード中にほかのユーザーは更新できない