12

アプリケーションの1つに、1日に3回更新され、更新に7時間かかる大規模なマテリアライズドビューがあります。(理想的ではありません、私は知っています)。更新中はユーザーとセッションがこのマテリアライズドビューにアクセスできないと確信していたので、これは私を困惑させましたが、どうやらアクセスできるようです!。(更新の種類は完全更新です)

完全な更新中に、私の理解では、既存のデータセットが削除され、クエリが再実行されます。これが当てはまる場合、マテリアライズド・ビューがリフレッシュされている間、ユーザー/他のセッションはどのようにしてマテリアライズド・ビューにアクセスできますか?

4

1 に答える 1

17

完全な更新が発生する可能性がある2つの異なる方法があります-アトミックリフレッシュまたは非アトミックリフレッシュ。アトミック・リフレッシュは、単にDELETEを発行してマテリアライズド・ビューのすべての行を削除してから、INSERTを実行して新しいデータを挿入します。これはすべて単一のトランザクション内にあるため、Oracleの標準マルチバージョン読み取り整合性アーキテクチャにより、更新が完了するまで、Oracleは他のセッションに古いデータを表示できます。非アトミック・リフレッシュでは、Oracleはマテリアライズド・ビューでTRUNCATEを実行してから、ダイレクト・パスINSERTを実行して新しいデータを挿入します。これは大幅に効率的ですが、TRUNCATEはDDLであるため、更新中に古いデータが他のセッションに表示されないことを意味します。

于 2011-08-09T17:23:16.180 に答える