加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 创建新的物化视图,而不清除物化视图日志

发布时间:2021-01-16 08:18:43 所属栏目:站长百科 来源:网络整理
导读:我想在预建表上使用物化视图,以便在迁移之前保持表同步.数据不断变化,因此需要跟踪导出开始和导入完成之间的变化.不言而喻,桌子很大,所以完全刷新太慢了. 步骤id喜欢执行: 在新数据库上创建表. 在旧的db表上创建mv日志. 将旧数据库中的数据导入新数据库. 在

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

步骤id喜欢执行:

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

问题是,在创建实体化视图的那一刻,将清除旧表上的mv日志.

老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.

新数据库:
????create table kvrtest(id number,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.

有什么建议?

解决方法

当您使用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;

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

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!