死锁和与自动重新启动的交互

DBCTL 检测事务死锁,这可能在两个事务等待相同的两个资源变为可用时发生; 即,两个事务都需要这两个资源。

有关事务死锁的描述,请参阅 事务死锁的可能性
图 1。 事务死锁 (transaction deadlock)
图形在以下文本中进行了描述。

图 1中,事务 A 请求并锁定 DBCTL 资源 D。 然后,事务 B 请求并获得 CICS® 资源 C 的锁。 事务 A 需要 CICS 资源 C 并提出请求,但必须等待,因为事务 B 锁定了该资源。 事务 B 需要 DBCTL 资源 D 并请求它,但必须等待,因为事务 A 对它有锁定。 在序列结束时,两个事务都在等待另一个事务释放资源,因此这两个事务都无法完成。 这种情况是事务死锁。

如果事务死锁中涉及的资源是 DBCTL 数据库和 CICS 资源,那么如果指定了 DTMOUT 时间段,那么等待 CICS 资源的任务将在其 DTIMOUT 时间段过后异常终止。 在 图 1中的示例中,事务 A 正在排队等待,直到事务 B 释放针对 CICS 资源 C 持有的锁定为止,因此事务 A 在 DTIMOUT 到期时异常终止。

如果未对使用 CICS 资源的任务指定 DTIMOUT ,那么这两个任务都将无限期暂挂,除非其中一个任务被 CICS 主终端操作员取消 (如 清除正在使用 DBCTL 的事务中所述)。

如果事务死锁中涉及的资源都是 DBCTL 数据库,那么 DBCTL 会在尝试创建死锁的数据库请求时检测潜在死锁。 然后, DBCTL 会导致更新活动较少的任务异常终止。 异常终止 (ADCD) 会导致所有资源回退。 如果在使用 DEDB 时检测到死锁,那么将发出 FD 状态码,而不是 ADCD 异常终止。 请参阅 状态码和回退 以获取详细信息。

对于 DL/I 全功能数据库和 DEDB ,如果指定了自动重新启动,那么此时可以重新启动任务。 请参阅 自动重新启动管理 (Automatic restart management)。 但是,仅当事务在第一个异常终止时 (或仅在第一个异常终止时) ,才能执行此操作 UOW ,并且自读取初始终端输入以来没有任何终端输入或输出。