当两个应用程序锁定彼此所需的数据时,将发生DEADLOCK条件。这两个应用程序都等待另一个释放锁,因此发生死锁。
让我们看一个例子来更好地理解这一点:
有两个正在执行的COBOL-DB2程序:PROG A和PROGB。
PROG A在ORDERS表中保存一个UPDATE LOCK,而PROG B在TRANSACTION表中保存一个UPDATE LOCK。在某个时间点,PROG A在TRANSACTION TABLE上需要一个UPDATE LOCK,而PROG B在ORDERS表上需要一个UPDATE LOCK,但是两个应用程序不能在同一页上放置UPDATE LOCK。
因此,这两个程序将相互等待以释放锁定并最终进入DEADLOCK状态。
如果程序进入DEADLOCK状态,则COBOL-DB2程序将失败,错误代码为-911和-913。-911表示DB2发出了自动回滚,而-913表示DB2没有发出自动回滚(DB2不可能)。