锁数量超过限制时 COBOL-DB2 程序的行为

db2databasebig data analyticscobol更新于 2026/2/7 22:52:17

问题:一旦表空间上的锁数量超过定义的限制,COBOL-DB2 程序将如何表现?

解决方案

应用程序可以在 DB2 资源(例如页面、表行等)上放置的锁数量在 DSNZPARM 中定义。一旦任何表中的页面级和行级锁数量超过允许的限制,就会发生锁升级。

在锁升级过程中,DB2 会释放其持有的页面级或行级锁,并尝试获取表空间级或更高级别的锁。在这种情况下,由于整个表空间都被锁定以进行处理,应用程序现在对 DB2 资源拥有更广泛的访问权限/范围。

例如,如果我们有以下 DB2 ORDERS 表。

ORDER_ID
ORDER_TOTAL
ORDER_DATE
A22345
1867
2020-10-22
A62998
5634
2020年11月11日
A56902
7615
2020年10月14日
A56911
87960
2020年10月30日
A56915
132
2020年10月9日
A56918
80363
2020-04-10

如果 COBOL-DB2 程序正在更新此表,其中谓词为 ORDER_TOTAL > 1000 和 ORDER_DATE > 2020-10-15。因此,COBOL DB2 程序在多行中设置了锁,超过了 DSNZPARM 中定义的最大限制,因此将发生锁升级。

在这种情况下,DB2 将释放多行中持有的锁,并锁定整个 ORDERS 表。如果由于任何原因,DB2 未能成功获取 ORDERS 表中的表锁,则将发生回滚,DB2 将恢复表中所做的所有更改。