1-10.SQL*Loaderでデータロード(Windows環境)

「Oracle XE」環境でオラクルのユーティリティ「SQL*Loader」を使ってCSVデータをオラクルのテーブルに格納(ロード)してみます。
「SQL*Loader」は「Oracle XE」に標準でインストールされています。

「SQL*Loader」の概念フローは下記になります。

sqlloaderpicture

制御ファイル:SQL*Loaderの動作を決める定義を記述したファイル
データファイル:ロード元のファイル
テーブル:ロード先のテーブル
ログファイル:ロード結果を出力するファイル
不良ファイル:ロード出来なかったデータを出力するファイル
廃棄ファイル:廃棄されたファイル

今回の環境はテーブルが既に作成済みで「c:\」にコントロールファイル、データファイルを格納した状態で実行することを想定しています。

■制御ファイル(ファイル名:custom_mst.ctl)
— sqlldr test2/test@xe control=custom_mst.ctl log=c:\custom_mst.log  ←コメント行に実行コマンド記述
OPTIONS(LOAD=-1,SKIP=1,ERRORS=-1,ROWS=-1)  ←「-1」は無制限の意味、「SKIP=1」は1行目をスキップする意味
LOAD DATA
INFILE ‘c:\custom_mst.csv’  ←データファイル
BADFILE ‘c:\custom_mst.bad’  ←不良ファイル
APPEND  ←行追加
INTO TABLE custom_mst  ←出力先テーブル
FIELDS TERMINATED BY “,”  ←フィールド区切り文字
(
cust_no,  ←カラム名
cust_name,  ←カラム名
address,  ←カラム名
tel,  ←カラム名
mail,  ←カラム名
insert_dt,  ←カラム名
update_dt  ←カラム名
)

・OPTIONS
  LOAD:ロード対象レコード数
  SKIP:スキップレコード数
  ERRORS:エラー許容レコード数
  ROWS:コミットタイミング

■データファイル(ファイル名:custom_mst.csv)
cust_no,cust_name,address,tel,mail,insert_dt,update_dt
00000001,山田花子,東京都新宿区西新宿1-1-1,03-5554-1111,hanako@docomo.ne.jp,20140401,20140401
00000002,山田太郎,神奈川県大和市中央1-2-3,04-6263-1111,taro@docomo.ne.jp,20140401,20140401
00000003,鈴木一郎,東京都品川区南品川3-3-3,03-5555-1000,ichiro@gmail.com,20140401,20140401
00000004,株式会社ACB,千葉県柏市10-10-10,04-7173-1000,send@abc.com,20140401,20140401
00000005,長澤まさみ,新潟県南魚沼市中央2-3-9,074-555-0001,masami@mail.com,20140401,20140401
00000006,石原さとみ,沖縄県那覇市南方4-4-4,09-5555-9999,satomi@gmail.com,20140401,20140401
00000007,有村架純,青森県弘前市大町1-1-1,02-3333-4444,kasumi@ywz.jp,20140401,20140401
00000008,上戸彩,石川県加賀市幸町4-5-6,05-5555-5555,aya@zaqwsx.com,20140401,20140401
00000009,広瀬アリス ,大阪府和泉市中央南2-2-2,06-9999-1111,alice@wonderland.com,20140401,20140401
00000010,北川景子,埼玉県さいたま市北区本郷7-6-8,04-4321-1000,keiko@ntt.jp,20140401,20140401
00000011,田中将大,東京都杉並区今川1-2-4,03-0001-1010,masahitro@yahoo.co.jp,20140401,20140401
00000012,勝みなみ,東京都中野区中央5-5-5,03-3333-9090,minami@katsu.co.jp,20140401,20140401
00000013,香川真司,東京都新宿区歌舞伎町9-9-9,03-5551-1115,shinji@abc.com,20140401,20140401
00000014,株式会社XYZ,愛知県名古屋市中区2-2-2,052-666-1111,mail@xyz.co.jp,20140401,20140401
00000015,黒木メイサ,北海道網走市北網走100-100-90,08-8080-9090,meisa@meisa.jp,20140401,20140401
00000016,松山英樹,茨城県つくば市筑波5-5,03-9911-1199,hideki@gmail.com,20140401,20140401
00000017,桜庭ななみ,東京都渋谷区道玄坂6-7-1,03-1010-1010,nanami@gmail.com,20140401,20140401
00000018,深田恭子,京都府京都市左京区1-1-2,06-6666-6666,kyoko@au.com,20140401,20140401
00000019,石川遼,千葉県千葉市中央5-5-1,04-7777-1111,ryo@ishikawa.com,20140401,20140401
00000020,BB株式会社,東京都品川区本品川9-8-7,03-9876-5432,mail@bb.co.jp,20140401,20140401
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,

