db2 获取返回的游标_DB2V9.7中使用游标的注意了

本文介绍了在DB2 V9.7中使用游标时遇到的锁问题。当游标在打开时,由于锁等待可能会导致事务超时并回滚。作者通过实例展示了游标在不同操作中的锁状态,讨论了游标在打开和获取数据时的行为,以及在遇到锁超时后如何仍能继续获取数据。这引发了关于游标是否真正回滚以及为何能继续FETCH已回滚数据的疑问,并提出了可能的解释。
摘要由CSDN通过智能技术生成

使用游标的要小心了,游标在OPEN时会加锁:

实例:

表t1,数据如下:

ID MEMO

- -- ----

1   a1

2   b1

3   hhh

4   d1

5   e1

DB2默认锁定超时-1(不限制),方便测试修改为20(秒)

db2 update db cfg for sample using LOCKTIMEOUT 20

在第一个DB2 CLP窗口执行更新

连接到数据库:db2 connect to sample

执行更新:db2 +c "update t1 set memo = 'hhh1' where id =3"

查看锁:

C:\>db2pd -db sample -locks

Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:40:56

Locks:

Address    TranHdl    Lockname                   Type       Mode Sts Owner

Dur HoldCount  Att        ReleaseFlg rrIID

0x7FC70480 2          53514C43324832307F4760B841 Internal P ..S  G   2

1   0          0x00000000 0x40000000 0

0x7FC70700 2          02001300060000000000000052 Row        ..X  G   2

1   0          0x00000000 0x40000000 0

0x7FC70400 2          02001300000000000000000054 Table      .IX  G   2

1   0          0x00002000 0x40000000 0

表加意向互斥锁,更新的行(id = 3)加互斥锁

在第二个DB2 CLP窗口定义游标并打开:

连接到数据库:db2 connect to sample

定义游标:db2 "declare c1 cursor for select * from t1 for read only" (v8)

db2 "declare c1 cursor for select * from t1 with rs"(v9.7)

注:v8的游标定义,在版本8上open时锁等待,在版本9上不会出现锁等待,本实例主要说v9.7

db2 "declare c1 cursor for select * from t1 with rs"

db2 +c "open c1"

光标停止不动,在另外的DB2 CLP窗口查看锁及锁等待,信息如下:

锁:

C:\>db2pd -db sample -locks

Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:43:34

Locks:

Address    TranHdl    Lockname                   Type       Mode Sts Owner

Dur HoldCount  Att        ReleaseFlg rrI

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值