物化视图实践(2)----刷新组管理

什么是刷新组

通常我们创建的MView会不止一个,而且各个MView的Master Table之间是有约束,数据一致性关联的,如果我们对各个MView分开刷新的话我们是不能保证关联数据的完整性和事务的一致性的。Oracle提供了刷新组来解决这个问题。在刷新组刷新之后Oracle可以保证在刷新组里面的所有的表在刷新的那个时间点的是一致的。


刷新组的大小

Oracle专门针对大的MView刷新组做了优化,也就是说对于相同数量的MView来说一个大的刷新组要多个小的刷新组刷新的要快,即刷新的一个含有100个MView的刷新组要比刷新5个各含有20个MView的刷新组要快。


上面是从网上找到的资料,下面就说说实践过程了。

为什么用刷新组

项目运行最终环境已经可以预见:多个子系统在不同地域运行,收集各自区域的生产数据,总部需要在其生产调度中心以最快的方式掌握下属区域的生产情况,通过物化视图的应用(参见上一篇:物化视图实践(1)----实现远程数据同步),已经解决了从区域同步数据到总部调度中心的需求。但是最终的操作是为每个物化视图分别建立了独自的JOB来实现快速刷新的,这就必然造成多个物化视图各自刷新,而且同类性质的物化视图刷新时间点也不一致,给后端数据分析造成不必要的影响。

所以有必要将同类性质物化视图的刷新统一管理起来,而Oracle自带的dbms_refresh包中提供的刷新组工具正好满足了我们的需求。

注:其实早先方式建立的物化视图也是用刷新组管理的,只不过刷新组的名字等于物化视图名字,而且组中就这么一个物化视图而已。

实践过程

1.创建刷新组

按数据性质(包括刷新频率等),创建不同的刷新组

EXEC Dbms_Refresh.make('GTCJ', '', SYSDATE, 'SYSDATE + 10/(24*60)');
EXEC Dbms_Refresh.make('BJXX', '', SYSDATE, 'SYSDATE + 10/(24*60*60)');
Commit;

2.删除原有刷新组

上面说过了(标红的那一行),既然要统一归并管理,那么就毙掉那些独立大队哈。

EXEC Dbms_Refresh.destroy('SYX_BJ_BJXX_MV');   --其实'SYX_BJ_BJXX_MV'也是一个刷新组
EXEC Dbms_Refresh.destroy('SYX_BJ_BJXX_MV2');
……
EXEC Dbms_Refresh.destroy('SCY_SGT_GTCJ_MV');
EXEC Dbms_Refresh.destroy('SCY_SGT_GTCJ_MV2');
……
Commit;

3.归并统一刷新组
EXEC Dbms_Refresh.add('GTCJ','scy_sgt_gtcj_mv,scy_sgt_gtcj_mv2');  --归并到GTCJ这个刷新组中
EXEC Dbms_Refresh.add('BJXX','syx_bj_bjxx_mv,syx_bj_bjxx_mv2');
Commit;


OK,到这里基本完工了,看看效果,刷新组被精简了,DBMS_jobs也精简了。

SELECT Mview_Name, Refresh_Mode, Refresh_Method, Last_Refresh_Date FROM User_Mviews;
	MVIEW_NAME		REFRESH_MODE	REFRESH_METHOD	LAST_REFRESH_DATE
1	SCY_SGT_GTCJ_MV		DEMAND		FAST		2013-12-28 21:31:16
2	SYX_BJ_BJXX_MV		DEMAND		FAST		2013-12-28 21:36:03
3	SCY_SGT_GTCJ_MV2	DEMAND		FAST		2013-12-28 21:31:16
4	SYX_BJ_BJXX_MV2		DEMAND		FAST		2013-12-28 21:36:03

SELECT Rname, Job, Next_Date, INTERVAL, Broken FROM User_Refresh;
	RNAME	JOB	NEXT_DATE		INTERVAL		BROKEN
1	BJXX	161	2013-12-28 21:39:29	SYSDATE + 10/(24*60*60)	N
2	GTCJ	141	2013-12-28 21:41:15	SYSDATE + 10/(24*60)	N

SELECT Rname, NAME, Job, Next_Date, INTERVAL, Broken FROM User_Refresh_Children;
	RNAME	NAME		 JOB	NEXT_DATE		INTERVAL		BROKEN
1	BJXX	SYX_BJ_BJXX_MV	 161	2013-12-28 21:42:56	SYSDATE + 10/(24*60*60)	N
2	BJXX	SYX_BJ_BJXX_MV2	 161	2013-12-28 21:42:56	SYSDATE + 10/(24*60*60)	N
3	GTCJ	SCY_SGT_GTCJ_MV	 141	2013-12-28 21:51:20	SYSDATE + 10/(24*60)	N
4	GTCJ	SCY_SGT_GTCJ_MV2 141	2013-12-28 21:51:20	SYSDATE + 10/(24*60)	N

4.其它刷新组命令

Dbms_Refresh.change    修改刷新组的运行参数,如刷新频率;

Dbms_Refresh.subtract   删除刷新组中的物化视图,可以一次删除多个,正如上面一次加入多个的方式。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值