锁数量超过限制时 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 将恢复表中所做的所有更改。

