4
我想在预建表上使用物化视图在迁移前保持表同步。数据不断变化,因此需要跟踪导出开始和导入完成之间的变化。毫无疑问,桌子很大,所以完全刷新太慢了。创建新的物化视图没有清除物化视图日志
步骤ID等来执行:
- 新的数据库创建表。
- 在旧的数据库表上创建mv日志。
- 从旧数据库导入数据到新数据库。
- 在prebuild表上的新数据库上创建物化视图,并在创建mv日志时继续刷新它。
问题是创建物化视图的时刻清除了旧表上的mv日志。
Old DB: create table kvrtest(id number,cat number);
alter table kvrtest add (constraint pkkvrtest primary key (id) using index);
insert into kvrtest (id, cat) values (1, 1);
commit;
CREATE MATERIALIZED VIEW LOG ON kvrtest WITH PRIMARY KEY;
insert into kvrtest (id, cat) values (2, 1);
insert into kvrtest (id, cat) values (3, 2);
commit;
select * from MLOG$_KVRTEST; --Yields 2, these should be caught by a fast refresh.
新DB: 创建表kvrtest(身份证号码,猫号);
alter table kvrtest add (constraint pkkvrtest primary key (id) using index);
insert into kvrtest (id, cat) values (1, 1); --Simulate import.
commit;
CREATE MATERIALIZED VIEW kvrtest
ON PREBUILT TABLE WITHOUT REDUCED PRECISION
USING INDEX
REFRESH FORCE ON DEMAND
AS
select * from [email protected];
此时MV日志清除
select * from MLOG$_KVRTEST; --Yields 0, a fast refresh from here does not catch these records.
有什么建议?
太棒了!完美的答案。我只需要做一次强制刷新,快速无法工作。 'dbms_snapshot.refresh(list =>'kvrtest',method =>'?',parallelism => 2);' – kon5ad