问题描述
你好,
对于性能需要,我想使用以下脚本在提交刷新选项上创建一个实体化视图:
Oracle说这是一个复杂的查询,不符合快速刷新的要求,
你能告诉我我打破了哪条规则吗?
谢谢
对于性能需要,我想使用以下脚本在提交刷新选项上创建一个实体化视图:
CREATE TABLE DEVDV (DEVDV_ID INTEGER PRIMARY kEY, DEVDV_SRC_DVISE_ID INTEGER, DEVDV_CIB_DVISE_ID INTEGER); CREATE TABLE CONDV (CONDV_ID INtEgEr PRiMARY KEY, CONDV_DEVDV_iD INTEGER, CONDV_TX NUMbeR, CONDV_DATE_DEB datE, CONDV_DATE_FIN DATE); CREATE MATERIALIZED VIEW LOG ON DEVDV WITH ROWID; CREATE MATERIALIZED VIEW LOG ON CONDV WITH ROWID; CREATE MATERIALIZED VIEW MV_DEVDV_TYP_2 REFRESH FAST ON COMMIT AS SELECT DEVDV.ROWID CROWID, CONDV.ROWID DROWID, DEVDV_ID, 1 AS MARKER, DEVDV_SRC_DVISE_ID, DEVDV_CIB_DVISE_ID, CONDV_TX, CONDV_DATE_DEB, CONDV_DATE_FIN FROM DEVDV INNER JOIN CONDV ON DEVDV_ID = CONDV_DEVDV_ID UNION ALL SELECT DEVDV.ROWID CROWID, CONDV.ROWID DROW_ID, DEVDV_ID, 2 AS MARKER, DEVDV_CIB_DVISE_ID, DEVDV_SRC_DVISE_ID, 1/CONDV_TX, CONDV_DATE_DEB, CONDV_DATE_FIN FROM DEVDV INNER JOIN CONDV ON DEVDV_ID = CONDV_DEVDV_ID;复制
Oracle说这是一个复杂的查询,不符合快速刷新的要求,
你能告诉我我打破了哪条规则吗?
谢谢
专家解答
如果您正在努力进行MV刷新,那么最好的方法是使用DBMS_MVIEW.EXPLAIN_MVIEW过程。
这告诉你为什么各种刷新是不可能的:
并查看文档中的刷新限制https://docs.oracle.com/en/database/oracle/oracle-database/19/dwhsg/basic-materialized-views.html#GUID-505C24CF-5D56-4820-88AA-2221410950E7
这不是特别明显。但是ANSI的加入和具体化的观点仍然存在一些问题。
转换为甲骨文风格,一切都应该很好:
这告诉你为什么各种刷新是不可能的:
CREATE TABLE DEVDV (DEVDV_ID INTEGER PRIMARY kEY, DEVDV_SRC_DVISE_ID INTEGER, DEVDV_CIB_DVISE_ID INTEGER); CREATE TABLE CONDV (CONDV_ID INtEgEr PRiMARY KEY, CONDV_DEVDV_iD INTEGER, CONDV_TX NUMbeR, CONDV_DATE_DEB datE, CONDV_DATE_FIN DATE); CREATE MATERIALIZED VIEW LOG ON DEVDV WITH ROWID; CREATE MATERIALIZED VIEW LOG ON CONDV WITH ROWID; CREATE MATERIALIZED VIEW MV_DEVDV_TYP_2 AS SELECT DEVDV.ROWID CROWID, CONDV.ROWID DROWID, DEVDV_ID, 1 AS MARKER, DEVDV_SRC_DVISE_ID, DEVDV_CIB_DVISE_ID, CONDV_TX, CONDV_DATE_DEB, CONDV_DATE_FIN FROM DEVDV INNER JOIN CONDV ON DEVDV_ID = CONDV_DEVDV_ID UNION ALL SELECT DEVDV.ROWID CROWID, CONDV.ROWID DROW_ID, DEVDV_ID, 2 AS MARKER, DEVDV_CIB_DVISE_ID, DEVDV_SRC_DVISE_ID, 1/CONDV_TX, CONDV_DATE_DEB, CONDV_DATE_FIN FROM DEVDV INNER JOIN CONDV ON DEVDV_ID = CONDV_DEVDV_ID; create table mv_capabilities_table ( statement_id varchar(30) , mvowner varchar(30) , mvname varchar(30) , capability_name varchar(30) , possible character(1) , related_text varchar(2000) , related_num number , msgno integer , msgtxt varchar(2000) , seq number ) ; exec dbms_mview.explain_mview('MV_DEVDV_TYP_2'); select capability_name, possible, msgtxt from MV_CAPABILITIES_TABLE; CAPABILITY_NAME POSSIBLE MSGTXT PCT NREFRESH_COMPLETE Y REFRESH_FAST N REWRITE N REFRESH_FAST_AFTER_INSERT N inline view or subquery in FROM list not supported for this type MV REFRESH_FAST_AFTER_INSERT N some query block in UNION ALL MV is not fast refreshable REFRESH_FAST_AFTER_INSERT N set operator in a context not supported for fast refresh REFRESH_FAST_AFTER_ONETAB_DML N see the reason why REFRESH_FAST_AFTER_INSERT is disabled REFRESH_FAST_AFTER_ANY_DML N see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled REFRESH_FAST_PCT N PCT FAST REFRESH is not possible if query has set operand query blocks REWRITE_FULL_TEXT_MATCH N query rewrite is disabled on the materialized view REWRITE_PARTIAL_TEXT_MATCH N set operator encountered in mv REWRITE_PARTIAL_TEXT_MATCH N query rewrite is disabled on the materialized view REWRITE_GENERAL N set operator encountered in mv REWRITE_GENERAL N the reason why the capability is disabled has escaped analysis REWRITE_GENERAL N query rewrite is disabled on the materialized view REWRITE_PCT N general rewrite is not possible or PCT is not possible on any of the detail tables 复制
并查看文档中的刷新限制https://docs.oracle.com/en/database/oracle/oracle-database/19/dwhsg/basic-materialized-views.html#GUID-505C24CF-5D56-4820-88AA-2221410950E7
这不是特别明显。但是ANSI的加入和具体化的观点仍然存在一些问题。
转换为甲骨文风格,一切都应该很好:
DROP MATERIALIZED VIEW MV_DEVDV_TYP_2; CREATE MATERIALIZED VIEW MV_DEVDV_TYP_2 AS SELECT DEVDV.ROWID CROWID, CONDV.ROWID DROWID, DEVDV_ID, 1 AS MARKER, DEVDV_SRC_DVISE_ID, DEVDV_CIB_DVISE_ID, CONDV_TX, CONDV_DATE_DEB, CONDV_DATE_FIN FROM DEVDV, CONDV where DEVDV_ID = CONDV_DEVDV_ID UNION ALL SELECT DEVDV.ROWID CROWID, CONDV.ROWID DROW_ID, DEVDV_ID, 2 AS MARKER, DEVDV_CIB_DVISE_ID, DEVDV_SRC_DVISE_ID, 1/CONDV_TX, CONDV_DATE_DEB, CONDV_DATE_FIN FROM DEVDV, CONDV where DEVDV_ID = CONDV_DEVDV_ID; truncate table MV_CAPABILITIES_TABLE; exec dbms_mview.explain_mview('MV_DEVDV_TYP_2'); select capability_name, possible, msgtxt from MV_CAPABILITIES_TABLE; CAPABILITY_NAME POSSIBLE MSGTXT PCT NREFRESH_COMPLETE Y REFRESH_FAST Y REWRITE N PCT_TABLE N relation is not a partitioned table PCT_TABLE N relation is not a partitioned table PCT_TABLE N relation is not a partitioned table PCT_TABLE N relation is not a partitioned table REFRESH_FAST_AFTER_INSERT Y REFRESH_FAST_AFTER_ONETAB_DML Y REFRESH_FAST_AFTER_ANY_DML Y REFRESH_FAST_PCT N PCT FAST REFRESH is not possible if query has set operand query blocks REWRITE_FULL_TEXT_MATCH N query rewrite is disabled on the materialized view REWRITE_PARTIAL_TEXT_MATCH N set operator encountered in mv REWRITE_PARTIAL_TEXT_MATCH N query rewrite is disabled on the materialized view REWRITE_GENERAL N set operator encountered in mv REWRITE_GENERAL N query rewrite is disabled on the materialized view REWRITE_PCT N general rewrite is not possible or PCT is not possible on any of the detail tables PCT_TABLE_REWRITE N relation is not a partitioned table PCT_TABLE_REWRITE N relation is not a partitioned table PCT_TABLE_REWRITE N relation is not a partitioned table PCT_TABLE_REWRITE N relation is not a partitioned table 复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
671次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
630次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
539次阅读
2025-04-20 10:07:02
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
487次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
482次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
464次阅读
2025-04-30 12:17:56
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
455次阅读
2025-04-22 00:13:51
火焰图--分析复杂SQL执行计划的利器
听见风的声音
412次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
371次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
349次阅读
2025-05-05 19:28:36