ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Db2和oracle的一致性读(CR)--DB2处理方式

Db2和oracle的一致性读(CR)--DB2处理方式

原创 Linux操作系统 作者:bpmfhu 时间:2019-04-10 21:12:07 0 删除 编辑
ORACLE,DB2对cr不同的处理方式
db2支持的隔离级别
隔离级是影响加锁策略的重要环节,它直接影响加锁的范围及锁的持续时间。两个应用程序即使执行的相同的操作,也可能由于选择的隔离级的不同而造成加锁的结果不同。在DB2中,共有四种隔离级:
l  读可靠性(RS-Read Stability)
如果使用这种隔离级,在一个事务中所有被读取过的行上都会被加上NS锁,直到该事务被提交或回滚,行上的锁才会被释放。这样可以保证在一个事务中即使多次读取同一行,得到的值不会改变。但是,如果使用这种隔离级,在一个事务中,如果使用同样的搜索标准重新打开已被处理过的游标,则结果集可能改变。(可能会增加某些行,这些行被称为幻影行(Phantom))。这是因为RS隔离级不能阻止通过插入或更新操作在结果集中加入新行。
l  重复读(RR-Repeat Read)
如果使用这种隔离级,在一个事务中所有被读取过的行上都会被加上S锁,知道该事务被提交或回滚,行上的锁才会被释放。这样可以保证在一个事务中即使多次读取同一行,得到的值不会改变。另外,在同一事务中如果以同样的搜索标准重新打开已被处理过的游标,得到的结果集不会改变。重复读相对于读可靠性而言,加锁的范围更大。对于读可靠性,应用程序只对符合要求的所有行加锁,而对于重复读,应用程序将对所有被扫描过的行都加锁。例如,如果一个应用程序对一个表中的10000行数据进行扫描,最终找到了100条符合搜索条件的结果行。如果该应用程序使用的是读可靠性隔离级,应用程序将只对这符合条件的100行加锁;如果该应用程序使用的是重复读隔离级,应用程序将对被扫描过的10000行都加锁。
l  游标可靠性(CS-Cursor Stability)
      如果使用这种隔离级,在一个事务中,结果集中只有正在被读取的那一行(游标指向的行)将被加上NS锁,其他未被处理的行上不被加锁。这种隔离级只能保证正在被处理的行的值不会被其他并发的程序所改变。该隔离级是DB2缺省的隔离级。
l  未提交读(UR-Uncommitted Read)
如果使用这种隔离级,对于只读操作,不加行锁。典型的只读操作包括:               SELECT语句的结果集只读(比如语句中包括ORDER BY子句);定义游标是指明起为FOR FETCH ONLY。
该隔离级可以改善应用程序的性能,同时可以最大程度的允许并发。但是,应用程序的数据完整性将受到威胁。如果需要读取未提交的数据,该隔离级是唯一选择。
        以上我们所提的隔离级的加锁范围和持续时间都是针对于读操作而言的。对于更改操作,被修改的行上会被加上X锁,不论使用何种隔离级,X锁直到提交或回滚之后才会被释放。

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

请登录后发表评论 登录
全部评论

注册时间:2001-12-26

  • 博文量
    237
  • 访问量
    153471