- PR -

SQL*Loaderのダイレクトモード

1
投稿者投稿内容
なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-08-23 18:51
いつもお世話になっています。

SQL*Loaderに少し慣れてきたレベルなんですが、ダイレクトモードでの
取込で困っています。
取込データのエラー時にBADファイルに正常にレコードが
出力されるかをテストしているのですが、
ダイレクトモードで実行すると実際にロードされなかったデータと
BADファイルに出力されるデータが異なっているんです。


<テーブル>
Col1 Varchar2(9)
Col2 Varchar2(20)

<CSV>
"123456789","20050823","test1"
"999999999","20050823","test2"
"1234567890","20050823","test3"

<CTLファイル>
MCD CHAR,
DUMY FILLER,
NAME CHAR

この場合にbadファイルに書き出されるのは
"1234567890","20050823","test3"のレコードだと思ったのですが、
書き出されたのは"123456789","20050823","test1"でした。

テーブルの内容を確認してみると、ロードされていないのは"1234567890","20050823","test3"でした。

色々試した結果、エラーを起こす項目の後ろが
FILLER項目の場合に上記のような現象になるように思われます。
何か他に設定が必要なんでしょうか?

この現象を解決する方法をご存知の方、いらっしゃいませんか?
よろしくお願いします。

まっく
会議室デビュー日: 2002/08/30
投稿数: 18
投稿日時: 2005-08-23 20:01
まっくです。

引用:

なりこさんの書き込み (2005-08-23 18:51) より:
<テーブル>
Col1 Varchar2(9)
Col2 Varchar2(20)

<CSV>
"123456789","20050823","test1"
"999999999","20050823","test2"
"1234567890","20050823","test3"

<CTLファイル>
MCD CHAR,
DUMY FILLER,
NAME CHAR


テーブル・データファイル・コントロールファイルの定義が
それぞれ違っているようですが・・・

Oracleのバージョンはいくつですか?
なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-08-23 20:20
Oracleのバージョンは9iです。

例を書き間違いました。すみません。

<テーブル>
Col1 Varchar2(9)
Col2 Varchar2(20)

<CTL>
Col1 CHAR,
DUMY FILLER,
Col2 CHAR,

です。
DUMYは取り込まない項目で任意に名前を付けています。


まっく
会議室デビュー日: 2002/08/30
投稿数: 18
投稿日時: 2005-08-24 09:41
まっくです。

コントロールファイルを次のように修正してみて下さい。

・・・
FIELDS TERMINATED BY ','
・・・

↓↓↓

・・・
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
・・・
なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-08-24 16:02
まっくさん

返信ありがとうございます。OPTIONALLY ENCLOSED BY '"'は既に記述済みです。
色々試していたのですが、FILLER項目というよりテーブルの索引が関係してるのかも
しれないと思えてきました。

現在実行していたctlファイルとcsv内容とテーブルレイアウトを記述します。

<COLOR.CSV>
"030","1","赤 "
"030","3","青 "
"030","2","abcssssssssssssssssss"
"030","0","緑"
"030","5","ピンク"
"030","6","白"
"030","7","黒"
"030","8","水色"
"030","9","グレー"
"030","10","オレンジ"

<CTLファイル>
OPTIONS(DIRECT=TRUE)
LOAD DATA
INFILE 'C:\\COLOR.CSV'
BADFILE 'C:\\COLOR.bad'
REPLACE
INTO TABLE COLOR
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
( DUMY FILLER,
COLOR CHAR,
COLORNAME "TRIM(:COLORNAME)"
)

<COLORテーブル>
create table COLOR (
COLOR varchar2(2) Not Null,
COLORNAME varchar2(12),
constraint M_COLOR_PKEY PRIMARY KEY (COLOR)
USING INDEX


@上記のCSVファイルで実行すると
"030","1","赤 "がBADファイルに書き出される。

Aエラーとなるレコード"030","2","abcssssssssssssssssss"を
"030","222","黄色 "とした場合、つまり索引のキーでエラーを
起こすようなデータにした場合は、正しくBADファイルに書き出される。

ちなみにLOGファイルを見ると@の場合は
---------------------------------------------------------------------
レコード1: 拒否されました。- 表COLORでエラーが発生しました。
ORA-00600: 内部エラー・コード、引数: [],[],[],[],[],[],[],[]

表COLORの次の索引が処理されました:
索引TEST.COLOR_PKEYに9キーが正常にロードされました。

表COLOR:
7行のロードに成功しました。
1行はデータ・エラーのためロードされませんでした。
0行はWHEN句のエラーのためロードされませんでした。
0行はすべてのフィールドがNULLのためロードされませんでした。
バインド配列サイズはダイレクト・パスで使用されません。
列配列の行数: 5000
ストリーム・バッファのバイト数: 256000
読込みバッファのバイト数: 1048576

スキップされた論理レコードの合計: 0
読み込まれた論理レコードの合計: 10
拒否された論理レコードの合計: 1
廃棄された論理レコードの合計: 0
ダイレクト・パスのマルチスレッド最適化が使用禁止です
---------------------------------------------------------------------

Aの場合
---------------------------------------------------------------------
レコード3: 拒否されました。- 表COLOR,列DUMYでエラーが発生しました。
ORA-01401: 列に挿入した値が大きすぎます。

表COLORの次の索引が処理されました:
索引TEST.COLOR_PKEYに9キーが正常にロードされました。

表COLOR:
9行のロードに成功しました。
1行はデータ・エラーのためロードされませんでした。
0行はWHEN句のエラーのためロードされませんでした。
0行はすべてのフィールドがNULLのためロードされませんでした。
バインド配列サイズはダイレクト・パスで使用されません。
列配列の行数: 5000
ストリーム・バッファのバイト数: 256000
読込みバッファのバイト数: 1048576

スキップされた論理レコードの合計: 0
読み込まれた論理レコードの合計: 10
拒否された論理レコードの合計: 1
廃棄された論理レコードの合計: 0
ダイレクト・パスのマルチスレッド最適化が使用禁止です
---------------------------------------------------------------------

となっていました。






いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2005-08-24 17:47
引用:

ちなみにLOGファイルを見ると@の場合は
---------------------------------------------------------------------
レコード1: 拒否されました。- 表COLORでエラーが発生しました。
ORA-00600: 内部エラー・コード、引数: [],[],[],[],[],[],[],[]


600番台のエラーはOracle内部で異常が起きた事を示し、エラーメッセージマニュアルでもサポートへの連絡が処置として記述されています。
もしかしたら原因は些細な事かもしれませんが、Oracleのサポートに対応してもらった方が良いと思います。
まっく
会議室デビュー日: 2002/08/30
投稿数: 18
投稿日時: 2005-08-24 19:03
まっくです。

バージョンは
Oracle9i Enterprise Edition Release 9.2.0.1.0ですか?

PSRがあったと思います。
なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-08-24 20:49
バージョンは
Oracle9i Enterprise Edition Release 9.2.0.1.0
です。

PSRを調べてみます。ありがとうございます。

その後も色々試してみたんですが、
項目の桁数を設定してやると、正常に実行できました。

OPTIONS(DIRECT=TRUE)
LOAD DATA
INFILE 'C:\\COLOR.CSV'
BADFILE 'C:\\COLOR.bad'
REPLACE
INTO TABLE COLOR
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
( DUMY FILLER,
COLOR CHAR(2),
COLORNAME CHAR(12) "TRIM(:COLORNAME)"
)

でも、パッチが当たっていないのは気になっていたので
そっちも調べてみます。





1

スキルアップ/キャリアアップ(JOB@IT)