我想在预建表上使用物化视图,以便在迁移之前保持表同步 . 数据不断变化,因此需要跟踪导出开始和导入完成之间的变化 . 不言而喻, table 很大,所以完全刷新太慢了 .
步骤id喜欢执行:
-
在新数据库上创建表 .
-
在旧db表上创建mv日志 .
-
将旧数据库中的数据导入新数据库 .
-
在prebuild表上的新数据库上创建物化视图,并从创建mv日志时的点开始刷新它 .
问题是,在创建实体化视图的那一刻,将清除旧表上的mv日志 .
旧DB:创建表kvrtest(id号,cat号);
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(id号,cat号);
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 kvrtest@oldDb;
此时清除mv日志
select * from MLOG$_KVRTEST; --Yields 0, a fast refresh from here does not catch these records.
有什么建议?
1 回答
当您使用REFRESH标记创建新的MATERIALIZED VIEW时,日志表正在清除,因为我们的视图实际上是在创建之后 .
如果不想清除您的日志表使用NEVER REFRESH然后更改为REFRESH ON DEMAND,如下所示:
让我们看看我们的日志表
我们有两排,真好!然后
然后刷新视图日志表将再次清除 .