9

私は DBA ではないので、Oracle のトランザクション管理プロセスを理解するのに少し苦労しています。

インターネット上の信頼できるように見えるページを読んで理解したところ (最も顕著なのはこのAskTom ノートですが、コメントは気にしないでください)、トランザクションがコミットされたとき、新しいデータは実際のデータ ブロックでまだ報告されていませんが、ロールバック セグメントに記録されたままになります。誰かがデータに対して SELECT を発行したとき、または UNDO_RETENTION 秒が経過したとき (これら 2 つのイベントのいずれかが最初に発生した方)、新しいデータがデータ ブロックに書き込まれます。

しかし、おそらく知っていると思われる当社の誰かが最近私に反対のことを言いまし. UNDO_RETENTION 秒の期間。この古いデータは、トランザクションの前に SCN で起動されたクエリによるアクセスのために、この間利用可能のままです。

では、オラクル内部で実際に何が起こっているのでしょうか?回答をバックアップするための参照を提供できますか?

Oracle 9.2.0.8 を使用しています。

前もって感謝します。

4

3 に答える 3

14

ここでカバーすることがたくさん!あなたの会社の人は基本的に正しいですが、コミット前であっても、変更が行われるとメモリ内のデータブロックに書き込まれます。そして、それらは、コミットするときとは完全に独立してディスクに書き出されます (コミット操作の一部としてではなく、コミット前、後かもしれません)。

1) UNDO_RETENTION は、変更がメモリ内またはディスク上のデータ ブロックに書き込まれるときとは関係ありません。UNDO_RETENTION は、変更をコミットした後、変更を元に戻すために必要なデータが保持される期間を制御します。目的は、コミット前に開始された他のクエリまたはシリアル化可能なトランザクションがまだそのデータを必要としている可能性があることです。参照: http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/undo.htm#sthref1477

2) 更新を行うと、メモリ内のデータ ブロックが変更されます。それらはディスクに書き出される場合とされない場合があります (コミットする前であっても)。これは、バックグラウンド プロセスによって行われます。また、REDO情報はREDOログ・バッファに書き込まれます。元に戻すが生成され、元に戻すセグメントに格納されます。

3) コミットすると、Oracle は REDO 情報がディスクに書き込まれていることを確認し、UNDO データをコミット済みとしてマークします。ただし、メモリ内の変更されたデータ ブロックをディスクに書き込むことも、戻って各ブロックをコミット済みとしてマークすることもありません。これは、コミットをできるだけ迅速にするためです。参照: http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/transact.htm#sthref628

4) メモリ内のデータ ブロックは、バックグラウンド プロセスによってディスクに書き出されるとき、または (SELECT またはその他の操作によって) 次に使用されるときに、コミット済みとしてマークされます。それが、AskTom ノートで議論されていることです。これは、データへの変更がブロックに書き込まれるかどうかではありません。ブロック自体でコミット済みとしてマークされているかどうかについてです。

于 2008-10-10T12:46:28.313 に答える
0


また、このリンクに基づいて 2 番目のバージョンに投票します (これは Oracle 10.2 ですが、9.2 にも当てはまると思います)。

「トランザクションがコミットされた後、ロールバックまたはトランザクションの回復の目的で元に戻すデータは不要になります。ただし、一貫した読み取りを目的として、実行時間の長いクエリでは、データ ブロックの古いイメージを生成するために、この古い元に戻す情報が必要になる場合があります。」

「自動UNDO管理が有効になっている場合、現在のUNDO保存期間が常に存在します。これは、Oracle Databaseが上書きする前に古いUNDO情報を保持しようとする最小時間です。」

于 2008-10-10T12:16:35.937 に答える
0

私の理解は(基本的に)後者です。このリンクには詳細があります。

データ ブロックは書き込む必要はありません。バッファ内で更新するだけです。ディスクに書き出す場合と書き出さない場合があります。ただし、コミットを続行するには、REDO をディスクに書き込む必要があります。

于 2008-10-10T10:23:06.850 に答える