ja:oracle:sql_loader
Oracle SQL∗Loader
CSVファイルなどから、Oracleへデータを流し込むツール
CSVや固定長のデータファイルと、データファイルのロードに関する設定を記述したコントロールファイルを準備する。
コントロールファイル
コントロールファイルに記述する各種設定は、必要なもののみ記述し、不要なものは記述しない。
主な項目
- options
読み込み時の設定を記述。load dataよりも前に書かれるのは、これだけと思われる。- load
ロードするレコード数- -1の場合、全て
- skip
スキップするレコード数- -1の場合、429497295(0xffffffff)
- errors
許容するエラー数- -1の場合、全て
- rows
何件ごとにコミットを行うかの行数- -1の場合、429497295(0xffffffff)
- load data
ほぼお約束の記述。 - infile
入力対象となるデータファイルを指定する。 - badfile
何らかのエラーにより、Oracleへの投入に失敗したデータがあると、ここで指定したファイルに出力される。 - <投入モード>
データの入力時のモード- insert
データは新規でロードされる。テーブルは空である事が前提。既にデータが存在している場合、それが重複しないデータであってもエラーとなる。 - append
データを追加でロードする。既にデータがある場合は、duplicateしないデータのみ追加される。 - replace
既にテーブルにある全レコードを削除して、新規にデータをロードする。削除方法はdelete文での削除に相当する。 - truncate
replaceと同じ。ただし削除はtruncateに相当する。
- into table
データの投入先のテーブルを指定する - when
データの投入条件を指定する。where句と似た書き方をするが、比較演算子として=,<>,!=およびANDしか使用できない。 - fields <設定値>
データの投入対象の列を指定する。- terminated by <区切り文字>
データの区切り文字を指定する。- カンマ区切り
terminated by “,” - タブ区切り
terminated by X'09'
terminated by ' ' ←シングルクォートの間はタブ
- optionally enclosed by <囲み記号>
データを囲む記号がある場合に指定する。- ダブルクォートで括る場合
optionally enclosed by '“'
- (<項目名>,<項目名>,…)
データ投入先テーブルの項目名を列挙する。データファイル内の並び順に合わせて列挙する。
例
- データ入替
テーブルHOGEの内容を一旦すべて削除した後、/home/hogehoge/foobar.txtの内容を投入する。load data infile '/home/hogehoge/foobar.txt' replace into table HOGE fields terminated by ' ' (hoge_cd, hoge_name, hoge_flg)
環境変数
実際にsqlldrコマンドを使用する時には、実行するユーザの環境変数を正しく宣言しておかないとうまく入らない。
実行用のシェルスクリプトなどを準備しておいて、
#!/bin/sh export ORACLE_HOME=/oracle/app/oracle/product/x.x.x export LD_LIBRARY_PATH=/oracle/app/oracle/product/x.x.x/lib export PATH=/oracle/app/oracle/product/x.x.x/bin export NLS_LANG=Japanese_Japan.JA16SJIS sqlldr {ID}/{PASS} control='{コントロールファイルのパス}'
といった具合で。
oracle用のユーザで実行する分にはだいたいちゃんとなっていると思うので、NLS_LANGをDBの文字コードと合わせておいて、投入するデータファイルの文字コードも統一しておけば多分すんなり入る。
ja/oracle/sql_loader.txt · 最終更新: 2014/07/15 08:12 by makoto