【发布时间】:2019-05-01 06:53:01
【问题描述】:
在 IBM DB2 LUW 中处理对象锁定时,我在我的表上使用了读取稳定性 (RS) 级别锁定。这会锁定我在 Select 查询中获取的记录,除非我完成了事务并明确提及 COMMIT 并释放锁定。在这个过程中,另一个查询/过程想要返回锁定的行用于不同的目的。这个怎么办?另外,还有一个参数WAIT_FOR_OUTCOME来设置锁定时间,这个超时在哪里定义?
【问题讨论】:
-
如果您提供有关锁定和等待语句的更多信息,那就太好了。否则有很多问题。就像读者在 db2 中不会阻塞读者一样,除非您在锁定选择语句中使用“with rs use and keep [update|exclusive] locks”子句,那么如何准确地获得锁定等待?究竟在哪些陈述上? “如何解决这个问题”的问题应该更具体——去哪里,你想达到什么目标? “等待结果”子句不是为会话设置锁定超时,它是 CS(而不是 RS)阅读器等待或不等待锁定的指令。
-
谢谢。让我告诉你我想要做什么。我有一个过程,我试图通过从同一个表中选择记录并修改一些列来插入表。我想锁定这些源记录,同时将其复制为应用程序中的某个人也可能会尝试编辑这些记录,因此我通过在 select 子句后提及 WITH RS 来使用 RS 级别锁定。
-
..虽然此 INSERT 正在进行中,但如果应用程序中的某个人(我们有 UI 和服务调用)尝试编辑该记录,我想将锁定的记录发送给他们,并释放锁定只有在我的程序完成并提交记录从而释放锁之后。
-
什么意思 - “我想把被锁定的记录发给他们”?如果您使用
insert ... select ... with rs,那么您读取的这些行已经锁定到事务结束,其他会话将无法编辑这些行。
标签: plsql db2 procedure isolation-level locks