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

[经验分享] Oracle-物化视图

[复制链接]

尚未签到

发表于 2018-9-26 08:54:50 | 显示全部楼层 |阅读模式
Oracle-物化视图
  介绍:oracle物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。物化视图可以查询表,视图和其它的物化视图。
  1 关于物化视图日志
  查询物化视图日志文件格式:desc mlog$_test;
  创建物化视图时默认指定物化视图中存在主键,如果不指定,那么创建的物化视图日志文件的基表必须存在主键,否则会报错
  Demo:对一个表test
  创建日志:create materialized view log on test;
  那么会报:表'TEST'不包含主键约束条件
  这种情况下,就必须指定日志文件结构
  比如:create materialized view log on test with rowid
  2关于生成数据和刷新
  2.1 生成数据
  两大选项:build immediate   build deferred
  Build immediate:在创建物化视图的同时根据主表生成数据
  Bulid deferred:在创建物化视图的同时,在物化视图内不生成数据,如果此时没有生成数据,以后可以利用oracle自带的过程进行相应的调用,采取:EXEC DBMS_MVIEW.Refresh(‘MV_name’,’C’),注意必须使用全量刷新,默认(不带参数)是增量刷新,所以这里参数必须是C,因为之前都没有生成数据,所以必须全量。
  2.2 关于刷新
  2.2.1刷新方式:complete fast force
  Complete :完全刷新整个物化视图,相当于重新生成物化视图,此时即时增量刷新可用也全量刷新
  l  Fast:当有数据更新时依照相应的规则对物化视图进行更新(此时必须创建物化视图日志(物化视图日志记录了数据更新的日志),关于日志的说明,参照“物化视图日志文件介绍”)
  l  Force:当增量刷新可用则增量刷新,当增量刷新不可用,则全量刷新(此项为默认选项)不过从实际情况出发,应该尽量不使用默认选项,可以考虑使用增量刷新,对大表特别有效,大表全量更新速度是非常慢的,特别是在存在索引的情况下(在创建物化视图语句中,可能某些限制查询的条件,导致了增量刷新无法使用,这个是需要注意的,具体是哪类语句导致fast刷新不可用,有待总结…..)
  2.2.2刷新时间:on demand on commit start with/ next
  On demand:在需要刷新时进行刷新(人工判断)
  On commit:在基表上有提交操作时,进行更新
  Start with:指定首次刷新的时间(一般指定的是当前时间,不过也可以在创建物化视图时不生成数据,则可以考虑在指定的时间刷新,从而生成数据)
  Next:刷新的周期时间
  3  基于主键的物化视图和ROWID的物化视图的说明

  创建物化视图日志时,指定了记录更新的原则即with 后面的primary 或者rowid 或者object>  4 关于物化视图存放的的表空间
  直接在创建物化视图时指定日志存放的表空间和物化视图的表空间。
  例子:create materialized view MV_TEST tablespace test ----表空间名称
  5 关于查询重写和更新
  在创建查询重写时,基表中必须有主键约束,视图里是无法创建主键的,不过其继承了基表的主键约束。(关于视图的创建的一些技巧有待总结……)下面给个例子
  Create materialized view MVTEST
  Refresh fast ----前提是必须创建基表日志,可以忽略该项
  Enable query rewrite ----前提是基表上必须存在主键约束
  As
  Select * from TEST; ----物化视图数据生成
  6 关于创建物化视图的例子
  6.1 使用增量刷新的物化视图的写法
  创建物化视图日志,必须创建日志
  Create materialized view log on TEST ----TEST为表名
  ----注:(TEST为表名或者视图名,关于视图上建立物化视图,见基于视图的物化视图
  ----创建物化视图语句:
  Create materialized view MVTEST
  ----MVTEST为物化视图名
  Build immediate
  ----创建时生成数据对应的是build deferred
  Refresh fast
  ----增量刷新
  On commit
  ----在基表有更新时提交,这里该句对视图无效
  With rowid
  ----这里创建基于rowid的物化视图,对应的是 primary key
  As
  Select * from TEST;
  ----生成物化视图数据语句
  SQL> create materialized view mvtest build immediate refresh fast on commit as select * from test;
Oracle-物化视图
  介绍:oracle物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。物化视图可以查询表,视图和其它的物化视图。
  1 关于物化视图日志
  查询物化视图日志文件格式:desc mlog$_test;
  创建物化视图时默认指定物化视图中存在主键,如果不指定,那么创建的物化视图日志文件的基表必须存在主键,否则会报错
  Demo:对一个表test
  创建日志:create materialized view log on test;
  那么会报:表'TEST'不包含主键约束条件
  这种情况下,就必须指定日志文件结构
  比如:create materialized view log on test with rowid
  2关于生成数据和刷新
  2.1 生成数据
  两大选项:build immediate   build deferred
  Build immediate:在创建物化视图的同时根据主表生成数据
  Bulid deferred:在创建物化视图的同时,在物化视图内不生成数据,如果此时没有生成数据,以后可以利用oracle自带的过程进行相应的调用,采取:EXEC DBMS_MVIEW.Refresh(‘MV_name’,’C’),注意必须使用全量刷新,默认(不带参数)是增量刷新,所以这里参数必须是C,因为之前都没有生成数据,所以必须全量。
  2.2 关于刷新
  2.2.1刷新方式:complete fast force
  Complete :完全刷新整个物化视图,相当于重新生成物化视图,此时即时增量刷新可用也全量刷新
  l  Fast:当有数据更新时依照相应的规则对物化视图进行更新(此时必须创建物化视图日志(物化视图日志记录了数据更新的日志),关于日志的说明,参照“物化视图日志文件介绍”)
  l  Force:当增量刷新可用则增量刷新,当增量刷新不可用,则全量刷新(此项为默认选项)不过从实际情况出发,应该尽量不使用默认选项,可以考虑使用增量刷新,对大表特别有效,大表全量更新速度是非常慢的,特别是在存在索引的情况下(在创建物化视图语句中,可能某些限制查询的条件,导致了增量刷新无法使用,这个是需要注意的,具体是哪类语句导致fast刷新不可用,有待总结…..)
  2.2.2刷新时间:on demand on commit start with/ next
  On demand:在需要刷新时进行刷新(人工判断)
  On commit:在基表上有提交操作时,进行更新
  Start with:指定首次刷新的时间(一般指定的是当前时间,不过也可以在创建物化视图时不生成数据,则可以考虑在指定的时间刷新,从而生成数据)
  Next:刷新的周期时间
  3  基于主键的物化视图和ROWID的物化视图的说明

  创建物化视图日志时,指定了记录更新的原则即with 后面的primary 或者rowid 或者object>  4 关于物化视图存放的的表空间
  直接在创建物化视图时指定日志存放的表空间和物化视图的表空间。
  例子:create materialized view MV_TEST tablespace test ----表空间名称
  5 关于查询重写和更新
  在创建查询重写时,基表中必须有主键约束,视图里是无法创建主键的,不过其继承了基表的主键约束。(关于视图的创建的一些技巧有待总结……)下面给个例子
  Create materialized view MVTEST
  Refresh fast ----前提是必须创建基表日志,可以忽略该项
  Enable query rewrite ----前提是基表上必须存在主键约束
  As
  Select * from TEST; ----物化视图数据生成
  6 关于创建物化视图的例子
  6.1 使用增量刷新的物化视图的写法
  创建物化视图日志,必须创建日志
  Create materialized view log on TEST ----TEST为表名
  ----注:(TEST为表名或者视图名,关于视图上建立物化视图,见基于视图的物化视图
  ----创建物化视图语句:
  Create materialized view MVTEST
  ----MVTEST为物化视图名
  Build immediate
  ----创建时生成数据对应的是build deferred
  Refresh fast
  ----增量刷新
  On commit
  ----在基表有更新时提交,这里该句对视图无效
  With rowid
  ----这里创建基于rowid的物化视图,对应的是 primary key
  As
  Select * from TEST;
  ----生成物化视图数据语句
  SQL> create materialized view mvtest build immediate refresh fast on commit as select * from test;


运维网声明 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.iyunv.com/thread-602168-1-1.html 上篇帖子: ORACLE 10G OCP 视频下载 下篇帖子: oracle Flashback version Query
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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