问题描述
嗨,汤姆,
我试图针对一些定期删除和重新创建的表准备物化视图。在这种情况下,我没有找到自动刷新实体化视图的选项。提交时快速刷新不起作用,开始时间按需刷新也不起作用。您能否建议是否可行,如果可以,如何?如果您能提供帮助,那就太好了!
示例代码:
我试图针对一些定期删除和重新创建的表准备物化视图。在这种情况下,我没有找到自动刷新实体化视图的选项。提交时快速刷新不起作用,开始时间按需刷新也不起作用。您能否建议是否可行,如果可以,如何?如果您能提供帮助,那就太好了!
示例代码:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
597次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
569次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
486次阅读
2025-04-08 09:12:48
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
474次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
458次阅读
2025-04-22 00:20:37
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
433次阅读
2025-04-22 00:13:51
Oracle 19c RAC更换IP实战,运维必看!
szrsu
433次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
418次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
362次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
358次阅读
2025-04-15 14:48:05