SAP DBSQL_DUPLICATE_KEY_ERROR SAPLNSDM_STOCK_POST

26 篇文章 6 订阅
18 篇文章 1 订阅

问题:BAPI_OUTB_DELIVERY_CONFIRM_DEC 无法做PGI,

        返回的subrc = 0    RETURN 是空的

        但是前台VL02 PGI 是可以的

         ST22查看系统dump 发现报错如下

经查 可通过note :2840883 - MIGO Dump related to inconsistent DB Table DAC_D_MATDOC 

 

 解决方式就是写一个Z的程序将下面程序布上去,执行后即可。

*&---------------------------------------------------------------------*
*& Report S4_XPRA_DAC_D_MATDOC
*&---------------------------------------------------------------------*
*& Template for XPRA programs based on guidelines from 2016
*& Data conversion guidelines are available at
*& https://wiki.wdf.sap.corp/wiki/x/OnNKbg
*&---------------------------------------------------------------------*
REPORT s4_xpra_dac_d_matdoc.

* This XPRA drops the index DAC_D_MATDOC~0 on the client field of table DAC_D_MATDOC.
* This drop is used to reduce memory consumption in the HANA DB which in general generates a concatenated key field for all keys
* Because DDIC requires the definition of keys and just one key field has been defined for this table duplicate record dumps would occur if data gets inserted.
* Therefore, this drop is required.
"--> coding deactivated as of 1902 because xpra is no longer required
"--> coding activated as of 1905 again since we need xpra when customer upgrade from FPS0, FPS1 1809OP

CONSTANTS: gc_logid TYPE upgba_logid VALUE sy-repid.
DATA:      lv_subrc TYPE sy-subrc.

cl_upgba_logger=>create( EXPORTING iv_logid = gc_logid iv_logtype = cl_upgba_logger=>gc_logtype_tr ).
cl_upgba_logger=>log->cleanup( ).

* Ensure only privileged user are allowed to manually start the XPRA
* 1. check for SUM privilege
AUTHORITY-CHECK OBJECT 'S_ADMI_FCD' ID 'S_ADMI_FCD' FIELD 'SUM'.
IF sy-subrc NE 0.
*   2. check for application-specific (or developer privilege)
  "authority-check object '<appl_auth_obj>' id '<appl_auth_id>' field '<auth_fld>'.
  AUTHORITY-CHECK OBJECT 'S_DEVELOP'
    ID 'DEVCLASS' FIELD '*'
    ID 'OBJTYPE'  FIELD 'PROG'
    ID 'OBJNAME'  FIELD sy-repid
    ID 'P_GROUP'  DUMMY "not required in this context
    ID 'ACTVT'    FIELD '02'.
  IF sy-subrc NE 0.
    MESSAGE e900(upgba) INTO cl_upgba_logger=>mv_logmsg.
    cl_upgba_logger=>log->trace_single( ).
    cl_upgba_logger=>log->close( ).
    EXIT.
  ENDIF.
ENDIF.

MESSAGE i034(upgba) WITH 'Starting to drop index DAC_D_MATDOC~0' sy-datum sy-uzeit INTO cl_upgba_logger=>mv_logmsg ##NO_TEXT.
cl_upgba_logger=>log->trace_single( ).

CALL FUNCTION 'DB_EXISTS_INDEX'
  EXPORTING
    tabname         = 'DAC_D_MATDOC'
    indexname       = '0'
  IMPORTING
    subrc           = lv_subrc
  EXCEPTIONS
    parameter_error = 1
    OTHERS          = 2.
IF lv_subrc = 0. "index exists --> drop
  CLEAR lv_subrc.
  CALL FUNCTION 'DB_DROP_INDEX'
    EXPORTING
      dbindex               = 'DAC_D_MATDOC~0'
      tabname               = 'DAC_D_MATDOC'
    IMPORTING
      subrc                 = lv_subrc
    EXCEPTIONS
      index_not_dropped     = 1
      program_not_generated = 2
      program_not_written   = 3
      OTHERS                = 4.
  IF sy-subrc <> 0 OR lv_subrc <> 0.
    MESSAGE w601(pu) WITH 'Index not dropped' '(due to internal error)' sy-datum sy-uzeit  INTO cl_upgba_logger=>mv_logmsg ##NO_TEXT.
    cl_upgba_logger=>log->trace_single( iv_plevel = cl_upgba_logger=>gc_plevel_two iv_severity = cl_upgba_logger=>gc_post_process_rc ).
  ELSE.
    MESSAGE i034(upgba) WITH 'Index DAC_D_MATDOC~0 dropped' sy-datum sy-uzeit INTO cl_upgba_logger=>mv_logmsg ##NO_TEXT.
    cl_upgba_logger=>log->trace_single( iv_plevel = cl_upgba_logger=>gc_plevel_two ).
  ENDIF.
ELSE. "index not available, no drop
  MESSAGE i601(pu) WITH 'Index does not exist.' 'Drop not necessary' sy-datum sy-uzeit  INTO cl_upgba_logger=>mv_logmsg ##NO_TEXT.
  cl_upgba_logger=>log->trace_single( iv_plevel = cl_upgba_logger=>gc_plevel_two ).
ENDIF.

cl_upgba_logger=>log->close( ).

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值