mv物化视图规范

随着公司近几年所开拓的业务领域不断加强,同时也须要相应的业务软件平台做为后台支持,所以,信息中心所设计开发的软件规模近几年增加速度也很快。随之而来的数据库的容量和复杂程度也成倍增长。为了提升数据库的效率,实现标准化以及便于数据库的统一管理,制定本规范,旨在以统一的标准指导开发人员正确使用物化视图。
此处请填入文档中的专业术语及解释。
序号 术语/缩略语 全称和说明
1 物化视图(Materialized View) 物化视图用来存储数据副本或集合,能够用来复制本地或远程表的所有或者部分,或者复制对多个表的查询结果。物化视图可根据须要自动完成复制数据的自动刷新。



二、设计要求规范#

2.1 表关联的物化视图,若是使用fast刷新模式,只能用基于rowid的物化视图。 数据库

这是MV的技术限制要求。 jsp

2.2 不容许使用On Commit的刷新模式,须使用On Demand的模式进行刷新工做。 性能

为不影响数据库的性能,不容许使用On Commit的刷新模式,由于若是使用On Commit的刷新模式数据库会将物化视图的刷新操做做为Commit事务处理的一部分来执行,从而增长了Commit完成的时间。 spa

2.3 On demand refresh方式的MV,不容许使用START WITH的自动刷新模式,要求自行开发用于物化视图刷新的JOB。 设计

为了便于管理,要求自行开发用于物化视图刷新的JOB,并设置定时调度来代替物化视图的自动刷新功能。为刷新工做建立的JOB要遵照《JOB管理规范》。 日志

2.4 不容许使用Force Refresh方式。 code

Force Refresh方式Oracle自动判断是否知足Fast刷新条件,若是知足则进行Fast刷新,不然进行Complete刷新,使用Force Refresh方式带有不肯定性,所以不容许使用Force Refresh方式。 对象

2.5 除了初始化数据和大的维护工做外,不能使用Complete Refresh方式,只能使用Fast Refresh方式。 索引

因为Complete Refresh方式会将表清空后从新复制数据,将占用大量的资源。所以除了初始化数据或者是很大的维护工做外,物化视图不容许采用Complete方式进行刷新。 事务

2.6 若是存在预建表,且预建表再没有其余的用途,在删除物化视图时,须要同时删除预建表。若想不删除,需申请例外。

使用预建表方式建立的物化视图,在删除物化视图后,所建的同名的预建表不会自动删除,还能够进行查询操做,所以须要手动进行删除。

drop materialized view 属主.物化视图名; drop table 属主.预建表名;
例如:
drop materialized view olapdata.CAL_MONTH_SALES_MV; drop table olapdata.CAL_MONTH_SALES_MV;

2.7 删除物化视图时,若是是快速刷新的物化视图,须要同时删除物化视图日志。

在使用快速刷新时,须要建立基于物化视图的日志表,所以在删除物化视图时,同时须要删除此日志表。
注意:对于物化视图和物化视图日志表不在同一个数据库的状况,在删除物化视图和物化视图日志表时,须要链接到相应的数据库删除对应的对象。
若是物化视图和物化视图日志表是不一样的Schema,在删除物化视图和物化视图日志表时,须要以不一样的Schema用户登陆并删除,或临时授予删除权限。

drop materialized view log on 表属主.表名;
例如:
drop materialized view log on olapdata.cal_month_sales;

2.8 为了保证mview可以进行fast refresh,需在Materialized View Log建立时加入sequence参数。

sequence的做用在于肯定dml操做的前后顺序,当对于多表进行mixed dml操做时,涉及到join+aggregate类型的mv要进行fast refresh则需设置sequence的关键字。

附录#

附录A 与物化视图相关的包#

能够经过DBMS_MVIEW来执行物化视图的相关分析与刷新工做。

附录B 物化视图的索引与约束#

除了主键外,Oracle不会自动在复杂的物化视图的列上建立任何索引,须要手工建立索引。
为了提升查询物化视图的效率,有必要对常常使用的列上建立索引。

附录C 物化视图的刷新方式#

物化视图的刷新方式说明

附录D 物化视图日志表的结构#

任何物化视图都会包括的列:
  • SNAPTIME$$:用于表示刷新时间。
  • DMLTYPE$$:用于表示DML操做类型,I表示INSERT,D表示DELETE,U表示UPDATE。
当基本发生DML操做时,会记录到物化视图日志中,这时指定的时间4000年1月1日0时0分0秒。若是物化视图日志供多个物化视图使用,则一个物化视图刷新后会将它刷新的记录的时间更新为它刷新的时间。
  • COMMIT后,物化视图mv_t_rowid刷新,将SNAPTIME$$列更新成本身的刷新时间。
  • OLD_NEW$$:用于表示这个值是新值仍是旧值。N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操做。
  • CHANGE_VECTOR$$表示修改矢量,用来表示被修改的是哪一个或哪几个字段。
  • 若是WITH后面跟了ROWID,则物化视图日志中会包含:M_ROW$$:用来存储发生变化的记录的ROWID。
  • 若是WITH后面跟了PRIMARY KEY,则物化视图日志中会包含主键列。
  • 若是WITH后面跟了OBJECT ID,则物化视图日志中会包含:SYS_NC_OID$:用来记录每一个变化对象的对象ID。
  • 若是WITH后面跟了SEQUENCE,则物化视图日子中会包含:SEQUENCE$$:给每一个操做一个SEQUENCE号,从而保证刷新时按照顺序进行刷新。
  • 若是WITH后面跟了一个或多个COLUMN名称,则物化视图日志中会包含这些COLUMN列。
相关文章
相关标签/搜索