0

次のような構文を使用して、リモート データベースに高速更新 MV を作成しました。

CREATE MATERIALIZED VIEW  MV_TAB1 
REFRESH FAST WITH PRIMARY KEY 
START WITH SYSDATE NEXT SYSDATE+(5/1440) /* 5 MINUTES */ 
FOR UPDATE AS 
SELECT * FROM TAB1@SOURCE_DB;

MV_TAB1が作成されたリモート データベースで、を更新しMV_TAB1、更新後も更新を維持することは可能ですか? 私のテストでは、更新のたびに更新MV_TAB1がなくなっていることが示されています。このローカル更新を保持する方法はありますか? はいの場合、どのように?

ありがとう、アモス

4

1 に答える 1

0

MV_TAB1 は TAB1@SOURCE_DB のイメージなので、TAB1 のように同じ時間で TAB1 とは別の時間に持つことはできません。

宛先テーブルのいくつかの行を更新してからソースでそれらを更新すると、更新によってそれらが上書きされます。ソースでそれらを更新しない場合、更新を高速に使用する場合にのみ更新されたままになります。更新が完了すると、リモート テーブルが削除/切り捨てられ、すべての行が再挿入されます。

更新:リモートテーブルの更新を更新よりも優先したい場合は、いくつかのトリックを行うことができます:

1)MVをそのままにして、同じDDLを持つ姉妹テーブルで更新(および挿入)を行います。クエリは、MV の代わりに、次のような両方のテーブルを使用します。

select nvl(a.key, b.key), decode(a.key, null, b.col, a.col)
from tab1_sister a 
full join mv_tab1 b on (a.key = b.key);

2) MV_TAB1 に列を追加し (キーを除いて複製します)、それらの列を更新します (MV が事前に作成されたテーブルである必要がある可能性があります)。追加の列が完成している場合はそれらを使用し、それ以外の場合は、更新によって更新された元の列を使用します。

于 2013-01-03T06:52:14.083 に答える