我想通过 dblink 在主系统(Oracle 18c)和外部系统(Oracle 19c)之间创建一个物化视图。
- MV 将按 30 秒的计划刷新(因为通过 dblink 无法进行 on-commit)。
- 外部系统中的表没有主键。
我是新手。这是我尝试过的:
--in the external system:
create materialized view log on external_system.workorder with rowid;
--in the primary system:
create materialized view primary_system.workorder_mv
build immediate
refresh fast
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
当我尝试上述方法时,我收到一连串错误,从一个说我需要主键的错误开始。
我发现一个页面表明可以通过 dblink 进行快速刷新。但该示例使用主键,而不是 rowid。
文档说:
在主表重组后,在执行完全刷新之前,Rowid 物化视图不符合快速刷新的条件。
但我真的不知道那是什么意思。老实说,我对此很陌生,我知道我找错了树,所以我会停在那里。
问题:
是否可以通过没有 PK 的表上的 dblink 创建快速刷新 MV?
正如您在另一个问题中已经证明的那样,列上的唯一约束
NOT NULL
足以创建具有“PK”值的 mview 日志。这可用于快速刷新。然后: