设为首页 收藏本站
查看: 666|回复: 0

[经验分享] Oracle 物化视图 详细错误描述 查看方法

[复制链接]

尚未签到

发表于 2016-8-6 19:18:27 | 显示全部楼层 |阅读模式
  
  Oracle的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。关于物化视图相关的说明参考:
  
  Oracle 物化视图
  http://blog.csdn.net/tianlesoftware/article/details/4713553
  
  Oracle 物化视图 快速刷新 限制 说明
  http://blog.csdn.net/tianlesoftware/article/details/7719679
  
  在我们创建物化视图失败时,Oracle给的错误信息过于简单,不能帮助我们定位具体的问题,Oracle 为此提供了dbms_mview.explain_mview过程帮助我们快速定位问题的原因。
  
一.EXPLAIN_MVIEW说明
  使用explain_mview过程先要建立mv_capabilities_table表,建表的脚步是$oracle_home/rdbms/admin/utlxmv.sql。(explain_mview过程是两个过程的重载,一个输出到mv_capabilities_table表,另一个以pl/sql的varray格式输出)。
  
  SQL>@?/rdbms/admin/utlxmv.sql
  Table created.
  
  查看utlxmv.sql 脚本,可以看到mv_capabilities_tables 表的定义:
  
  CREATETABLEMV_CAPABILITIES_TABLE
   (STATEMENT_ID VARCHAR(30),--Client-supplied unique statement identifier
   MVOWNER VARCHAR(30),-- NULLfor SELECT based EXPLAIN_MVIEW
   MVNAME VARCHAR(30),-- NULLfor SELECT based EXPLAIN_MVIEW
   CAPABILITY_NAME VARCHAR(30), -- A descriptivename of the particular
  --capability:
  --REWRITE
  -- Can do at least full text match
  -- rewrite
  --REWRITE_PARTIAL_TEXT_MATCH
   -- Can do at leat full and partial
  -- text match rewrite
  --REWRITE_GENERAL
  -- Can do all forms of rewrite
   -- REFRESH
  -- Can do at least complete refresh
  --REFRESH_FROM_LOG_AFTER_INSERT
  -- Can do fast refresh from an mv log
  -- or change capture table at least
  -- when update operations are
  -- restricted to INSERT
  --REFRESH_FROM_LOG_AFTER_ANY
  -- can do fast refresh from an mv log
  -- or change capture table after any
   --combination of updates
  -- PCT
  -- Can do Enhanced Update Tracking on
  -- the table named in the RELATED_NAME
   --column. EUT is needed for fast
  -- refresh after partitioned
  -- maintenance operations on the table
  -- named in the RELATED_NAME column
  -- and to do non-stale tolerated
  -- rewrite when the mv is partially
  -- stale with respect to the table
  -- named in the RELATED_NAME column.
  -- EUT can also sometimes enable fast
  -- refresh of updates to the table
   --named in the RELATED_NAME column
  -- when fast refresh from an mv log
  -- or change capture table is not
  -- possilbe.
  POSSIBLE CHARACTER(1), -- T = capabilityis possible
  -- F =capability is not possible
   RELATED_TEXT VARCHAR(2000),-- Owner.table.column, alias name,etc.
  -- related to this message. The
  --specific meaning of this column
  --depends on the MSGNO column. See
  -- thedocumentation for
  --DBMS_MVIEW.EXPLAIN_MVIEW() for details
   RELATED_NUM NUMBER, -- When there is a numeric value
  --associated with a row, it goes here.
   -- The specific meaning of thiscolumn
  --depends on the MSGNO column. See
  -- thedocumentation for
  --DBMS_MVIEW.EXPLAIN_MVIEW() for details
   MSGNO INTEGER, -- When available, QSM message #
  --explaining why not possible or more
  --details when enabled.
   MSGTXT VARCHAR(2000),-- Text associated with MSGNO.
   SEQ NUMBER);
   -- Useful in ORDERBY clause when
  --selecting from this table.
  
  