■実行
Windowsのスタートメニューから「コマンド プロンプト」を起動します。
「c:\」に移動後コマンドを実行します。
C:\>sqlldr test2/test@xe control=custom_mst.ctl log=c:\custom_mst.log
ログイン:test2
パスワード:test
接続識別子:xe
制御ファイル:custom_mst.ctl
ログファイル:c:\custom_mst.log

sqlloader

■ログファイル(ファイル名:custom_mst.log)
SQL*Loader: Release 11.2.0.2.0 – Production on 火 4月 29 17:58:00 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

制御ファイル: custom_mst.ctl
データファイルc:\custom_mst.csv
不良ファイル: c:\custom_mst.bad
廃棄ファイル: 指定なし

(すべて廃棄できます)

ロード数: ALL
スキップ数: 0
許容エラー数: ALL
バインド配列: 4294967295行、最大256000バイト
継続文字: 指定なし
使用パス: 従来型

表CUSTOM_MST、 ロード済 すべての論理レコードから
この表に対する有効な挿入オプション: APPEND

Column Name Position Len Term Encl Datatype
—————————— ———- —– —- —- ———————
CUST_NO FIRST * , CHARACTER
CUST_NAME NEXT * , CHARACTER
ADDRESS NEXT * , CHARACTER
TEL NEXT * , CHARACTER
MAIL NEXT * , CHARACTER
INSERT_DT NEXT * , CHARACTER
UPDATE_DT NEXT * , CHARACTER

ROWSパラメータに使用される値が8323541から141に変更されました
レコード22: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード23: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード24: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード25: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード26: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード27: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード28: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード29: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード30: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード31: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード32: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード33: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード34: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード35: 拒否されました。- 表CUSTOM_MST,列UPDATE_DTでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)
レコード1: 拒否されました。- 表CUSTOM_MST,列INSERT_DTでエラーが発生しました。
ORA-01841: (周)年は-4713と+9999の間の0以外の数字を指定する必要があります

表CUSTOM_MST:
20行のロードに成功しました。
15行はデータ・エラーのためロードされませんでした。
0行はWHEN句のエラーのためロードされませんでした。
0行はすべてのフィールドがNULLのためロードされませんでした。

バインド配列に割り当てられた領域: 254646バイト(141行)
読取りバッファのバイト数: 1048576

スキップされた論理レコードの合計: 0
読み込まれた論理レコードの合計: 35
拒否された論理レコードの合計: 15
廃棄された論理レコードの合計: 0

実行開始火 4月 29 17:58:00 2014
実行終了火 4月 29 17:58:00 2014

実行時間: 00: 00: 00.22
CPU時間 : 00: 00: 00.04

■不良ファイル(ファイル名:custom_mst.bad)
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
cust_no,cust_name,address,tel,mail,insert_dt,update_dt

今回のエラーデータは再度取り込む必要がありませんのでこの時点でロードは終了です。
取り込むべきデータがエラーデータに出力された場合はエラーファイルのエラー内容を確認し、エラーデータ修正後再ロードします。


◆オラクルマスター書籍◆

オラクルマスター教科書Silver Oracle9i Database 【SQL/Oracle入門】編[CD-ROM付]

オラクルマスター教科書Silver Oracle9i Database 【DBAI】編[CD-ROM付]

This entry was posted in Oracle, SQL*Loader, データベース. Bookmark the permalink.

Comments are closed.