DB2 LUW中的对象锁定

0tdrvxhp  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(185)

在IBM DB2 LUW中处理对象锁定时,我使用的是读稳定性表上的(RS)级锁定。这将锁定在选择查询中提取的记录,除非我完成事务处理并显式提及COMMIT并释放锁定。在此过程中,另一个查询/过程希望返回锁定的行以用于其他目的。如何进行此操作?另外,有一个参数WAIT_FOR_OUTCOME来设置锁定时间,我在哪里定义这个超时?

bkhjykvo

bkhjykvo1#

信息不足:CUR_COMMIT数据库的有效设置是什么?此外,锁定行为可能会随您尚未提及的特定Db2注册表设置(如DB2_SKIP_INSERTED、DB2_SKIP_DELETED等)而更改。
如果CUR_COMMIT数据库参数得有效值为ON,并且另一个连接正在使用CS隔离进行查询,则另一个连接将获取锁定行得当前提交值(即,写入程序没有阻塞读取程序).
如果希望使用wait for outcome,它是一个适用于SELECT语句的子句,请参阅documentation
使用特殊寄存器,通过
SET CURRENT LOCK TIMEOUT WAIT n ;(其中n是秒数),否则将应用客户机端超时(如果相关)或数据库级别LOCKTIMEOUT设置,以较低者为准。请注意,LOCKTIMEOUT的默认值为-1(永远等待),这几乎总是不合适的,OLTP的典型值为30或60。
其他连接可以尝试对每条语句使用UR isolation(例如,用于选择锁定行值的查询)。

vngu2lb8

vngu2lb82#

在v11.5.6之前,Db2 LUW不允许在语句级指定锁等待超时。它没有用于此的SQL语句语法。
使用v11.5.6或更高版本,您可以执行以下操作:

SELECT *
FROM   some_table
WHERE  col1 = 'Foo'
FOR READ ONLY
WITH RS USE AND KEEP EXCLUSIVE LOCKS 
WAIT FOR OUTCOME WAIT 5
;

上面的代码将在查询返回的行上创建一个排他的行级锁。新添加的代码是WAIT 5,它意味着等待锁的时间为5秒,否则将抛出错误。
在v11.5.6之前,只能在会话级别或服务器级别指定锁定超时。这两个级别都在mao's answer中。
如欲了解更多信息,请访问:https://www.ibm.com/docs/en/db2/11.5?topic=statement-concurrent-access-resolution-clause

相关问题