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

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

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

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

例如,如果下面有DB2 ORDERS表。

ORDER_ID
合计订单
订购日期
A22345
1867年
2020年10月22日
A62998
5634
2020年11月11日
A56902
7615
2020年10月14日
A56911
87960
2020年10月30日
A56915
132
2020/09/10
A56918
80363
2020/04/10

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

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