编写事务重新启动程序
您可以编写事务重新启动用户可替换程序 (DFHREST) ,以参与有关是否重新启动事务的决策。
如果在事务的资源定义中指定了 RESTART (YES) (缺省值为 RESTART (NO)) ,那么当事务异常结束时, CICS® 会调用 DFHREST。
缺省程序在特定条件下请求重新启动; 例如,在程序隔离死锁的情况下 (即,当两个任务各自等待另一个任务释放特定 DL/I 数据库段或文件记录时) ,其中一个任务回退并自动重新启动,另一个任务被允许完成其更新。
有关重新启动事务的常规信息,请参阅 故障诊断以进行恢复处理。
注:
- 如果事务重新启动程序选择重新启动事务,那么将附加用于调用事务的初始程序的新任务。 即使任务在第二个或后续 UOW 中异常结束,并且 DFHREST 请求重新启动,也是如此。
- 将保留有关每个事务的重新启动总数的统计信息。
- 紧急重新启动不会重新启动任何任务。
- 在某些情况下,可以改为使用 SYNCPOINT ROLLBACK 命令来获取事务重新启动的优点。 虽然通常不建议使用 ROLLBACK 命令,但它会保留应用程序中的所有可执行代码。
计划替换缺省 DFHREST 时,请检查任何事务的逻辑是否不适合重新启动。
- 作为单个工作单元执行的事务是安全的。 执行循环的用户,以及每次从可恢复目标读取一条记录,更新其他可恢复资源并关闭同步点的用户,也都是安全的。
- 需要修改两种类型的事务,以避免错误地重复在异常终止之前的工作单元中完成的工作:
- 第一个工作单元和后续工作单元更改不同资源的事务
- 一个事务,其中在多个工作单元中使用输入数据区的内容。
- 对于事务重新启动,不应考虑其主要设施为 APPC 链接的分布式事务。 在对话的另一端仍处于活动状态时重新启动后端或前端事务会显示正确的错误处理和对话状态恢复问题。
必须满足以下所有条件, CICS 才能调用事务重新启动程序:
- 事务必须异常终止。
- 在到达事务结束时隐式同步点的落实点之前,必须检测到导致事务异常终止的事务异常终止。
- 该事务必须在其事务定义中定义为可重新启动。
- 事务必须与主体设施相关。
如果满足这些条件, CICS 将调用事务重新启动程序,然后决定是否请求重新启动事务。 CICS 随后可以覆盖决策 (例如,如果动态回退失败)。 另外,如果事务重新启动程序异常终止,那么不会重新启动事务。
如果不满足这些条件,那么 CICS 不会调用事务重新启动程序,并且不会重新启动事务。