Oracle 10g 物化视图-1

近来工作中涉及到了物化视图的概念,特开辟一篇文章来记录从网上学习到的知识点。

物化视图

  1. 企业版/个人版开始支持

需要权限:GRANT CREATE MATERIALIZED VIEW,还必须直接赋予GRANT QUERY REWRITE.为实现查询重写,必须使用CBO.

  1. 物化视图如何工作

2.1 设置

· COMPATIBLE参数必须高于8.1.0

· QUERY_REWRITE_ENABLED = TRUE

· QUERY_REWRITE_INTEGRETY =

ENFORCED - 查询仅用Oracle强制与保证的约束、规则重写;

TRUSTED – 查询除用Oracle强制与保证的约束、规则,也可用用户设定的数据间的任何关系来重写;

STALE_TOLERATED – 即便Oracle知道物化视图中数据过期(与事实表等不同步),也重写查询。

· 创建物化视图的用户必须具有直接赋予的GRANT QUERY REWRITE权限,不能通过角色继承

2.2内部机制

·   全文匹配

·   部分匹配:从FROM子句开始,优化器比较之后的文本,然后比较SELECT列表

·   一般重写方法:

  数据充分

  关联兼容

  分组兼容

  聚集兼容

  1. 确保使用物化视图

3.1约束

  考虑到现实环境的数据量,可以将主键、外键、非空等约束置为NOVALIDATE,并调整QUERY_REWRITE_INTEGRITYTRUSTED,这样可以达到欺骗数据库的目的,但必须注意如果无法保证此类约束的真实有效,查询改写后可能造成结果不精确。

  3.2 维度

  实际就是指明已存在的表中各列的归并关系,从而关联事实表后形成的物化视图可用于向归并(相当于用表中代表更高归并关系的列关联事实表)。标准语法:

CREATE DIMENSION time_hierarchy_dim

LEVEL day IS time_hierarchy.day

LEVEL mmyyyy IS time_hierarchy.mmyyyy

LEVEL yyyy IS time_hierarchy.yyyy

HIERARCHY time_rollup

(day CHILD OF mmyyyy CHILD OF yyyy)

ATTRIBUTE mmyyyy

DETERMINES mon_yyyy;

  1. DBMS_OLAP

  4.1 估计(物化视图)大小

  DBMS_OLAP.ESTIMATE_SUMMARY_SIZE(视图名, 视图定义, 估计行数, 估计字节数);

  其中后两个参数为NUMBER型输出参数。

  4.2 维度有效性检查

  DBMS_OLAP.VALIDATE_DIMENSION(视图名, 用户名, FALSE FALSE);

  SELECT * FROM 维度表名

  WHERE ROWIN IN SEELCT bad_rowid FROM MVIEW$_EXCEPTION);

  所选出行即为不符合维度定义的行。

  4.3 推荐物化视图

  首先必须添加合适的外键,包通过外键来判定表之间的关系而不是维度。

  DBMS_OLAP.RECOMMEND_MV(事实表名, 1000000000 ‘’);

  第二个参数表示物化视图可用的空间大小,可传入一个较大的数。第三个参数传入需要保留的特定物化视图,传入空即为不考虑其他物化视图。

  执行CoracleRDBMSdemosadvdemo后执行:

  DEMO_SUMADV.PRETTYPRINT_RECOMMENDATIONS

  1. 最后说明

  物化视图不为OLTP系统设计

  在事实表等更新时会导致物化视图行锁,从而影响系统并发性。

总结

  1. 修改系统参数,在init.ora里面修改则每次都有效
    alter system set job_queue_processes=20;
    如果这个参数为0,物化视图是不会刷新的
  2. 物化视图基于的主表必须有索引
  3. 查询物化视图的刷新时间:SELECT MM.mview_name,MM.last_refresh_date FROM DBA_MVIEWS MM

[@more@]0

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9673555/viewspace-915262/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9673555/viewspace-915262/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值