【问题标题】:Create new materialized view without the materialized view log being purged创建新的物化视图而不清除物化视图日志
【发布时间】:2012-11-16 13:16:32
【问题描述】:

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

id 喜欢执行的步骤:

  1. 在新数据库上创建表。
  2. 在旧 db 表上创建 mv 日志。
  3. 将旧数据库中的数据导入新数据库。
  4. 在 prebuild table 上的新 db 上创建物化视图,并从创建 mv 日志时开始刷新它。

问题是在创建物化视图的那一刻,旧表上的 mv 日志被清除。

旧数据库: 创建表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.

新数据库: 创建表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.

有什么建议吗?

【问题讨论】:

    标签: oracle oracle11g materialized-views


    【解决方案1】:

    当你用REFRESH标签创建新的MATERIALIZED VIEW时,日志表正在清除,因为我们的视图实际上是在创建之后。

    CREATE MATERIALIZED VIEW kvrtest 
    ON PREBUILT TABLE WITHOUT REDUCED PRECISION
    USING INDEX
    REFRESH FORCE ON DEMAND
    AS 
    

    如果不想清除日志表,请使用 NEVER REFRESH,然后更改为 REFRESH ON DEMAND,如下所示:

    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;
    

    然后在刷新视图日志表后将再次清除。

    【讨论】:

    • 太棒了!完美的答案。我只需要强制刷新,快速没有工作。 dbms_snapshot.refresh(list => 'kvrtest', method => '?', parallelism => 2);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2020-04-22
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多