mv物化视图规范

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



2、设计要求规范#

2.1 表关联的物化视图,如果使用fast刷新模式,只能用基于rowid的物化视图。

这是MV的技术限制要求。

2.2 不允许使用On Commit的刷新模式,须使用On Demand的模式进行刷新工作。

为不影响数据库的性能,不允许使用On Commit的刷新模式,因为如果使用On Commit的刷新模式数据库会将物化视图的刷新操作作为Commit事务处理的一部分来执行,从而增加了Commit完成的时间。

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

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

2.4 不允许使用Force Refresh方式。

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列。

转载于:https://my.oschina.net/u/729507/blog/88664

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值