- - PR -
SQL*Loaderのダイレクトモード
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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項目の場合に上記のような現象になるように思われます。 何か他に設定が必要なんでしょうか? この現象を解決する方法をご存知の方、いらっしゃいませんか? よろしくお願いします。 | ||||
|
投稿日時: 2005-08-23 20:01
まっくです。
テーブル・データファイル・コントロールファイルの定義が それぞれ違っているようですが・・・ Oracleのバージョンはいくつですか? | ||||
|
投稿日時: 2005-08-23 20:20
Oracleのバージョンは9iです。
例を書き間違いました。すみません。 <テーブル> Col1 Varchar2(9) Col2 Varchar2(20) <CTL> Col1 CHAR, DUMY FILLER, Col2 CHAR, です。 DUMYは取り込まない項目で任意に名前を付けています。 | ||||
|
投稿日時: 2005-08-24 09:41
まっくです。
コントロールファイルを次のように修正してみて下さい。 ・・・ FIELDS TERMINATED BY ',' ・・・ ↓↓↓ ・・・ FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ・・・ | ||||
|
投稿日時: 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 ダイレクト・パスのマルチスレッド最適化が使用禁止です --------------------------------------------------------------------- となっていました。 | ||||
|
投稿日時: 2005-08-24 17:47
600番台のエラーはOracle内部で異常が起きた事を示し、エラーメッセージマニュアルでもサポートへの連絡が処置として記述されています。 もしかしたら原因は些細な事かもしれませんが、Oracleのサポートに対応してもらった方が良いと思います。 | ||||
|
投稿日時: 2005-08-24 19:03
まっくです。
バージョンは Oracle9i Enterprise Edition Release 9.2.0.1.0ですか? PSRがあったと思います。 | ||||
|
投稿日時: 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