资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
物化视图使用大全物化视图使用大全物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。 对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。物化视图可以查询表,视图和其它的物化视图。一、一、 关于物化视图日志:关于物化视图日志:查询物化视图日志文件格式:desc mlog$_lzwmvtest;创建物化视图时默认指定物化视图中存在主键,如果不指定,那么创建的物化视图日志文件的基表必须存在主键,否则会报错Demo:对一个表 test创建日志:create materialized view log on test;那么会报:表LZWMVTEST不包含主键约束条件这种情况下,就必须指定日志文件结构比如:create materialized view log on test with rowid(具体的针对日志内容方面的在另外一个专题里说明,这里就简述到此)二、二、 关于生成数据和刷新:关于生成数据和刷新:1生成数据生成数据两大选项:build immediate build deferredBuild immediate:在创建物化视图的同时根据主表生成数据Bulid deferred:在创建物化视图的同时,在物化视图内不生成数据,如果此时没有生成数据,以后可以采取:EXEC DBMS_MVIEW.Refresh(MV_name,C),注意必须使用全量刷新,默认是增量刷新,所以这里参数必须是 C,因为之前都没有生成数据,所以必须全量。2关于刷新关于刷新 刷新方式:刷新方式:complete fast forceComplete :完全刷新整个物化视图,相当于重新生成物化视图,此时即时增量刷新可用也全量刷新 Fast:当有数据更新时依照相应的规则对物化视图进行更新(此时必须创建物化视图日志(物化视图日志记录了数据更新的日志),关于日志的说明,参照“物化视图日志文件介绍”) Force:当增量刷新可用则增量刷新,当增量刷新不可用,则全量刷新(此项为默认选项)不过从实际情况出发,应该尽量不使用默认选项,可以考虑使用增量刷新,对大表特别有效,大表全量更新速度是非常慢的,特别是在存在索引的情况下(在创建物化视图语句中,可能某些限制查询的条件,导致了增量刷新无法使用,这个是需要注意的,具体是哪类语句导致 fast 刷新不可用,有待总结.) 刷新时间:刷新时间:on demand on commit start with/ nextOn demand:在需要刷新时进行刷新(人工判断)On commit:在基表上有提交操作时,进行更新Start with:指定首次刷新的时间(一般指定的是当前时间,不过也可以在创建物化视图时不生成数据,则可以考虑在指定的时间刷新,从而生成数据)Next:刷新的周期时间三、三、 基于主键的物化视图和基于主键的物化视图和 ROWID 的物化视图的说明的物化视图的说明创建物化视图日志时,指定了记录更新的原则即 with 后面的 primary 或者 rowid 或者 object id 等等,后面,默认是以 primary key 为记录更新,在物化视图内也是以此为更新的原则。例如:1、如果日志内使用的是 primary key 则在创建物化视图时指定 rowid 来更新,则会报 ORA-12032: 不能使用 “TEST“ 上实体化视图日志中的 rowid 列2、如过日志内使用的是 rowid 则在创建物化视图时指定 primary 或者默认指定,则会报 ORA-23415: “GIS“.“LZWMV“ 的实体化视图日志不记录主键四、四、 关于物化视图存放的的表空间关于物化视图存放的的表空间直接在创建物化视图时指定日志存放的表空间和物化视图的表空间。例子:create materialized view MV_TEST tablespace test -表空间名称五、五、 关于查询重写和更新关于查询重写和更新在创建查询重写时,基表中必须有主键约束,视图里是无法创建主键的,不过其继承了基表的主键约束。(关于视图的创建的一些技巧有待总结)下面给个例子Create materialized view MV_TEST Refresh fast -前提是必须创建基表日志,可以忽略该项Enable query rewrite -前提是基表上必须存在主键约束AsSelect * from TEST; -物化视图数据生成六、六、 关于创建物化视图的例子:关于创建物化视图的例子:1、 使用增量刷新的物化视图的写法创建物化视图日志,必须创建日志Create materialized view log on TEST -TEST 为表名-注:(TEST 为表名或者视图名,关于视图上建立物化视图,见基于视图的物化视图-创建物化视图语句:Create materialized view MV_TEST -MVTEST 为物化视图名Build immediate -创建时生成数据对应的是 build deferredRefresh fast -增量刷新On commit -在基表有更新时提交,这里该句对视图无效With rowid -这里创建基于 rowid 的物化视图,对应的是 primary keyAsSelect * from TEST;-生成物化视图数据语句七、七、 小的知识点小的知识点创建主键约束语句:alter table table_name add(constraint constraint_name primary key(columes);建议使用 job 来定期刷新物化视图物化视图创建语法: CREATE MATERIALIZED VIEW PCTFREE -存储参数 PCTUSED -存储参数 TABLESPACE -表空间 BUILD IMMEDIATE|DEFERRED-创建方式 ENABLE|DISABLE QUERY REWRITE-是否支持查询重写 REFRESH ON WITHINCLUDING NEW VALUES -数据刷 新机制,如果需要进行快速刷新,则需要建立物化视图日志,增加 WITH 子句,且需要创建物化 视图日志 ON PREBUILT TABLE-将物化视图建立在一个已经存在的表上,这种物化视图的查询重写要 求参数 QUERY_REWRITE_INTEGERITY 必须设置为 trusted 或者 stale_tolerated AS (;create materialized view log on TableName with PRIMARY KEY|ROWID;drop materialized view log on TableName;drop materialized view ViewName;exec DBMS_MVIEW.REFRESH (CYTS.VM_ACCBILL_JOB_FEE);Oracle 的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多 的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到 结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物 化视图对应用透明,增加和删除物化视图不会影响应用程序中 SQL 语句的正确性和有效性; 物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物 化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。 创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:创建方式(Build Methods):包括 BUILD IMMEDIATE 和 BUILD DEFERRED 两种。BUILD IMMEDIATE 是在创建物化视图的时候就生成数据,而 BUILD DEFERRED 则在创建时不生成 数据,以后根据需要在生成数据。默认为 BUILD IMMEDIATE。查询重写(Query Rewrite):包括 ENABLE QUERY REWRITE 和 DISABLE QUERY REWRITE 两种。 分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询 时,Oracle 会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连 接操作,而直接从已经计算好的物化视图中读取数据。默认为 DISABLE QUERY REWRITE。刷新(Refresh):指当基表发生了 DML 操作后,物化视图何时采用哪种方式和基表进行同 步。刷新的模式有两种:ON DEMAND 和 ON COMMIT。ON DEMAND 指物化视图在用户需 要的时候进行刷新,可以手工通过 DBMS_MVIEW.REFRESH 等方法来进行刷新,也可以通过 JOB 定时进行刷新。ON COMMIT 指出物化视图在对基表的 DML 操作提交的同时进行刷新。 刷新的方法有四种:FAST、COMPLETE、FORCE 和 NEVER。RST 刷新采用增量刷新,只刷新 自上次刷新以后进行的修改。COMPLETE 刷新对整个物化视图进行完全的刷新。如果选择 FORCE 方式,则 Oracle 在刷新时会去判断是否可以进行快速刷新,如果可以则采用 FAST 方式,否则采用 COMPLETE 的方式。NEVER 指物化视图不进行任何刷新。默认值是 FORCE ON DEMAND。在建立物化视图的时候可以指定 ORDER BY 语句,使生成的数据按照一定的顺序进行保存。 不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。物化视图日志:如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不 同物化视图的快速刷新的需要,可以建立为 ROWID 或 PRIMARY KEY 类型的。还可以选择是 否包括 SEQUENCE、INCLUDING NEW VALUES 以及指定列的列表。可以指明 ON PREBUILD TABLE 语句将物化视图建立在一个已经存在的表上。这种情况下, 物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重 写要求参数 QUERY_REWRITE_INTEGERITY 必须设置为 trusted 或者 stale_tolerated。物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT) 。具有这 种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。对于聚 集物化视图,可以在 GROUP BY 列表中使用 CUBE 或 ROLLUP,来建立不同等级的聚集物化 视图。物化视图的基本操作和使用可以查看网址:http:/blog.itpub.net/post/468/13318 相关的东 东。我主要说明一下使用物化视图的基本东东。如如何建立在特定的表空间上,这些在其 他的物化视图上面几乎都没有任何介绍的。主要以我做的一个例子来操作, 如果对物化视图的基本概念清楚了就比较明白在那里写特定的表空间存储了。创建物化视图时应先创建存储的日志空间CREATE MATERIALIZED
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号