linux view 刷新,MV (Materialed View) 物化视图的刷新组

什么是刷新组

通常我们创建的MView会不止一个,而且各个MView的Master Table之间是

有约束,数据一致性关联的,如果我们对各个MView分开刷新的话我们是不

能保证关联数据的完整性和事务的一致性的。Oracle提供了刷新组来解决这

个问题。在刷新组刷新之后Oracle可以保证在刷新组里面的所有的表在刷新

的那个时间点的是一致的。

刷新组的大小

Oracle专门针对大的MView刷新组做了优化,也就是说对于相同数量的MView

来说一个大的刷新组要多个小的刷新组刷新的要快,即刷新的一个含有100

个MView的刷新组要比刷新5个各含有20个MView的刷新组要快。

但是速度不是唯一的需要注意的问题,再决定一个刷新组大小的时候我们还

需要考虑下面的这些问题:

数据的一致性

就像我们上面所说的,数据的完整性和事物的一致性是我们最需要考虑的

问题,考虑大小之前先保证一致性。

表锁

再刷新组的刷新期间,所有的在组里面的表会被锁住而不让别的程序进行

更新的操作,因为表的更新会破坏数据的一致性。这样就造成刷新组越大,

表被锁的时间也就越长。因此针对这个来说越小的刷新组是越有利的。

网络的稳定性

如果在一个刷新组刷新完成之前网络终端的话将会导致整个组的刷新回滚,

因此在网络不好的时候越大的刷新组是越不利的,我们需要根据网络的状况

来调整我们的刷新组的大小。

大刷新组的优点:

1. 相比较多个小的刷新组来说大的刷新组刷新速度要更快些

2. 一次刷新命令就能够把组里面的MView全部刷新

小刷新组的优点:

1. MView被锁住的时间要短些

2. 网络条件不好的时候可能会导致整个组刷新的回滚,浪费时间

刷新组的基本操作

说完了刷新组的概念之后,接下来我们来进行下实际的演练。Oracle使用

DBMS_REFRESH包来进行刷新组的创建和管理操作,下面我们一个个说明下。

建立刷新组

下面为我们前面建立的MView创建一个名为SFIS1.MV_REFRESH_GROUP的

刷新组,这个刷新组将每2分钟做一次刷新。

-- 我们先来创建一个刷新组

begin DBMS_REFRESH.MAKE(

name => 'SFIS1.MV_REFRESH_GROUP',

list => '',

next_date => SYSDATE,

interval => 'SYSDATE+(2/(24*60))'

);

end;

/

接下来要介绍的是DBMS_REFRESH.ADD方法, 下面我们将前面建立的

MView MVT加入到刷新组里面:

begin DBMS_REFRESH.ADD(

name => 'MV_REFRESH_GROUP',

list => 'SFIS1.AAA_MV2'

);

end;

/

相关视图: dba_refresh , dba_refresh_children , dba_jobs

可以调用DBMS_REFRESH.REFRESH对整个组进行手工的刷新操作。

维护刷新组

下面说下DBMS_REFRESH的另外三个方法,分别是CHANGE, SUBTRACT和DESTROY。

CHANGE Procedure

改变刷新组的刷新频率。

DESTROY Procedure

删除刷新组里面所有的MView并将刷新组删除。

SUBTRACT Procedure

从刷新组里面删除指定的MView。

用法也是很简单,就演示下它们的用法:

-- 改变 interval

begin DBMS_REFRESH.CHANGE(

name => 'MV_REFRESH_GROUP',

next_date => sysdate,

interval => 'SYSDATE+(5/(24*60))'

);

end;

/

-- 把我们刚刚建立的TEST_GROUP删除掉, 当然这时我们的job也已经消失了

SQL> exec dbms_refresh.destroy('SFIS1.MV_REFRESH_GROUP');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值