错误代码及 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 不可行)。
广告