我的iSeries ILE程序因未提交的更改而崩溃。现在我想用ENDCMTCTL结束承诺控制(再次启动程序,程序本身启动承诺控制),但它失败了,消息是:
CPF8355 - ENDCMTCTL not allowed. Pending changes active
是否有一种方法可以回滚/提交更改并以正确的方式结束承诺控制?我更有经验的同事建议,只需退出并开始新的会话。
编辑
我尝试过WRKCMTDFN和其中的所有操作,但都没有成功。强制回滚和强制提交失败,返回消息:
CPD83ED -Commitment definition not eligible for forced rollback ...
... 2 -- The logical unit of work, for this commitment definition, is not in
an undecided state.
消息ID可能是CPF8355,第二级文本有助于了解情况:
Cause . . . . . : An attempt was made to end commitment control for
commitment definition &1. However, there are one or more active resources
under commitment control for the commitment definition. The resources could
be one of the following:
-- Local files
-- Remote files
-- API commitment resources
-- Remote SQL database
使用WRKJOB OPTION(*CMTCTL)查看哪些资源仍处于开放状态并处于承诺控制之下。如果有打开的文件,程序应该在尝试ENDCMTCTL之前关闭它们。如果这是一个RPG程序的重复调用,由于性能原因,文件处于打开状态,请使用一个特殊参数最后一次调用它,该参数将告诉它关闭文件。或者,如果是ILE程序,请考虑RCLACTGRP。
阅读文档后,您似乎没有太多其他事情可做。我本希望您可以选择提交更改或在此基础上回滚更改:
如果交互式作业存在未提交的更改,则会显示一条消息发送,询问用户是否应该提交或滚动更改在承诺定义结束之前返回。对于批处理作业更改将回滚。
因为你没有得到这个选项,我认为你的工作已经开始了提交(或回滚)过程,你现在不能更改它。因此,你只能选择注销——这将结束你的工作和相关的承诺控制。