教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

Oracle物化视图介绍(5)

来源:网络收集 时间:2026-07-18
导读: SQL> select capability_name, possible, msgtxt from mv_capabilities_table 2 where capability_name like 'REFRESH%'; CAPABILITY_NAME P MSGTXT ------------------------------ - ---------------------------

SQL> select capability_name, possible, msgtxt from mv_capabilities_table 2 where capability_name like 'REFRESH%'; CAPABILITY_NAME P MSGTXT

------------------------------ - ------------------------------ REFRESH_COMPLETE Y REFRESH_FAST N

REFRESH_FAST_AFTER_INSERT N agg(expr) 需要相应的 SUM(expr) 函数

REFRESH_FAST_AFTER_ONETAB_DML N 查看禁用 REFRESH_FAST_AFTER_INSERT 的原因 REFRESH_FAST_AFTER_ANY_DML N 查看禁用 REFRESH_FAST_AFTER_ONETAB_DML 的原因 REFRESH_FAST_PCT N PCT 不可能在实体化视图中的任何从表上 已选择6行。

7.SELECT列表中必须包括所有的GROUP BY列;

SQL> create materialized view mv_fact_err refresh fast on commit as 2 select count(*) count, count(num) count_num 3 from fact group by aid; from fact group by aid *

ERROR 位于第 3 行:

ORA-12054: 无法为实体化视图设置 ON COMMIT 刷新属性

SQL> create materialized view mv_fact_err refresh fast as 2 select count(*) count, count(num) count_num 3 from fact group by aid; from fact group by aid *

ERROR 位于第 3 行:

ORA-12015: 不能从复杂查询中创建一个可快速刷新的实体化视图

SQL> truncate table mv_capabilities_table; 表已截掉。 SQL> begin

2 dbms_mview.explain_mview('select count(*) count, count(num) count_num 3 from fact group by aid'); 4 end; 5 /

PL/SQL 过程已成功完成。

SQL> select capability_name, possible, msgtxt from mv_capabilities_table 2 where capability_name like 'REFRESH%'; CAPABILITY_NAME P MSGTXT

------------------------------ - ----------------------------- REFRESH_COMPLETE Y REFRESH_FAST N

REFRESH_FAST_AFTER_INSERT N 实体化视图至少忽略了选择列表中的一个分组关键字 REFRESH_FAST_AFTER_ONETAB_DML N 查看禁用 REFRESH_FAST_AFTER_INSERT 的原因

REFRESH_FAST_AFTER_ANY_DML N 查看禁用 REFRESH_FAST_AFTER_ONETAB_DML 的原因 REFRESH_FAST_PCT N PCT 不可能在实体化视图中的任何从表上 已选择6行。

8.当物化视图属于下面的某种情况,则快速刷新只支持常规DML插入和直接装载,这种类型的物化视图又称为INSERT-ONLY物化视图;

物化视图包含MIN或MAX聚集函数;

物化视图包含SUM(expr),但是没有包括COUNT(expr); 物化视图没有包含COUNT(*)。

SQL> create materialized view mv_fact_err refresh fast on commit as 2 select aid, count(*) count, count(num) count_num, max(num) max_num 3 from fact group by aid; 实体化视图已创建。

SQL> SELECT * FROM MV_FACT_ERR; AID COUNT COUNT_NUM MAX_NUM

---------- ---------- ---------- ---------- 1 8 8 96 2 8 8 86 3 8 8 88 4 8 8 90 5 8 8 92 6 8 8 94 已选择6行。

SQL> INSERT INTO FACT VALUES (101, 2, 1, 100); 已创建 1 行。 SQL> COMMIT; 提交完成。

SQL> SELECT * FROM MV_FACT_ERR; AID COUNT COUNT_NUM MAX_NUM

---------- ---------- ---------- ---------- 1 8 8 96 2 9 9 100 3 8 8 88 4 8 8 90 5 8 8 92 6 8 8 94 已选择6行。

SQL> DELETE FACT WHERE ID = 101; 已删除 1 行。 SQL> COMMIT; 提交完成。

SQL> SELECT * FROM MV_FACT_ERR; AID COUNT COUNT_NUM MAX_NUM

