2009-10-06 22 views
0

DB2中是否有可能检测表是否被锁定。实际上,当我们使用Select语句并且该表被锁定时[可能是因为正在执行插入或删除操作],那么我们必须等待表被解锁。在DB2或任何数据库中是否可以检测表是否被锁定?

在我们的应用程序有时甚至2-3分钟。我的想法是,如果我可以通过某种机制来检测锁定的表格,那么我甚至不会尝试获取记录,而是会发出一些消息。

不仅在DB2中,而且可以在任何数据库中检测到这一点。

回答

2

我从来没有使用DB2,但根据documentation看来你可以使用以下进行查询不等待锁:

SET CURRENT LOCK TIMEOUT NOT WAIT 

或者,你可以设置锁定超时值为0

SET CURRENT LOCK TIMEOUT 0 

这两种说法都有相同的效果。

一旦你有了这个,你可以尝试从表中选择并捕获错误。

+0

哇..我想给你+5这个:D。 – 2009-10-06 12:10:10

1

我会建议不要等待,而是指定一个低锁定超时(10-30s)。如果目标表只是暂时锁定(小的更新,比如说1秒),您的第二个应用程序将立即超时。如果您有10秒的超时时间,第二个应用程序会简单地等待第一个应用程序进行COMMIT或ROLLBACK(1秒),然后继续前进。

另外,当涉及到发放锁时,还有一些“先到先得”策略 - 如果第二个应用“放弃”,第三个应用可以进入并获取第二个应用所需的锁。第二个应用可能会因为不断放弃而遭遇锁定饥饿。

如果您遇到正在发生的并发问题,请考虑锁定监视以了解数据库如何被访问。有很多有用的统计信息(如平均锁定等待时间等)可以帮助您调整参数和应用程序行为。

DB2 V9.7 Infocenter - Database Monitoring

相关问题