点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)在保存销售订单时,我正在调用更新...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)在保存销售订单时,我正在调用更新...
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
在保存销售订单时,我正在调用更新任务来更新Z表。 我正在遍历一些标准SAP记录,然后在每次迭代中使用wait参数使Z表入队,并删除记录/添加新记录,然后最终出队。
我发现的是,当多个更新任务正在运行时,第一个更新任务将一遍又一遍地锁定和解锁表,直到它处理完所有记录为止,第二个更新任务才能获得该锁。 这实际上使第二个更新任务一直等到第一个更新任务完成,因为我希望他们在第一个任务释放它时共享锁。
有人可以为我指出要检查/更新的内容的正确方向,以使此事情发生。 我最初曾尝试完善lock参数,但由于某些修改/删除where子句而继续陷入死锁,除非我锁定了整个表。
谢谢!
-克里斯
据我所知,您期望一种锁定队列和所有入队请求将按调用顺序被授予。
这不是它的工作方式,请参阅doco中的WAIT参数: https://help.sap.com/viewer/ec1c9c8191b74de98feb94001a95dd76/7.5.12/zh-CN/cf21eebf446011d189700000e8322d00.html
如果由于存在竞争的锁定而导致锁定尝试失败,则系统将在一定时间后重复锁定尝试。 仅在自首次锁定尝试以来经过一定的时间限制后,才会触发FOREIGN_LOCK异常。 等待时间和时间限制由配置文件参数定义。
因此,您的解锁-锁定周期太快,以至于另一个程序在解锁后的短暂时间内无法重试。
您可以使用一个简单的程序来验证此行为:
在两个会话之间运行,彼此之间的间隔不到10秒,您将看到第一次运行获得了两个锁。
我的建议是一次性收集您的更新并进行处理。 或用特定于工作的钥匙(例如公司代码或其他任何东西)锁定。
一周热门 更多>