小议物化视图与基表数据不一致的消除(一)

这篇文章介绍一下快速刷新的只读物化视图于基表不一致的解决方法。


我并没有碰到过实际的情况,但是在网上看到过几次类似的案例:快速刷新的物化视图与基表出现数据不一致的状况。

因为我并没有在使用中实际碰到过这种情况,因此不好确定问题产生的原因。不过推断产生的原因可能有两种,一个是Oracle的bug造成的,另一个是物化视图的基表被人手工修改。

这里并不打算讨论问题是怎样产生的,而是给出碰到这种问题后的解决方案。

最简单的解决方法:将物化视图执行完全刷新。如果物化视图不是实时访问,可以考虑通过非原子性刷新方式来提高刷新速度。这种方法的优点是简单方便,不会造成错误的结果,风险较小,但是不适用于数据量很大的情况。

第二种方法是重建物化视图。这种方法由于避免了UNDO信息且减少了REDO,效率要比完全刷新高很多。而且也不会造成错误的结果。缺点是物化视图删除后到物化视图重新建立完成直接,这个对象在数据库中不再存在,如果这个时候访问这个对象会直接报错。而且对象重建后,需要恢复物化视图的索引、约束、权限和统计信息等。这些步骤不但麻烦而且容易遗漏。更重要的是,对于数据库很大的表,这种操作的代价仍然是很大的。

最后一种方法也是下面几篇文章的重点,通过手工修改物化视图日志来达到物化视图和基表的一致。这种方法的最大好处是对于数据量很大且不一致的数据量很小的情况,这种方法的代价很小,同步速度也很快。不过这种方法也有很明显的缺点:首先就是方法比较复杂,要求对物化视图的刷新和物化视图日志有比较清晰的了解。而且操作失误的话,很容易造成数据的进一步错误。不过,以前面两种方法作为后盾,即使这种方法真的造成了数据的错误也不会产生太大的问题。

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

转载于:http://blog.itpub.net/4227/viewspace-69374/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值