7.7 SQL*Loaderの廃棄レコードと拒否レコード

SQL*Loaderは入力ファイルから読み込まれ一部のレコードを拒否または破棄できます。これは、ファイルの問題のため、またはロードからレコードをフィルタ処理することを選択したためです。

拒否レコードは不良ファイルに格納され、廃棄レコードは廃棄ファイルに格納されます。

7.7.1 SQL*Loader不良ファイル

不良ファイルには、SQL*LoaderまたはOracle Databaseによって拒否レコードが書き込まれます。

不良ファイルを指定していない場合に拒否されたレコードがあると、SQL*Loaderによって不良ファイルが自動的に作成されます。拒否レコードはデータ・ファイルと同じ名前になりますが、拡張子.badが付きます。拒否には、いくつかの原因があります。

7.7.1.1 SQL*Loaderによって拒否されたレコード

入力形式が不適切なデータ・ファイル・レコードは、SQL*Loaderによって拒否されます。

たとえば、2番目の囲みデリミタがない場合や、デリミタ付きフィールドが最大長を超えている場合、レコードは、SQL*Loaderによって拒否されます。拒否レコードは、不良ファイルに書き込まれます。

7.7.1.2 SQL*Loaderの操作中にOracle Databaseによって拒否されたレコード

データ・ファイル・レコードは、SQL*Loaderによって受け取られた後、データベースに送られ、行として表に挿入されます。

データベースによって有効であると判断された行は、表に挿入されます。行が無効であると判断された場合、レコードは拒否され、SQL*Loaderにより不良ファイルに書き込まれます。行が無効であると判断される例としては、キーが重複している場合、必須入力フィールドに対応するデータがNULL値の場合、またはフィールドにOracleデータ型ではないデータ型が指定された場合が考えられます。

7.7.2 SQL*Loader廃棄ファイル

SQL*Loaderの実行時に、一部のレコードがロードから除外されるようにして、廃棄ファイルというファイルが作成されるようにすることもできます。

廃棄ファイルが作成されるのは、廃棄ファイルが必要な場合と、廃棄ファイルを有効にするように指定した場合のみです。廃棄ファイルには、制御ファイルに指定されているレコード選択基準に一致しなかったため、ロード対象から除外されたレコードが入ります。

廃棄ファイルにはロードから除外されたレコードが格納されているため、廃棄ファイルの内容はデータベースのどの表にも挿入されなかったレコードになります。廃棄ファイルに格納可能なレコードの最大数を指定できます。レコードのデータがいずれかの表に書き込まれる場合、このレコードは廃棄ファイルには書き込まれません。