COBOL-DB2 程序在锁数量超过限制时的行为
问题:当放置在表空间上的锁数量超过定义的限制时,COBOL-DB2 程序将如何运行?
解决方案
应用程序可以在 DB2 资源(如页面、表行等)上放置的锁数量在 DSNZPARM 中定义。一旦任何表中的页面和行级锁的数量超过允许的限制,就会发生锁升级。
在锁升级中,DB2 释放它持有的页面或行级锁,并尝试获取表空间级或更高级别的锁。在这种情况下,应用程序现在对 DB2 资源具有更广泛的访问/范围,因为整个表空间都被锁定以进行处理。
例如,如果我们有以下 DB2 ORDERS 表。
订单 ID (ORDER_ID) | 订单总计 (ORDER_TOTAL) | 订单日期 (ORDER_DATE) |
A22345 | 1867 | 22-10-2020 |
A62998 | 5634 | 11-11-2020 |
A56902 | 7615 | 14-10-2020 |
A56911 | 87960 | 30-10-2020 |
A56915 | 132 | 09-10-2020 |
A56918 | 80363 | 04-10-2020 |
如果一个 COBOL-DB2 程序正在更新此表以满足 ORDER_TOTAL > 1000 和 ORDER_DATE > 2020-10-15 的条件。因此,COBOL DB2 程序在多行中放置了锁,超过了 DSNZPARM 中定义的最大限制,那么将发生锁升级。
在这种情况下,DB2 将释放在多行中持有的锁,并在整个 ORDERS 表中放置一个锁。由于任何原因,如果 DB2 无法成功获取 ORDERS 表中的表锁,则会发生回滚,并且 DB2 会恢复对表所做的所有更改。
广告