造成DUMP SAPSQL_ARRAY_INSERT_DUPREC的两个原因
观察:
用户BATCH01每天都爆出30多个dump SAPSQL_ARRAY_INSERT_DUPREC
先来看一下ST22的错误分析
关键字:
"SAPSQL_ARRAY_INSERT_DUPREC"
"CX_SY_OPEN_SQL_DB" "SAPLV05I" or "LV05IU15"
"SD_PARTNER_UPDATE"
代码出错位置(注意其中的VBPA,后面要用到):
可能原因一:
SD Number Range爆掉了..用SNRO检查Object RV_BELEG
然后分别检查表VBUP VBUK LIPS LIKP VBAP是否已经用完分配的number range
如果是这个原因的话,解决方法:
1. Archiving of the old deliveries
2. Assignment of an unused number range to the corresponding delivery type (e.g. transaction 0VLK).
可能原因二(较常出现):
先来看一下SM13的update error,发现与ST22的dumps完全匹配. 该用户在使用VA02时,无法将某些表内容更新进去.
点击随便一个update error
进入FM RV_SALES_DOCUMENT_UPDATE,记得前面说的表VBPA吗,就是在这里出的错,所以我们要点击table FXVBPA
注意比较最后一行70,它有2行PA值都为"PY",而其他项目则是PA=BP, PA=PY [PA即Partner Function]
再来看看table VBPA, 70行已经有一个RG了(就是PY),无法再插入同一个PY,所以更新失败了!!!
回到table FXVBPA,找字段UPDKZ, 发现其他行都为空,只有70行是"I",说明这里更新失败
("I": The entry should be included again in the database.
" ": The entry should not be changed in the database.)
MAN VBELN POSNR PA KUNNR UPDKZ
500 2717 000050 BP 174
500 2717 000050 PY 174
500 2717 000060 BP 174
500 2717 000060 PY 174
500 2717 000070 PY 174
5002717 000070 PY 174 I <--- root cause here
原因找到了..接下来说说如何继续排查到底是如何导致有2个相同的parter function
1.先来验证是否是user exits有问题
可以在program MV45AFZZ, MV45AFZA, MV45AFZB中的FORM最上面插入如下代码:
CHECK SY-UNAME <> 'SAPWALLD'. (或任何你可以使用的用户名).
如此一来,该用户跳过写在这些程序中的user exits,然后检查是否该用户在使用VA02时有同样的dump
如果果然是user exits出了问题,则需要检查写在program MV45AFZZ, MV45AFZA, MV45AFZB中的user exits
特别是"USEREXIT_SAVE_DOCUMENT"和"USEREXIT_SAVE_DOCUMENT_PREPARE"
SAP Note:
178328 Problems due to incorrect user exits in SD
207934 Update termination in RV_SALES_DOCUMENT_ADD/RV_SALES_DOCUMEN