1

ビルドプロセス中に、sqlldrを実行して、データベースにサンプルデータを入力します。sqlldrがアクセスするすべてのテーブルで、sqlldrの実行後に外部キーが無効になります。

このAskTomの投稿によると:

sqlldrは、主キーではなく、他のテーブル(外部キーなど)に関連する制約のみを無効にします。

SQLLDRは、ITが無効にした制約のみを再度有効にし、自分で行った制約は再度有効にしません。

これは、外部キーを有効にする必要があることを意味します。

すべてのsqlldr制御ファイルは次のファイルに似ています。

options (direct=true, rows=20000)
load data
infile "clinical_code.txt"
append
into table clinical_code
fields terminated by "|"
trailing nullcols

カウントは、データファイルのrows行数よりも意図的に大きくなっています。これは、小さい場合、主キーが破損しているためです。

ドキュメントが示唆しているように、sqlldrが外部キーを再度有効にしないのはなぜですか?

必要に応じてインデックスを再度有効にするSQLを作成しています。なぜこれが起こっているのか知りたいのですが。

従来のロードパスを使用することも問題ありませんが、ビルドプロセスに2分かかるため、可能であればそれを避けたいと思います。

4

2 に答える 2

5

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

参照制約など、他の行またはテーブルに依存する整合性制約は、ダイレクトパスのロード前に無効にされ、後で再度有効にする必要があります。REENABLEが指定されている場合、SQL*Loaderはロードの最後にそれらを自動的に再度有効にすることができます。制約が再度有効になると、テーブル全体がチェックされます。このチェックに失敗した行は、指定されたエラーログに報告されます。直接ロード、整合性制約、およびトリガーを参照してください。

REENABLEロード後に制約を自動的に有効にするには、キーワードを指定する必要があるようです。

于 2009-08-20T08:38:12.540 に答える
0

SQLローダーには、インデックスのメンテナンスオプションと制約に関連するオプションもあります。

直接ロードのみの場合、「再有効化オプション」が機能し、制約状態は入力データのとおりになります。

直接および並列ロードの場合は、ロード後に有効にする必要があると思います。

于 2015-08-30T20:11:07.880 に答える