業務で大量データをテーブルに投入する必要がありSQL*Loaderを使った。その際に調べた内容を備忘録として残しておきます。
SQLLoaderとは?
固定長やCSV形式の外部ファイルからOracleデータベースにロードするユーティリティ。制御ファイルで指定した内容をもとにデータファイルのデータをデータベースに格納する。
- データファイル
- ロードするデータを保持するファイル。固定長やCSV形式等を指定することができる。
- 制御ファイル
- データファイルの場所やデータの解釈方法などロードに必要な制御情報を保持するファイル
- ログファイル
- ロード件数やエラーログなどが記録される。
- 不良ファイル
- エラーによりロードされなかったレコードが記録される
- 廃棄ファイル
- エラー以外の理由でロードされなかったレコードが記録される
制御ファイル記述例
- サンプルテーブル
CREATE TABLE EMP ( EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2), CONSTRAINT PK_EMP PRIMARY KEY(EMPNO) ) /
- CSVファイル
1,101,10,,20100101,10000,10,10 2,102,10,,20100101,10001,10,20 3,103,10,,20100101,10002,10,30 4,104,10,,20100101,10003,10,40 5,105,10,,20100101,10004,10,10 6,106,10,,20100101,10005,10,20 7,107,10,,20100101,10006,10,30 8,108,10,,20100101,10007,10,40 9,109,10,,20100101,10008,10,10 ・・・
- 制御ファイル
LOAD DATA INFILE 'C:\DATA.csv' APPEND INTO TABLE EMP FIELDS TERMINATED BY ',' TRAILING NULLCOLS ( empno, ename, job, mgr, hiredate DATE 'YYYYMMDD', sal, comm, deptno )
- INFILE句には、データ・ファイルの名前を指定します。
- BADFILE句には、不良ファイルの名前を指定します。指定しない場合は制御ファイル名.BAD。
- DISCARDFILE句には、破棄ファイルの名前を指定します。指定しない場合は制御ファイル名.DSC。
- INTO TABLE句にははデータをロードするモードを指定する。
- INSERT:表にデータを追加する。ただしテーブルが空でない場合はエラーとなる。
- APPEND:表にデータを追加する。既にデータがある場合、重複しないレコードのみが追加される
- REPLACE:表のデータをすべて入れ替える。
- TRUNCATE:表のデータを切り捨てて追加する。
- FIELDS句には全ての列に対するオプションを指定する
- カンマ区切りの場合:TERMINATED BY ','
- タブ区切りの場合:TERMINATED BY X'09'
- ダブルクォーテーションで囲まれている場合は「OPTIONALLY ENCLOSED BY '"'」を指定する
- データがない場合にNULLを入れるように指定する場合は「TRAILING NULLCOLS」を指定する
- 通常空白文字は切り捨てられるが、これを行わないようにする場合は「PRESERVE BLANKS」を指定する
- 実行
C:\Documents and Settings\Administrator>sqlldr user/passwd@orcl control="C:\DATA.CTL" log="C:\DATA.log" SQL*Loader: Release 11.2.0.1.0 - Production on 月 7月 18 20:07:03 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. コミット・ポイントに達しました。 - 論理レコード件数64 コミット・ポイントに達しました。 - 論理レコード件数128 コミット・ポイントに達しました。 - 論理レコード件数192 コミット・ポイントに達しました。 - 論理レコード件数256 コミット・ポイントに達しました。 - 論理レコード件数320 コミット・ポイントに達しました。 - 論理レコード件数384 コミット・ポイントに達しました。 - 論理レコード件数448 コミット・ポイントに達しました。 - 論理レコード件数512 コミット・ポイントに達しました。 - 論理レコード件数576 コミット・ポイントに達しました。 - 論理レコード件数640 コミット・ポイントに達しました。 - 論理レコード件数704 コミット・ポイントに達しました。 - 論理レコード件数768 コミット・ポイントに達しました。 - 論理レコード件数832 コミット・ポイントに達しました。 - 論理レコード件数896 コミット・ポイントに達しました。 - 論理レコード件数960 コミット・ポイントに達しました。 - 論理レコード件数1000 C:\Documents and Settings\Administrator>