问题描述
嗨,汤姆,
我试图针对一些定期删除和重新创建的表准备物化视图。在这种情况下,我没有找到自动刷新实体化视图的选项。提交时快速刷新不起作用,开始时间按需刷新也不起作用。您能否建议是否可行,如果可以,如何?如果您能提供帮助,那就太好了!
示例代码:
我试图针对一些定期删除和重新创建的表准备物化视图。在这种情况下,我没有找到自动刷新实体化视图的选项。提交时快速刷新不起作用,开始时间按需刷新也不起作用。您能否建议是否可行,如果可以,如何?如果您能提供帮助,那就太好了!
示例代码:
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,并在这一点上进行任何未完成的更改:
但正如你所说,它不会删除现有的行。
尝试快速刷新它,你会看到为什么:
不支持该操作!问题是截断绕过物化视图日志。所以没有删除条目来告诉数据库发生了什么。
当然,如果您刚刚截断了一个表,那么MV中可能也没有行!所以完整的刷新应该是又好又快。之后你又在路上了:
同样,当您删除并重新创建表格时,您已经切断了MV和表格之间的链接。而且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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