---------- ---------- ---------- ---------- 1 8 8 96

3 8 8 88 4 8 8 90 5 8 8 92 6 8 8 94 2 8 8 86 已选择6行。

SQL> UPDATE FACT SET NUM = 95 WHERE NUM = 96; 已更新 1 行。 SQL> COMMIT; 提交完成。

SQL> SELECT * FROM MV_FACT_ERR; AID COUNT COUNT_NUM MAX_NUM

---------- ---------- ---------- ---------- 3 8 8 88 4 8 8 90 5 8 8 92 6 8 8 94 2 8 8 86 1 8 8 95 已选择6行。

SQL> truncate table mv_capabilities_table; 表已截掉。 SQL> begin

2 dbms_mview.explain_mview('select aid, count(*) count, count(num) count_num, max(num) max_num

3 from fact group by aid'); 4 end; 5 /

PL/SQL 过程已成功完成。

SQL> select capability_name, possible, msgtxt from mv_capabilities_table 2 where capability_name like 'REFRESH%'; CAPABILITY_NAME P MSGTXT

------------------------------ - ------------------------------ REFRESH_COMPLETE Y REFRESH_FAST Y

REFRESH_FAST_AFTER_INSERT Y

REFRESH_FAST_AFTER_ONETAB_DML N 实体化视图使用了 MIN 或 MAX 聚集函数

REFRESH_FAST_AFTER_ANY_DML N 查看禁用 REFRESH_FAST_AFTER_ONETAB_DML 的原因 REFRESH_FAST_PCT N PCT 不可能在实体化视图中的任何从表上 已选择6行。

根据测试的结果,发现Oracle的文档描述有些问题,MAX和MIN聚集函数是支持单表DML操作的快速刷新的。EXPLAIN_MVIEW过程给出的解释也不完全正确。下面看看包含连接的情况。

SQL> create materialized view mv_fact_err2 refresh fast on commit as 2 select name, count(*) count, count(num) count_num, max(num) max_num 3 from fact, dim_a where aid = dim_a.id group by name; 实体化视图已创建。

SQL> select * from mv_fact_err2; NAME COUNT COUNT_NUM MAX_NUM

------------------------------ ---------- ---------- ---------- a1 8 8 95a2 8 8 86a3 8 8 88a4 8 8 90a5 8 8 92a6 8 8 94 已选择6行。

SQL> insert into fact values (101, 1, 1, 100); 已创建 1 行。 SQL> commit; 提交完成。

SQL> select * from mv_fact_err2; NAME COUNT COUNT_NUM MAX_NUM

------------------------------ ---------- ---------- ---------- a1 9 9 100a2 8 8 86a3 8 8 88a4 8 8 90a5 8 8 92a6 8 8 94 已选择6行。

SQL> delete fact where id = 101; 已删除 1 行。 SQL> commit; 提交完成。

SQL> select * from mv_fact_err2; NAME COUNT COUNT_NUM MAX_NUM

------------------------------ ---------- ---------- ---------- a1 9 9 100a2 8 8 86a3 8 8 88a4 8 8 90a5 8 8 92a6 8 8 94 已选择6行。

由此可见,MAX和MIN函数支持只包含聚集不包含连接的物化视图的快速刷新。这种刷新对任意DML操作有效。如果物化视图包含多表连接,则只支持INSERT操作,其他DML操作将导致物化视图的快速刷新失败。

第二、三点前面的测试已经描述过了。

9.如果包含inline views、outer joins、self joins或grouping set,则兼容性的设置必须在9.0以上;

SQL> drop materialized view mv_fact_err2; 实体化视图已删除。

SQL> drop materialized view mv_fact; 实体化视图已删除。

SQL> drop materialized view mv_fact_err; 实体化视图已删除。

SQL> drop materialized view log on fact; 实体化视图日志已删除。

SQL> create materialized view log on fact with rowid, sequence (id, aid, bid, num) 2 includin …… 此处隐藏:4615字,全部文档内容请下载后查看。喜欢就下载吧 ……

Oracle物化视图介绍(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/442975.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)