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 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告