物化视图快速刷新机制(疑问)

工作上碰到的个问题,对物化视图不熟造成的

在物化视图的LOG上有CHANGE_VECTOR$$字段,当做UPDATE时,会记录发生变化的
的字段是哪些,因此,我认为快束刷新物化视图时会根据LOG来只更新那些发生变化的字段,
但是,以下实验好像不是这么回事,
源表tb_lvy_increasedecreasedata,在此叫A表里面有一字段flag,在这表上的物化视图日志MLOG$_TB_LVY_INCREASEDECRE 在此叫Alog表
目标物化视图tb_lvy_increasedecreasedata(不包含字段flag,因为我不关心这个字段) ,此物化视图在此叫 MB,


一,当我在目标物化视图MB上建立了trigger时,代码如下
create or replace trigger tr_acc_owesum
after update of datastutuschangeddata on tb_lvy_increasedecreasedata
for each row
begin
if UPDATING then
insert into tt_acc_owesum values(:new.increasedecreasedataid);--tt_acc_owesum为一临时表,只有一字段
end if ;
end;
我的意思是只想得到datastutuschangeddata字段发生变化的记录的主键,
但是,当我在源表tb_lvy_increasedecreasedata上做update时
update tb_lvy_increasedecreasedata t
set t.flag='cctv'
where rownum<10000;
更新的是物化视图上没有的这个字段,更新完后,我刷新目标的物化视图tb_lvy_increasedecreasedata,
此时,trigger做了不该做的事,在表tt_acc_owesum插入了9999表记录, why??????????
二,在源表与目标物化视图都不变的情总下,
我在目标物化视图上又建了一个物化视图LOG
create materialized view log on tb_lvy_increasedecreasedata,
同样,我更新源表的flag字段,但刷新后,在目标区的物化视图log表MLOG$_TB_LVY_INCREASEDECRE上又插入了记录,

原来我是想得到一些我关心的字段发生变化的记录,但在物化视图上总得不到,我现在不清楚物化视图是刷新是如何一回事,
又如何在物化视图上得到我关心的一些字段更新的情况呢?

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/134308/viewspace-140593/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/134308/viewspace-140593/

你可能感兴趣的:(物化视图快速刷新机制(疑问))