暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 在基本表上DDL的情况下,实体化视图刷新,如截断、删除和重新创建

askTom 2018-03-27
284

问题描述

嗨,汤姆,

我试图针对一些定期删除和重新创建的表准备物化视图。在这种情况下,我没有找到自动刷新实体化视图的选项。提交时快速刷新不起作用,开始时间按需刷新也不起作用。您能否建议是否可行,如果可以,如何?如果您能提供帮助,那就太好了!

示例代码:

CREATE TABLE test_table (ID VARCHAR2(20) PRIMARY KEY);

INSERT INTO test_table VALUES ('1');
INSERT INTO test_table VALUES ('2');
INSERT INTO test_table VALUES ('3');

COMMIT;

CREATE MATERIALIZED VIEW LOG ON test_table;

CREATE MATERIALIZED VIEW test_table_mv
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT * FROM test_table;

SELECT * FROM test_table_mv; --3 rows selected

TRUNCATE TABLE test_table;

SELECT * FROM test_table_mv;  --again 3 rows selected
复制


专家解答

那么,截断将刷新MV,并在这一点上进行任何未完成的更改:

CREATE TABLE test_table (ID VARCHAR2(20) PRIMARY KEY);

INSERT INTO test_table VALUES ('1');
INSERT INTO test_table VALUES ('2');
INSERT INTO test_table VALUES ('3');

COMMIT;

CREATE MATERIALIZED VIEW LOG ON test_table;

CREATE MATERIALIZED VIEW test_table_mv
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT * FROM test_table;

SELECT * FROM test_table_mv;

ID   
1    
2    
3 

insert into test_table values (4);

TRUNCATE TABLE test_table;

SELECT * FROM test_table_mv; 

ID   
1    
2    
3    
4   
复制


但正如你所说,它不会删除现有的行。

尝试快速刷新它,你会看到为什么:

exec dbms_mview.refresh('test_table_mv', 'F');

ORA-32321: REFRESH FAST of "CHRIS"."TEST_TABLE_MV" unsupported after detail table TRUNCATE
复制


不支持该操作!问题是截断绕过物化视图日志。所以没有删除条目来告诉数据库发生了什么。

当然,如果您刚刚截断了一个表,那么MV中可能也没有行!所以完整的刷新应该是又好又快。之后你又在路上了:

exec dbms_mview.refresh('test_table_mv', 'C');
insert into test_table values (5);
commit;

select * from test_table_mv;

ID   
5   
复制


同样,当您删除并重新创建表格时,您已经切断了MV和表格之间的链接。而且MV日志也不见了!

尽管再一次,你所需要的只是一次完整的刷新才能恢复行动:

drop table test_table cascade constraints purge;
CREATE TABLE test_table (ID VARCHAR2(20) PRIMARY KEY);
CREATE MATERIALIZED VIEW LOG ON test_table;

exec dbms_mview.refresh('test_table_mv', 'C');
insert into test_table values (6);
commit;

select * from test_table_mv;

ID   
6 
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论