Oracle

物化視圖未清除(通過視圖通過 dblink)

  • December 2, 2020

我在主系統 (Oracle 18c) 和外部系統 (Oracle 19c) 之間創建了一個物化視圖:

create materialized view primary_system.workorder_mv
build immediate 
refresh force 
on demand 
start with sysdate next sysdate + (30/(60*60*24))
as
select
   cast(workorderid as number(38,0)) as objectid,
   wonum,
   status,
   --other fields
   longitudex,
   latitudey
from
   external_system.workorder_vw@gistomax --view in external system that is served up by dblink (gistomax)
   --the view looks like this: select * from workorder where isgis=1


create materialized view log on external_system.workorder with rowid;  

文件說物化視圖應該自動清除:

Oracle 在物化視圖刷新期間自動跟踪物化視圖日誌中的哪些行已被使用,並從日誌中清除這些 行,以使日誌不會無休止地增長。因為多個簡單的物化視圖可以使用相同的物化視圖日誌,所以可能仍然需要已經用於刷新一個物化視圖的行來刷新另一個物化視圖。在所有物化視圖都使用它們之前,Oracle 不會從日誌中刪除行。


問題:

到目前為止,MV 日誌數據似乎沒有自動清除:

在此處輸入圖像描述

記錄同步後,為什麼不自動清除 MV 日誌?

嘗試將您的 MV 直接基於源表而不是中間視圖。在 MV 查詢中包含您的“isgis=1”條件。

create materialized view primary_system.workorder_mv
build immediate 
refresh force 
on demand 
start with sysdate next sysdate + (30/(60*60*24))
as
select
   cast(workorderid as number(38,0)) as objectid,
   wonum,
   status,
   --other fields
   longitudex,
   latitudey
from
   external_system.workorder@gistomax
   where isgis=1

引用自:https://dba.stackexchange.com/questions/280602