点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
尊敬的专家,
我们正在使用SELECT FOR UPDATE进行数据库锁定。 如果发生冲突,我们希望第二个SELECT导致死锁,并显示在DB01中。 通常,此锁定仅持续1或2秒,第二个SELECT继续。
在某些系统中,这不会导致DB01中的保持状态,而只是出现短暂的转储类别安装错误,运行时错误DBSQL_SQL_ERROR,异常CX_SY_OPEN_SQL_DB。
数据库错误文本:
SQL消息:ORA-00060:在等待资源时检测到死锁
SQL dbsl rc:99
当尝试通过调试进行检查时,我们总是看到DB HOLD,因此我们无法直接测试问题,而只能在ST22中看到转储。
-转储而不是保留状态的原因是什么?
-我问我们的基础人员,但他们没有任何线索。 在谷歌我发现了ABAP内核中的问题的一些引用(我们使用749pl222)。 这可能是已知的内核问题吗?
谢谢您的帮助!
最好的问候,
Alej
感谢您的快速反馈-非常感谢。 我很清楚问题本身就是数据库错误。 我仍在寻找有时会转储而不是保留的原因。 该行为可能是ABAP内核错误,不是吗?
目前,我正在研究帮助文档。...
此文档明确指出第二个进程将等待第一个持有锁的进程:
[...]如果某个事务由于某个对象已经被另一个事务锁定而无法对其进行锁定,则它将等待,直到另一个事务释放了该锁。 这可能导致死锁。 例如,当两个事务正在等待另一个事务持有的锁时,就会发生死锁。 https://help.sap.com/doc/abapdocu_731_index_htm/7.31/zh-CN/abendb_lock.htm
另一方面,本文档提到死锁始终存在异常:
如果设置锁定会产生死锁,则会引发异常。
https: //help.sap.com/doc/abapdocu_731_index_htm/7.31/zh-CN/abapselect_clause_lines.htm#!ABAP_ONE_ADD@1 @
所以我仍然想知道对此的预期行为是什么...
事实上,我在这里看不到矛盾。
如果检测到死锁,则存在异常。 如果可以通过等待解决问题,那么也不例外。 那是我的理解。
Nevermind ...从Wiki https://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=414089456 和KBA 84348-Oracle死锁,ORA- 00060如何正确跟踪正在发生的事情。 问题是由我们不知道的隐式增强中的一些自定义实现引起的。 我们明天将与开发人员讨论如何解决此问题。
因此,当然,文档非常正确,内核中没有问题,而是客户应用程序错误。
一周热门 更多>