錯誤程式碼及 DB2 中的死鎖成因及示例


當兩個應用程式相互鎖定彼此需要的資料時,將會產生 DEADLOCK 條件。兩個應用程式都會等待另一個應用程式釋放鎖,因此發生死鎖。

讓我們看一個示例來更好地理解這一點

有兩個 COBOL-DB2 程式正在執行中:PROG A 和 PROG B。

PROG A 在 ORDERS 表中持有 UPDATE LOCK,而 PROG B 在 TRANSACTION 表中持有 UPDATE LOCK。在某個時間點,PROG A 需要在 TRANSACTION 表上放置 UPDATE LOCK,而 PROG B 需要在 ORDERS 表上放置 UPDATE LOCK,但兩個應用程式程式無法在同一頁面上放置 UPDATE LOCK。

因此,兩個程式會互相等待對方釋放鎖,最終進入 DEADLOCK 狀態。

如果程式進入 DEADLOCK 狀態,則 COBOL-DB2 程式將失敗,錯誤程式碼為 -911 和 -913。-911 表示 DB2 發出了自動回滾,而 -913 表示自動回滾不是由 DB2 發出的(DB2 不可行)。

更新於: 2020 年 11 月 30 日

2 千次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始
廣告