我在以下情况下遇到问题。
来自程序 A 的文件 MYFILE 上有一个记录锁。稍后 Session 突然断开连接,并在 MYFILE 上设置一个记录锁,并执行取消处理程序例程。在取消处理程序例程(程序 B)中,它尝试删除锁定在 MYFILE 中的记录,并且会话挂起,因为文件 MYFILE 是用 NOMAX 的 WAITRCD 时间编译的。现在没有人可以访问该帐户以执行其他会话的任何更新操作。
程序流程如下:
.... .... 程序 A(记录锁定) .... 程序 X(取消处理程序)->OVRDBF WAITRCD(3) 添加 .... 程序 B(会话冻结)->在上面添加 OVRDBF 后,会话没有冻结程序 C(发生会话冻结)-> 我仍然看到覆盖在那里,它是相同的默认激活组,没有承诺控制,也没有触发器
这里的场景是:由同一个作业/会话记录锁定。
我尝试了以下解决方案来解决此问题:
在取消处理程序(程序 B)中,我做了一个 OVRDBF,WAITRCD 为 3 到 5 秒。后来执行了上面的步骤,到了取消处理程序的时候,累死了删除锁定的记录,3到5秒后,它继续处理下一步,并写了锁定记录的错误消息。没有屏幕冻结。后来它继续执行另一个程序 C,它试图删除 MYFILE 中的锁定记录。但是现在会话再次挂起。
我检查了调用堆栈,所有程序都在默认激活组下,没有提交控制,也没有触发器。任何想法,为什么它克服了程序 B 而不是程序 C 的记录锁定情况。请告诉我。
问候, 苏瑞