DB2 V9.7新特性之“当前提交”功能解析

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 04:53 点击:

在 DB2 9.7 使用光标稳定性隔离级别之前,一个写操作(UPDATE)将阻止同一行的读操作
(SELECT)。其中的逻辑是,写操作正在修改行,读操作应该等到更新完成后看到最终提交的值。
在DB2 9.7 中,有一个新数据库的游标稳定性隔离级别的默认行为。实施这一新的行为时,将使用当
前提交CC(currently committed)的语义。有CC 之后写操作不会阻止访问同一行中的读操作。如
果您使用了隔离级别未提交的读操作(UR),这种情况过去是可能发生的。但现在的差别是,UR 读
操作读到的是未提交的值, CC 读操作读到的是提交的值。当前提交值是致力于写操作的开始前的
值。例如,表T1 具有以下内容:
 
FIRSTNAME LASTNAME
Raul Chong
Jin Xie
 
现在,您的应用程序AppA 执行这个语句,但不提交:
update T1 set lastname = 'Smith' where firstname = 'Raul'
 
接下来,应用程序AppB 执行此提交:
select lastname from T1 where firstname = 'Raul' with CS
 
在 DB2 9.7 之前,这条语句将挂起,因为它正在等待由AppA(写操作)更新语句的排他锁被释放。
在DB2 9.7 当前提交(新数据库默认)能让语句返回当前提交的值,即Chong。请注意,即使CS
是默认值,为清楚起见我们还是把”with CS”包括在提交语句中。我们将在后一章节讨论这个子句。  www.2cto.com  
 
如果AppB 尝试这个语句:
select lastname from T1 where firstname = 'Raul' with UR
 
由于UR 的隔离使用,其结果将是未提交的值Smith 。这个例子说明, CC 程序具有更好的并发功
能使读操作能够读到一个正在更新的行。另一个在DB2 9.7 之前会引起争议的情况是读操作阻止写操
作访问行。这就是为什么即使是读操作也建议使用一个提交的原因之一,因为这将确保共享(S)锁
被释放。有了CC 之后这不再是一个问题,读操作不会阻塞写操作。对于那些没有提交的INSERT 操
作,读操作将默认地跳过他们,结果就是不显示这些行。对于DELETE 命令,读操作应该也可以跳
过(忽略)受影响的行,但行为取决于DB2 注册表的变量值DB2_SKIPDELETED。其他注册表变量
和BIND 和PREPARE 命令属性可以改变CC 的默认行为。记住:当前提交意味着它只会显示当前提
交的信息,因此未提交的INSERT 或DELETE 操作将被忽略。如前所述,在新数据库CC 是默认
的。如果您想将其关闭,或把一个早期版本创建的数据库升级到DB2 9.7,您可以更新数据库配置
 
CUR_COMMIT 的值。例如,将SAMPLE 数据库的CC 关闭可以写成:
 
db2 update db cfg for sample using CUR_COMMIT off
db2stop
db2start
 

 
 
作者 TOMSYAN

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • db2管理工具小结
      • DB2数据库的导出与导入(Windows客户端)
      • db2 CLP中如何换行
      • DB2查看表结构及所用表语句
      • DB2 · CREATE TABLESPACE
      • 使用DB2对象:创建模式、表和视图
      • DB2数据库逻辑卷的复制
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1