はじめまして。
Materialized Viewで、DBリンク先のVIEWのレプリケーションをしているのですが、
この時のリフレッシュが、完全リフレッシュかつ周期リフレッシュしかできないため、負荷が高い状態です。
DBリンク先のVIEWが参照しているテーブルのCommitを契機として、Materialized Viewのリフレッシュをかけることができないか、と考えております。
構成は以下のようになっております。(@XXがデータベース、サフィックスはMV:マテビュー、V:ビュー、T:テーブル)
ONE_MV@DB_1 -> TWO_V@DB_2 -> TWO_T@DB_2
限りなく簡易にしています。本当はTWO_Vの参照先がいっぱいあります。
TWO_T@DB_2テーブルの更新により、自動的にONE_MV@DB_1のリフレッシュをしたいという感じです。
TWO_Tにトリガをはって、
dbms_mview.refresh@DB_1('ONE_MV')
みたいなことを考えたのですが、トリガはコミット前に呼ばれるため、トリガ契機となるトランザクションの更新内容が反映されませんでした。。。
1.TWO_T@DB_2を更新する人(アプリ)でリフレッシュ実行
2.MVをやめて、TWO_T@DB_2のトリガでONE_MV@DB_1(相当のテーブル)へ同期する処理を実装する。
などなどで解決できるとは思うのですが、種々のしがらみにより厳しい状況です。
マテビューの仕組上、On Commitリフレッシュができるので、Oracle上にはコミットを契機としたイベント駆動、みたいな仕組みは存在するんじゃないかな、とか思ってます。
#On Commitの仕組みがどうやって実現されているかとか、本筋とは関係ないですが、興味あります。
環境は、どちらのデータベースもOracle 10g R2です。
何卒よろしくお願いいたします。