当锁数超过限制时,COBOL-DB2程序的行为
问题:一旦放置在表空间上的锁的数量超过定义的限制,COBOL-DB2程序将如何工作?
解
在DSNZPARM中定义了应用程序可以在DB2资源(例如页面,表行等)上放置的锁数。一旦任何表中的页面和行级别锁的数量超过了允许的限制,就将进行锁升级。
在锁升级中,DB2释放它持有的页面或行级别的锁,并尝试获取表空间级别或更高级别的锁。在这种情况下,由于整个表空间已被锁定以进行处理,因此应用程序现在对DB2资源的访问/范围更广。
例如,如果下面有DB2ORDERS表。
如果COBOL-DB2程序正在针对谓词ORDER_TOTAL>1000和ORDER_DATE>15-10-2020更新此表。结果,COBOLDB2程序将锁放置在超过DSNZPARM中定义的最大限制的多行中,然后将发生锁升级。
在这种情况下,DB2将释放多行中持有的锁,并将锁放置在整个ORDERS表中。由于任何原因,如果DB2无法成功获取ORDERS表中的表锁,则会发生回滚,并且DB2将还原表中所做的所有更改。