SQL*Loaderの使い方

SQL*Loaderは、CSVファイルなどのファイルからOracleデータベースにデータを取り込むコマンドである。

目次

  1. 使い方
    1. bad
    2. bindsize
    3. columnarrayrows
    4. control
    5. data
    6. discard
    7. discardmax
    8. errors
    9. log
    10. readsize
    11. rows
    12. streamsize
    13. userid
  2. コントロールファイル

使い方

sqlldr keyword=value [, ...]

keywordに指定できるキーワードの一覧を以下に示す。

bad

不良ファイル名を指定する。不良ファイルは、ロード中にエラーとなったレコードが出力されるファイルである。

bindsize

バインド配列の最大サイズをバイト単位で指定する。

columnarrayrows

行数を指定してダイレクト・パス配列に割り当てる。

control

コントロールファイル(ctlファイル)の名前を指定する。コントロールファイルは、データのロード方法を記述したテキストファイルである。

$ sqlldr CONTROL=example.ctl
Username: tsuka
Password: mellon

data

データファイル名を指定する。データファイルは、ロードするデータが入っているファイルである。

discard

廃棄ファイルのパス名を指定する。制御ファイルに指定されているレコード選択基準に一致しなかったレコードは、ロード対象から除外され、データベースのどの表にも挿入されない。これらのレコードは廃棄ファイルに格納される。

discardmax

廃棄レコードの最大数を指定する。廃棄レコードがの件数に達すると、ロードは中止される。

errors

許容するエラーの数を指定する。

log

ログファイル名を指定する。ログファイルは、ロード処理に関するログ情報が出力されるファイルである。

readsize

データファイルからデータを読み込む場合の読み取りバッファサイズを指定する。制御ファイルから読み込む場合は、常に64キロバイトである。

rows

1回にコミットする行数を指定する。

streamsize

ダイレクト・パス・ストリームに対して、サイズをバイト単位で指定する。

userid

Oracleのユーザ名とパスワードを指定する。

sqlldr userid=scott/tiger

実行例

SQL*Loaderの実行例を示す。

sqlldr userid=marina/horiuchi, control=employee.ctl, data=employee.dat, log=employee.log, bad=employee.bad errors=0 rows=999

コントロールファイル

SQL*Loader のコントロールファイル(ctlファイル)は、SQL*Loaderジョブ用のデータ定義言語(DDL)命令を含むテキスト・ファイルである。

コントロールファイルの例を以下に示す。

-- This is a sample control file
LOAD DATA
INFILE 'sample.dat'
BADFILE 'sample.bad'
DISCARDFILE 'sample.dsc'
APPEND
INTO TABLE emp
WHEN (57) = '.'
TRAILING NULLCOLS
(hiredate SYSDATE,
  deptno POSITION(1:2)  INTEGER EXTERNAL(2)
          NULLIF deptno=BLANKS,
   job    POSITION(7:14)  CHAR  TERMINATED BY WHITESPACE
          NULLIF job=BLANKS  "UPPER(:job)",
   mgr    POSITION(28:31) INTEGER EXTERNAL 
          TERMINATED BY WHITESPACE, NULLIF mgr=BLANKS,
   ename  POSITION(34:41) CHAR 
          TERMINATED BY WHITESPACE  "UPPER(:ename)",
   empno  POSITION(45) INTEGER EXTERNAL 
          TERMINATED BY WHITESPACE,
   sal    POSITION(51) CHAR  TERMINATED BY WHITESPACE
          "TO_NUMBER(:sal,'$99,999.99')",
   comm   INTEGER EXTERNAL  ENCLOSED BY '(' AND '%'
          ":comm * 100"
)

SQL*Loader を実行するときに、キーワードでコントロールファイルを指定する。

$ sqlldr CONTROL=example.ctl
Username: tsuka
Password: mellon