我想在DB2(版本11)中锁定一个表,我不希望其他人在尝试更新锁定表时等待我的锁定。 (抛出异常或返回错误代码)
我使用了以下命令: 在独家模式下锁定表格
但其他连接总是等待。
有没有办法停止等待?
答案 0 :(得分:3)
对于Linux / Unix / Windows上的Db2,如果使用“LOCK TABLE ... IN EXCLUSIVE MODE”,则其他连接将等待您提交/回滚。
对于Linux / Unix / Windows上的Db2,默认情况下,其他连接将等待LOCKTIMEOUT秒(默认值= -1 =永远等待),或者其他应用程序在其连接中通过{等待连接的任何内容{1}}(可以包括设置NOT WAIT或其他值)或在其他应用程序的Db2-client配置中。请参阅文档here。
有关客户端配置选项(db2cli.ini,db2dsdriver.cfg,连接属性等),请参阅Db2知识中心以获取详细信息。
重要的是要理解,其他应用程序需要调整其锁定超时(无论是在代码中还是在Db2-client配置中),否则数据库参数LOCKTIMEOUT将确定他们的等待时间。
因此,简而言之,如果您希望其他应用程序不等待,那么必须为此目的编程/配置这些应用程序,或者必须正确配置数据库配置LOCKTIMEOUT或者同时配置这两个应用程序
实际上,这意味着您需要避免以独占模式(隐式或无效)锁定表,或者您需要在最安静的时间执行此操作并尽可能缩短锁定的持续时间。特别是,你的工作无法告诉其他Db2连接如何调整他们的lockwait行为!
答案 1 :(得分:-1)
也许其他用户可以使用未提交的阅读WITH UR
?
或者,您可以使用IN SHARE MODE
代替EXCLUSIVE
锁定