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 會恢復對錶所做的所有更改。
廣告