首先描述几个术语,如下:
基表:也就是我们常说的master table和master materialized view,这里说明一下,基表并不是说 这只有一个表,它是你创建MV时所需要用到的表(可能有多个)或相关的上一级的MV。
MV: 也就是物化视图,英文名materizlized view。 源端(master 站点,master MV size): 都是指基表所在的一端(基表所在数据库) MV端(mv站点,mv site): 物化视图所在地一端(mv所在数据库)
需要注意的是,MV跟普通的view不同,它是有segment存在的,不像view那样是虚拟存在的。你可以再dba_semgents中 查到它的对象大小,当然它的好处就是,我们在利用MV进行查询时,不再需要去访问基表了,只需通过访问MV对应的 结果集就行了。当然,这里涉及一个刷新机制,MV的数据和基表的数据是定期刷新来完成同步的。后面会讲到涉及的 集中mv的刷新机制。
建立物化视图 CREATEMATERIALIZEDVIEWVW_TEMPTABLE REFRESHFORCEONDEMAND WITHROWID AS SELECT"TEMPTABLE"."A""A"FROM"TEMPTABLE""TEMPTABLE"; 相应的还要在表TEMPTABLE上建立视图log。
dbms_mview.refresh('表名','F') --快速刷新,也就是增量刷新
我们通过查看试图dba_mviews的REFRESH_METHOD字段可以发现该自动有如下几种属性,换句话说也就是说 物化视图有如下几种刷新方式:
COMPLETE (C) - Materialized view is completely refreshed from the masters FORCE (?) - Oracle Database performs a fast refresh if possible,otherwise a complete refresh FAST (F) - Oracle Database performs an incremental refresh applying changes that correspond to changes in the masters since the last refresh NEVER (N) - User specified that the Oracle Database should not refresh this materialized view 简单在总结为如下几点: compelete: 完全刷新,在压力比较大的情况下,完全刷新可能会带来很多问题,特别是跨站点的情况,对网络要求很高。 force:强制刷新,竟可能的使用增量快速刷新,如果不能则使用完全刷新。默认值是force。 fast: 增量快速刷新。 never:从不刷新。 还有一个字段BUILD_MODE,这是表明创建mv的方式,说白了就是指在创建mv时是否生成数据。默认有如下几种: IMMEDIATE - Populated from the masters during creation DEFERRED - Not populated during creation. Must be explicitly populated later by the user. PREBUILT - Populated with an existing table during creation. The relationship of the contents of this prebuilt table to the materialized view's masters is unknown to the Oracle Database.
简单总结为如下几点:
immediate:创建mv时就生成数据了,也就是在创建mv时就会进行一次完全刷新,同步数据。默认方式。 deferred: 在创建mv时不生成数据,后面跟你的操作实际需要才生成数据,换句话说,使用这种方式创建mv时,当你查询 mv时数据是空的,比如你手工刷新以后,才能查到数据。
prebuilt: 创建时需要先存在跟物化视图存在相同的对象 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|