问题:一旦放置在表空间上的锁的数量超过定义的限制,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将还原表中所做的所有更改。