错误代码及 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 千次浏览

开启您的职业生涯

完成课程获得认证

开始
广告