zoukankan      html  css  js  c++  java
  • Oracle物化视图梳理

    DECLARE--物化视图可以分为三种类型:

    * 包含聚集的物化视图

    * 只包含连接的物化视图

    * 嵌套物化视图

    三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。

    --物化视图创建方式(Build Methods),包括BUILD IMMEDIATE和BUILD DEFERRED两种。

    * BUILD IMMEDIATE是在创建物化视图的时候就生成数据,

    * BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。

    默认为BUILD IMMEDIATE。

    --物化视图查询重写(Query Rewrite),包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。

    分别指出创建的物化视图是否支持查询重写。

    查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视

    图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图

    中读取数据。默认为DISABLE QUERY REWRITE。

    在建立物化视图的时候可以指定ORDER BY语句,使生成的数据按照一定的顺序进行保存。不

    过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。

    --物化视图数据的刷新模式:

    仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,

    以保证和基表数据的一致性;

    基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据

    和基表一致

    二者的区别在于刷新方法的不同。

    --刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。

    FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。

    COMPLETE刷新对整个物化视图进行完全的刷新。

    如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。

    NEVER指物化视图不进行任何刷新。

    --物化视图日志

    如果需要进行'快速刷新',则需要建立物化视图日志。

    物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。

    还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

    可以指明ON PREBUILD TABLE语句将物化视图建立在一个已经存在的表上。这种情况下,物化

    视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参

    数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated。

    --物化视图分区

    基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分

    区维护操作后,仍然可以进行快速刷新操作。对于聚集物化视图,可以在GROUP BY列表中使用

    CUBE或ROLLUP,来建立不同等级的聚集物化视图。

    --物化视图的手工刷新:

    刷新指定的物化视图

    execute dbms_mview.refresh('MV_TEST');

    刷新利用了该表的所有物化视图

    execute dbms_mview.refresh_defresh_dependent('TEST');

    刷新该模式中,自上次刷新以来,未得到刷新的所有物化视图

    execute dbms_mview.refresh_all_mviews;

    --物化视图的特点:

    * 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表);

    * 物化视图也是一种段(segment),所以其有自己的物理存储属性;

    * 物化视图会占用数据库磁盘空间;

    --设置init.ora的参数:

    使用物化视图:

    JOB_QUEUE_PROCESSES,必须设置大于 1。

    QUERY_REWRITE_ENABLED,设置为TRUE时,允许动态重写查询。

    QUERY_REWRITE_INTEGRITY,确定访问物化视图时数据一致性要遵守的程度。

    OPTIMIZER_MODE,必须设置成CBO的某种方式。

    禁用物化视图:

    修改init.ora参数的query_rewrite_enabled参数设置成flase,重启实例。

    使用alter system set query_rewrite_enabled = flase;动态修改。

    使用alter session set query_rewrite_enabled = flash;修改会话内。

    使用 norewrite提示。

    --------------------------------------------------------------------------------------

    源宿主:y,目标宿主:m

    1、源表

    create table y.test(id varchar2(10) primary key ,name varchar2(20));

    2、物化视图日志

    创建:

    create materialized view log on y.test [tablespace MV_DATA WITH ROWID, sequence(seq_tid)];

    删除:

    drop materialized view log on test;

    2、物化视图

    创建:

    CREATE MATERIALIZED VIEW m.mv_test [tablespace mview_data]

    BUILD IMMEDIATE

    REFRESH FORCE

    ON DEMAND --刷新模式,默认值,可以不写

    START WITH SYSDATE

    NEXT SYSDATE+2/1444

    WITH PRIMARY KEY

    DISABLE QUERY REWRITE --查询重写,默认值,可以不写

    AS

    SELECT * FROM y.test;

    删除:

    drop materialized view m.mv_test;

    (编辑:雷林鹏 来源:网络)

  • 相关阅读:
    在博客园里给图片加水印(canvas + drag)
    Chrome开发者工具使用指南
    《古剑奇谭3》千秋戏辅助工具(前端React制作)
    React中useEffect的源码解读
    关于为什么使用React新特性Hook的一些实践与浅见
    使用@babel/preset-typescript取代awesome-typescript-loader和ts-loader
    使用dva改造React旧项目的数据流方案
    在React旧项目中安装并使用TypeScript的实践
    安利一个绘制指引线的JS库leader-line
    微信小程序中悬浮窗功能的实现(主要探讨和解决在原生组件上的拖动)
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9262410.html
Copyright © 2011-2022 走看看