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 会恢复对表所做的所有更改。

更新于: 2020-11-30

801 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告