点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
在保存销售订单时,我正在调用更新任务来更新Z表。 我正在遍历一些标准SAP记录,然后在每次迭代中使用wait参数使Z表入队,并删除记录/添加新记录,然后最终出队。
我发现的是,当多个更新任务正在运行时,第一个更新任务将一遍又一遍地锁定和解锁表,直到它处理完所有记录为止,第二个更新任务才能获得该锁。 这实际上使第二个更新任务一直等到第一个更新任务完成,因为我希望他们在第一个任务释放它时共享锁。
有人可以为我指出要检查/更新的内容的正确方向,以使此事情发生。 我最初曾尝试完善lock参数,但由于某些修改/删除where子句而继续陷入死锁,除非我锁定了整个表。
谢谢!
-克里斯
我只能 猜猜这可能与数据库提交有关。 虽然不确定我是否了解多重锁定情况。 标准SO更新事务(VA02)通过文档编号将锁定应用于整个销售订单。 如果我要为该文档更新Z表#我也将以相同的方式锁定。 为什么要拥有/需要多个锁?
我建议添加更多详细信息和代码示例。
这听起来可能是事实。 我将调查您提供的建议。 非常感谢。
关于作业专用键。 关于为什么尝试使用包含我锁定的键的where子句删除时为什么会出现死锁的想法? 即 会话1的订单#1锁定,会话2的订单#2锁定,然后执行Delete ztable,其中order = 2且键= blah1和key = blah2 ...等。
删除操作将永远不会完成,最终会因死锁而导致转储失败。
我将添加一些伪代码。 请注意,这太简单了。
在运行此程序进行测试时,我将40个订单的更新任务称为测试报告中的40次。 然后针对不同订单从另一个会话再次开始报告,并显示进度更新,向我显示已处理了多少订单。 第一份报告将在第二份报告开始处理之前处理所有40个问题,而我希望第二份报告能抓住两者之间的锁定,并同时进行处理。 希望这有助于澄清上面的一些问题。
在调试器中运行时,第二个会话将抓住锁,但将保留delete语句,就好像表仍被锁定到第一个会话,在运行出队后仍然具有它。
我最初尝试按文档编号进行锁定,但是在测试中,我的delete语句看起来像是在那种情况下条件(尽管它们只是在锁定的文档#上删除)的条件导致了死锁
一周热门 更多>