关于DB2的锁定问题
gdlin 2004-04-27 11:11:27 我发现DB2一个锁定的问题,在7.2 和 8.1下都出现了,可能是我方法不对。请大家帮我看看:
表T1(c1 int ,c2 int)是行锁。
Z:\>db2 select tabname,locksize from syscat.tables where tabname='T1'
TABNAME
LOCKSIZE
--------------------------------------------------------------------------------
------------------------------------------------ --------
T1
R
里面两条记录(1,1)(2,2)。设置DB CFG -》(LOCKTIMEOUT) = 10,锁定超时10秒
在一个命令窗口,输入一个update语句,但不提交它:
Z:\>db2 +c update t1 set c2=3 where c1=1
DB20000I SQL 命令成功完成。
另一个命令窗口,查询一个条件不同的记录,10秒后返回超时错误:
root:/>db2 "select * from t1 where c1=2"
SQL0911N因为死锁或超时,所以当前事务已回滚。原因代码为"68". SQLSTATE=40001
68 由于锁定超时而导致事务已回滚。
而我这两条语句非常明显的where条件是不同的,但update语句把和他条件不相干的另一行也锁定了。按理来说我update锁定的是条件是c1=1 ,而select的条件是C1=2,两个并不会产生锁的争用啊
大家可以试试。并请明家指定一条明路。谢谢!