我在主系统 (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 日志属性 (Toad)。
- 这是
all_registered_mviews
看起来的样子。 - MV已同步成功。如果我在外部系统的 WORKORDER 表中创建或更新记录,记录会按 30 秒的计划同步到主系统。
问题:
到目前为止,MV 日志数据似乎没有自动清除:
记录同步后,为什么不自动清除 MV 日志?
尝试将您的 MV 直接基于源表而不是中间视图。在 MV 查询中包含您的“isgis=1”条件。