2

Direct-Path INSERTオラクルのドキュメントで読んでいるテーブルの読み込み

次のように記述されています。direct-path INSERT操作中に、データベースappendsはテーブル内の既存のデータの後に挿入されたデータ。データは、バッファキャッシュをバイパスして、データファイルに直接書き込まれます。テーブル内の空き領域は再利用されませんreferential integrity constraints are ignored。ダイレクトパスINSERTは、従来のインサートよりも大幅に優れたパフォーマンスを発揮します。

誰かが私に説明できますか、参照整合性制約が無視される方法、私の理解によれば、それはデータを無視してテーブルにロードし、referential constraint挿入後に参照制約をチェックします。

もしそうなら、私がこのように使うなら。

  FORALL i IN v_temp.first..v_temp.last save exceptions
  INSERT /*+ APPEND_VALUES */ INTO orderdata 
  VALUES(v_temp(i).id,v_temp(i).name);
 COMMIT;

Will this will gave me correct index ,in case of any exceptions and how ?.

一度にたくさんの質問をして申し訳ありませんが、それらは互いに関連しています。

  1. 参照制約が無視される方法
  2. 上記の表の空き領域とは
  3. 例外が発生した場合に正しいインデックスを提供する方法。
4

3 に答える 3

3

最初の質問は実際には(ダイレクトパス挿入を使用する必要がありますか?)であり、2番目の質問は「クエリでダイレクトパス挿入を使用しましたか?」である必要があります。

参照整合性チェックが必要な場合は、ダイレクトパス挿入を使用しません。

変更のためにテーブルを排他的にロックしたくない場合は、ダイレクトパス挿入を使用しないでください。

削除によってデータを削除し、このコードでのみ挿入する場合は、ダイレクトパス挿入を使用しないでください。

ダイレクトパス挿入が使用されたかどうかをすばやく簡単に確認するには、挿入をコミットする前に、テーブルから1行の選択を発行します。成功した場合、ダイレクトパス挿入は使用されませんでした。セッションがテーブルを読み取る前に変更をコミットする必要があるためである場合は、エラーメッセージが表示されます。

于 2012-05-09T08:02:13.010 に答える
2

そのステートメントでは、参照整合性は無視されません。

説明と例については、このAskTomスレッドを参照してください。

その古いドキュメントで言うのを怠っているように見えるのは....insert/ * + append * /は、テーブルに参照整合性またはトリガーがある場合、追加ヒントを無視し、従来のパスロードを使用します

于 2012-05-09T04:57:48.133 に答える
1

空き領域は、削除によってテーブルで解放された領域を再利用しませんが、標準の挿入では再利用します。

操作後に参照整合性チェックを実行すると表示されている場所がわかりません。自分でやらなきゃいけないのではないかと思います。

えーと、どんなインデックス?

挿入するように編集しました。

挿入する3行目のインデックスは、挿入のインデックスがテーブルのキーでない限り、必ずしもテーブルとは関係がないと思います。

参照整合性を維持しているかどうかを確認しますか?存在しないcustomeridを持つ注文などに「悪い」レコードを入れます。

フリースペース。int主キーを持つnchar(2)のテーブルがあるとしましょう。

1 AA
2 AB
3 AC

だからあなたのキーのインデックスで

1 points to 0
2 points to 4 (unicode one char = two bytes)
3 points to 8

キー2でレコードを削除します。

1 points to 0
3 points to 8

空き領域を再利用する通常の挿入を行うと、

1 points to 0
3 points to 8
4 points to 4

ただし、この直接挿入のものは、スペースを再利用しないことで時間を節約できるため、

1 points to 0
3 points to 8
4 points to 12

ちなみに、説明のための非常に単純化されたシナリオ...

于 2012-05-08T18:44:17.243 に答える