Skip to Main Content

Japanese

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

マスタ表以外のテーブルへのコミットを契機にしたマテリアライズドビューのリフレッシュ

u-enoMay 19 2014 — edited May 21 2014

はじめまして。

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です。

何卒よろしくお願いいたします。

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jun 18 2014
Added on May 19 2014
5 comments
2,898 views