二.Explain_mview 使用示例
  
  dbms_mview.explain_mview能分析三种不同的物化视图代码,分别是:
  1.定义的查询
  2.一个create materialized view的语句
  3.一个存在的物化视图
  
  因为物化视图在语法有一定的限制,所以在创建物化视图之前我们可以先使用explain_mview 过程来验证一下语法上的问题。如:
  
  SQL> execdbms_mview.explain_mview('select * from dave');
  PL/SQL proceduresuccessfully completed.
  
  --然后查看mv_capabilities_table 表:
  
  SQL> desc mv_capabilities_table
  Name
  ---------------------------------
  STATEMENT_ID
  MVOWNER
  MVNAME
  CAPABILITY_NAME
  POSSIBLE
  RELATED_TEXT
  RELATED_NUM
  MSGNO
  MSGTXT
  SEQ
  
  SQL> selectcapability_name,possible,msgtxt from mv_capabilities_table;
  
  CAPABILITY_NAME P MSGTXT
  ------------------------------ ------------------------------------------------------------------------------------
  PCT N
  REFRESH_COMPLETE N no primary key constraint inthe master table
  --这里提示我们主表没有主键,
  REFRESH_FAST N
  REWRITE N
  PCT_TABLE N Oracle error: seeRELATED_NUM and RELATED_TEXT for details
  REFRESH_FAST_AFTER_INSERT N the detail table does not have amaterialized view log
  REFRESH_FAST_AFTER_ONETAB_DML N see the reason why REFRESH_FAST_AFTER_INSERTis disabled
  REFRESH_FAST_AFTER_ANY_DML N see the reason whyREFRESH_FAST_AFTER_ONETAB_DML is disabled
  REFRESH_FAST_PCT N PCT is not possible on any ofthe detail tables in the materialized view
  REWRITE_FULL_TEXT_MATCH NOracle error: see RELATED_NUM and RELATED_TEXT for details
  REWRITE_PARTIAL_TEXT_MATCH N materialized view cannot support anytype of query rewrite
  REWRITE_GENERAL N materialized view cannotsupport any type of query rewrite
  REWRITE_PCT N general rewrite is notpossible or PCT is not possible on any of the detail tables
  PCT_TABLE_REWRITE N Oracle error: see RELATED_NUMand RELATED_TEXT for details
  --这里会显示所有不符合的地方。
  
  
  SQL> create materialized view mv_daverefresh fast on demand as select * from dave;
  create materialized view mv_dave refreshfast on demand as select * from dave
  *
  ERROR at line 1:
  ORA-12014: 表 'DAVE' 不包含主键约束条件
  --如果我们直接使用上面的语句,就会出现没有主键的错误。
  
  
  我们创建一个新的物化视图,然后使用explain_mview 来验证:
  SQL> create table anqing as select *from all_users;
  Table created.
  
  
  SQL> create materialized view mv_daverefresh force on demand as select * from anqing;
  Materialized view created.
  
  SQL> exec dbms_mview.explain_mview('mv_dave');
  PL/SQL procedure successfully completed.
  
  SQL> selectcapability_name,possible,msgtxt from mv_capabilities_table wheremvname='MV_DAVE';
  
  CAPABILITY_NAME P MSGTXT
  ------------------------------ -----------------------------------------------------------------------------------
  PCT N
  REFRESH_COMPLETE Y
  REFRESH_FAST N
  REWRITE N
  PCT_TABLE N Oracle error: seeRELATED_NUM and RELATED_TEXT for details
  REFRESH_FAST_AFTER_INSERT N does not meet the requirements of aprimary key mv
  REFRESH_FAST_AFTER_ONETAB_DML N see the reason whyREFRESH_FAST_AFTER_INSERT is disabled
  REFRESH_FAST_AFTER_ANY_DML N see the reason whyREFRESH_FAST_AFTER_ONETAB_DML is disabled
  REFRESH_FAST_PCT N PCT is not possible on any ofthe detail tables in the materialized view
  REWRITE_FULL_TEXT_MATCH N Oracle error: see RELATED_NUM andRELATED_TEXT for details
  REWRITE_FULL_TEXT_MATCH N query rewrite is disabled on thematerialized view
  REWRITE_PARTIAL_TEXT_MATCH N materialized view cannot support anytype of query rewrite
  REWRITE_PARTIAL_TEXT_MATCH N query rewrite is disabled on thematerialized view
  REWRITE_GENERAL N materialized view cannotsupport any type of query rewrite
  REWRITE_GENERAL N query rewrite is disabled onthe materialized view
  REWRITE_PCT N general rewrite is not possible or PCT isnot possible on any of the detail tables
  PCT_TABLE_REWRITE N Oracle error: see RELATED_NUMand RELATED_TEXT for details
  
  17 rows selected.
  
  --这里就ok了。
  
  
  
  
  -------------------------------------------------------------------------------------------------------
  版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
  Skype:  tianlesoftware
  QQ: tianlesoftware@gmail.com
  Email:  tianlesoftware@gmail.com
  Blog: http://www.tianlesoftware.com
  Weibo:  http://weibo.com/tianlesoftware
  Twitter: http://twitter.com/tianlesoftware
  Facebook: http://www.facebook.com/tianlesoftware
  Linkedin: http://cn.linkedin.com/in/tianlesoftware
  
  
  -------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请----
  DBA1 群:62697716(满); DBA2 群:62697977(满)DBA3 群:62697850(满)
  DBA 超级群:63306533(满); DBA4 群:83829929 DBA5群: 142216823
  DBA6 群:158654907 DBA7 群:172855474 DBA总群:104207940

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253875-1-1.html 上篇帖子: oracle内置IO测试包dbms_resource_manager.CALIBRATE_IO 下篇帖子: Oracle SQLID 与 Hash_value 之间的相互转化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表