0

Sqlldrは、ctlファイルの最初のコミット後に主キーインデックスを破損しています。最初の後で、制御ファイルで行の値を何に設定しても、次のようになります。

ORA-39776: fatal Direct Path API error loading table PE_OWNER.CLINICAL_CODE
ORA-01502: index 'PE_OWNER.CODE_PK' or partition of such index is in unusable state
SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.

Oracleデータベースとクライアント11.1.0.6.0を使用しています。

rowsディレクティブを巨大な値に設定した場合、sqlldrがファイル全体に対して単一のコミットを実行した後、インデックスが破損しないため、問題は重複行が原因ではないことがわかります。これは私に回避策を提供しますが、それでも少し憂慮すべきです...

誰でもできるガイダンスをありがとう。

4

2 に答える 2

1

私は実稼働テーブルで SQL*Loader をあまり使用しませんが、私が読んだことによると、従来のロードを使用する必要があります。

SQL*Loaderのドキュメントから

従来のパス ロードを使用する場合

ロード速度が最も重要な場合は、従来のパス ロードより高速なダイレクト パス ロードを使用する必要があります。ただし、ダイレクト パス ロードに対する特定の制限により、従来のパス ロードの使用が必要になる場合があります。次の状況では、従来のパス ロードを使用する必要があります。

* When accessing an indexed table concurrently with the load, or when
  applying inserts or updates to a nonindexed table concurrently with the
  load

ダイレクト・パス・ロード(パラレル・ロードを除く)を使用するには、SQL*Loaderに表への排他的書込みアクセスと索引への排他的読取り/書込みアクセスが必要です。

于 2009-04-27T01:54:54.427 に答える
0

問題は、Oracle が問題のテーブルのインデックスを再構築する時間がなかったことだと思います。そのため、バッチ コミット サイズを、インポートするレコード数よりも大きい数に増やしました。

これで問題は解決しました。

于 2009-07-07T14:06:19.427 に答える