oracle 多表读一致性,Oracle多版本和读一致性

对于以Oracle后台的开发人员了解Oracle多版本和一致读尤其重要,因为它在很大程度上提升了数据库的并行操作。如果对并发了解的不够,通常会遇到以下几种情况:

1、破坏了数据的完整性

2、随着用户数的增多,应用的运行速度减慢

3、不能很好的扩展应用来支持大量用户

介绍多版本和一致读之前先来了解下Oracle的锁机制:

1、Oracle只在修改时才对数据加载行级锁

2、写入器不会阻塞读取器(其他数据库中往往读会被写阻塞)

3、写入器想写某行数据,但另外一个写入器锁定了这行数据,此时写入器才会被阻塞

明白了锁机制,下面就进入正题。多版本:是指Oracle能够从数据库同时物化多个版本的数据,为读一致性提供数据基础;

读一致性:Oracle中的查询会从某个一致的时间点开始返回,查询中的每个块都从同一个时间点开始,即使它在查询中时被修改或锁定;

考虑这样一件事,有一家银行一共100个客户,每个客户存款500,当系统要查看所有的客户存款统计,答案当然是50000。如果没有以上机制则在统计期间ID=1的客户把500块钱转到ID=100的客户,而统计已经统计过ID=1的客户还没有统计ID=100的客户,那么此时ID=100的客户存款就为1000,最终sum到ID=100的客户时统计结果将是50500。答案是错误的!采用多版本和读一致性不仅提高了并行度,还保证了数据的正确性。

当你修改数据的时候,Oracle将会在两个不同的位置创建记录,一个是重做日志,另一个是回滚段。某一行的数据被修改,该行会增加一个行级锁,当读取这行数据时发现有行级锁则读取回滚段,从而保证读一致性。

也许有人会问既然这是Oracle的内部机制,对于开发人员来说有什么用?确实很有用,你有可能接触过其他数据库然后把其他数据库的经验用到了Oracle上,造成了不必要的锁机制;或者避免当你遇到并发瓶颈时增加了没有必要的代码;最主要的是当您在Oracle数据库基础上写了大量代码突破了并行的瓶颈正洋洋得意时,您的DBA说:“这些Oracle很久以前已经实现了...”;[@more@]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值