5

DB_A と DB_B という 2 つの Oracle データベースがあるとします。マテリアライズド ビュー ログを含む DB_A には TAB1 という名前のテーブルがあり、DB_B には SNAP_TAB1 という名前のマテリアライズド ビューが作成されています。

CREATE SNAPSHOT SNAP_TAB1
REFRESH FAST
AS SELECT * FROM TAB1@DB_A;

マテリアライズド ビューを高速リフレッシュするたびに SNAP_TAB1 に加えられた変更を DB_B でクエリする方法はありますか?

DBMS_SNAPSHOT.REFRESH( 'SNAP_TAB1', 'F' );

DB_Aでは、リフレッシュの前に、マテリアライズド・ビュー・ログ表MLOG$_TAB1を問い合せて、TAB1で変更された行を確認できます。SNAP_TAB1 で更新された行を更新するたびに、DB_B でクエリを実行する方法を探しています。

ありがとう!

4

1 に答える 1

1

以下の行は、事前に作成されたテーブルで機能すると思います。

表に列を追加できますSNAP_TAB1

挿入default sysdateの場合 => 挿入ごとに、挿入のタイムスタンプを取得できます。

更新には、トリガーを使用できます。列はマテリアライズド ビューに含まれていないため、トリガーを使用して列を更新しても問題はありません。

おそらく良いでしょう。トリガーを使用すると、一意の ID を使用してその列に格納し、新しい更新のたびにインクリメントできます。(一意の ID を取得するには、異なるアプローチが必要になる場合があります。)

明らかに、この考え方では削除を追跡できません。

于 2012-01-25T13:11:15.063 に答える