マテリアライズドビュー更新時にUNDOが多く必要になる理由
UNDOはDB接続ユーザAとユーザBがいた場合を仮定して、
ユーザAがPAYMENTというレコードの値を書き換えてcommitするまでの間、
ユーザBに対して情報書き換え前のPAYMENTを見せるための領域というイメージ。
マテリアライズドビューの更新処理について、なにもオプションを指定しない場合は
DELETE、INSERT処理によって内容が更新されることになる。
この場合、UNDOが必要になるのでマテビュー更新対象のサイズなどによっては
非常に多くのUNDOが必要になります。
dbms_mview.refreshでマテビューを更新する際にatomic_refreshオプションを変更することでマテビュー更新時のデータ削除をTRUNCATEにすることができます。これによってマテビュー更新の処理時間や必要UNDO量が改善します。