Oracle 在不清除物化视图日志的情况下创建新的物化视图
我想在预构建的表上使用物化视图来在迁移之前保持表的同步。数据不断变化,因此需要跟踪导出开始和导入完成之间的变化。不用说,这个表很大,所以完全刷新太慢了 我要执行的步骤:Oracle 在不清除物化视图日志的情况下创建新的物化视图,oracle,oracle11g,materialized-views,Oracle,Oracle11g,Materialized Views,我想在预构建的表上使用物化视图来在迁移之前保持表的同步。数据不断变化,因此需要跟踪导出开始和导入完成之间的变化。不用说,这个表很大,所以完全刷新太慢了 我要执行的步骤: 在新数据库上创建表 在旧数据库表上创建mv日志 将数据从旧数据库导入新数据库 在预构建表上的新db上创建物化视图,并从创建mv日志时开始刷新它 问题是,在创建物化视图的那一刻,旧表上的mv日志就被清除了 旧数据库: 创建表kvrtest(id号、类别号) 新数据库: 创建表kvrtest(id号、类别号) 此时,mv日志被清除
select * from MLOG$_KVRTEST; --Yields 0, a fast refresh from here does not catch these records.
有什么建议吗?当您使用刷新标记创建新的物化视图时,日志表被清除,因为我们的视图实际上是在创建之后
CREATE MATERIALIZED VIEW kvrtest
ON PREBUILT TABLE WITHOUT REDUCED PRECISION
USING INDEX
REFRESH FORCE ON DEMAND
AS
如果不想清除日志表,请使用“从不刷新”,然后更改为按需刷新,如下所示:
CREATE MATERIALIZED VIEW kvrtest
ON PREBUILT TABLE WITHOUT REDUCED PRECISION
USING INDEX
NEVER REFRESH
AS
select * from kvrtest@oldDb;
让我们看看我们的日志表
select * from MLOG$_KVRTEST;
我们有两排,很好!然后
ALTER MATERIALIZED VIEW kvrtest
REFRESH ON DEMAND;
刷新后,视图日志表将再次清除。Brilliant!完美答案。我只是做了一次强制刷新,fast不起作用<代码>dbms_snapshot.refresh(列表=>'kvrtest',方法=>'?',并行性=>2)代码>
select * from MLOG$_KVRTEST;
ALTER MATERIALIZED VIEW kvrtest
REFRESH ON DEMAND;