ユーザ用ツール

サイト用ツール


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