【#第一文档网# 导语】以下是®第一文档网的小编为您整理的《ORACLE 实体化视图学习随笔》,欢迎阅读!

ORACLE物化视图
MView中文名称为物化视图(Materialized View),相对于不同的视图来说,MView的不同之处在于MView的结果会保存在一个
普通的数据表中,在对MView进行查询的时候不再会对创建MView的基表进行查询,而是直接查询MView对应的结果表,然后通过定 期的刷新机制来更新MView表中的数据。
MView在实际中的主要作用: 1、减轻网络负担:通过MV将数据从一个数据库分发到多个不同的数据库上,通过对多个数据库访问来减轻对单个数据库的网络负担。 2、搭建分发环境:通过从一个中央数据库将数据分发到多个节点数据库,达到分发数据的目的。 3、复制数据子集:MV可以进行行级/列级的筛选,这样可以复制需要的那一部分数据。 4、支持离线计算:MV不需要专用的数据库连接,用户可以按照自己的需求来复制所需要的那一部分数据。
MView的刷新
Oracle支持三种种方式的刷新:完全刷新和快速刷新以及强制刷新。
完全刷新(complete refresh) 对一个MView进行全部刷新的时候差不多是将MView重建了,在进行MView全部刷新的时候会现将MView中现有的数据删除(版本在10G或以上) 或者TRUNCATE(版本低于9i),然后在根据创建MView时候的查询生成数据插入到MView中。 对于多层的MView来说,当master MView全部刷新之后对应的下一级的MView也需要全部刷新,否则将会收到ORA-12034的错误。
快速刷新(fast refresh) 快速刷新是一种比完全刷新快的多的刷新方式,快速刷新只刷新自上次刷新以来修改的数据,因为快速刷新所要操作的数据量少,使用这种 方法能大大的节省带宽. 快速刷新要求在基表上面有MView Log,接着上面给出的例子,我们来给MVT做一个快速刷新。
如果没有建立MView Log的话要进行快速刷新的话会报错
强制刷新(force refresh)
当进行强制刷新的时候系统会首先尝试进行快速刷新,如果快速刷新无法进行的时候系
统将会进行完全刷新。其实就是一个快速刷新和完全 刷新的结合体。
创建物化视图例子:(基于主键的物化视图,此时基表上一定要有键约束) create materialized view mvt3 refresh fast start with sysdate next sysdate+1/48 on demand as select * from test_mv; 创建物化视图更新日志例子(基于主键约束): create materialized view log on test_mv; 此时数据库系统会默认创建以mlog$_test_mv命名的表,并且由一个内部触发器来维护该日志,用USER_INTERNAL_TRIGGERS可以查看该 触发器。 手动指定刷新 exec dbms_mview.refresh('mvt', 'F');--快速刷新 “C”完全刷新 创建基于ROWID的物化视图例子(基表上没有主键约束): create materialized view mvt4 refresh force with rowid start with sysdate next sysdate + 1/48 on demand as select * from test_mv; 创建物化视图更新日志例子(基于ROWID): create materialized view log on test_mv with rowid; MView分类
按对MView可以进行的DML的操作分
按对MView可以进行的DML的操作可将MView分成三种 1、只读MView:不指定FOR UPDATE参数所创建MView为只读MView,这种MView将和原查询的数据保持一致,不会存在有数据冲突等问题。 2、可更新MView:在建立MView的时候使用FOR UPDATE参数,同时要求将MView放在刷新组里面。建立的MView可以被更新修改, 而且MView的修改也会在MView刷新的时候被推到原表中。 3、可写MView:在建立MView的时候使用FOR UPDATE参数,但是不将MView放在刷新组里面。这样的MView可以被修改,但是所有的修改 会在MView被刷新的时候被刷新掉。
本文来源:https://www.dy1993.cn/y8eK.html