Oracle 在不清除物化视图日志的情况下创建新的物化视图

Oracle 在不清除物化视图日志的情况下创建新的物化视图,oracle,oracle11g,materialized-views,Oracle,Oracle11g,Materialized Views,我想在预构建的表上使用物化视图来在迁移之前保持表的同步。数据不断变化,因此需要跟踪导出开始和导入完成之间的变化。不用说,这个表很大,所以完全刷新太慢了 我要执行的步骤: 在新数据库上创建表 在旧数据库表上创建mv日志 将数据从旧数据库导入新数据库 在预构建表上的新db上创建物化视图,并从创建mv日志时开始刷新它 问题是,在创建物化视图的那一刻,旧表上的mv日志就被清除了 旧数据库: 创建表kvrtest(id号、类别号) 新数据库: 创建表kvrtest(id号、类别号) 此时,mv日志被清除

我想在预构建的表上使用物化视图来在迁移之前保持表的同步。数据不断变化,因此需要跟踪导出开始和导入完成之间的变化。不用说,这个表很大,所以完全刷新太慢了

我要执行的步骤:

  • 在新数据库上创建表
  • 在旧数据库表上创建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;