在Oracle数据库中使用锁进行并发控制[组图]_Oracle数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

在Oracle中使用锁进行并发控制[组图]

作者:黑客防线网安Oracle维护基地 来源:黑客防线网安Oracle维护基地 浏览次数:0

黑客防线网安网讯:  现在主流的数据库管理系统中,都支持多个事务同时执行,这样提高了数据库管理系统的运行效率。试想如果只允许一个事务运行,而这个事务又需要很长的时间,那么其他的用户必须一直等待该...

  现在主流的数据库管理系统中都支持多个事务同时执行这样提高了数据库管理系统的运行效率试想如果只允许一个事务运行,而这个事务又需要很长的时间,那么其他的用户必须一直等待该事务结束,效率何其低下执行不同的事务虽然可以提高性能,但是有可能会破坏数据的完整性,所以我们必须在性能和数据完整性之间进行权衡。那么什么是并发控制呢?并发控制是数据库管理系统协调多个运行事务的行为。首先了解一下,并发控制中经常遇到的三个问题。

  脏读

   我们通过一个products表来解释一下什么是脏读,该products表有一列quantity(数量),现在的值为20。假如现在有两个事务T1和T2,它们都是要更新quantity列,T1将该列值加100,T2将此列减10,但是T1执行失败进行了回滚。我们很容易计算出正确的结果20-10=10,但是如果事务按照以下方式运行,能够得出什么结果?

  时间   事务   步骤                             存储值

  1      T1     读出quantity的值                20

  2      T1      quantity=20+100             120

  3      T1      写入quantity值                  120

  4      T2      读出quantity(T1未提交)     120

  5      T2      quantity=120-10             110

  6      T1      回滚(rollback)                  20

  7      T2      写入quantity值                 110

   以上得出了110的结果,显然是不正确的,问题就在于T2读取到了T1没有提交的数据,我们把这种情况就称之为脏读。

  不可重复读

   还是事务T1和T2,它们都是要更新quantity列,T1将该列值加100,T2将此列减10,而且两个事务都成功。我们很容易计算出正确的结果20+100-10=110,但是如果事务按照以下方式运行,能够得出什么结果?

  时间   事务   步骤                             存储值

  1      T1     读出quantity的值                20

  2      T2     读出quantity的值               20

  3      T1     quantity=20+100                  120

  4      T2     quantity=20-10                  10

  5      T1     写入quantity值(更新丢失)          110

  6      T2     写入quantity值                  10

   得出了10的结果,仍然是不正确的。问题就在于T2的值覆盖了T1的值,我们把这种情况称之为不可重复读。

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-12409-1.html
网站维护教程更新时间:2012-03-23 00:40:28  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer