SAP-ABAP-SE14丢失的数据如何恢复

在做项目时有时需要对标准表做增强,增加字段,但是如果增加的字段太长了想要改小,这时sap中SE11是不能直接激活的,需要SE14调整表才能改小,但是使用SE14风险太大了,稍微不注意就会导致被调整的表数据丢失。

以VBAP表为例,SE14调整表的逻辑是把数据先复制到临时表QCMVBAP,然后将VBAP整个干掉,然后把新的表结构给VBAP,然后把临时表数据给新的VBAP

所以千万注意注意,一定不要看着调整很久没有反应就自己强行断掉程序,这时基本都是在复制数据,你如果强行断掉了程序,那数据可不就是没有了嘛,如果运气好的话可能临时表QCMVBAP还有数据,那还有机会恢复

恢复代码如下,网上有个恢复MARC表的程序,但是在数据量大的情况下基本都会出现资源瓶颈,这里对那段代码做了优化,防止资源瓶颈

*&---------------------------------------------------------------------*
*& Report ZWEBAPI_TEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zwebapi_test NO STANDARD PAGE HEADING .

TABLES vbap .

DATA : itab TYPE  TABLE OF vbap WITH HEADER LINE .

START-OF-SELECTION .

DATA: LV_VBELN TYPE VBAP-VBELN ,LV_POSNR TYPE VBAP-POSNR.
 LV_VBELN = '9999999999'.
 LV_POSNR = '9999'.


DATA: LV_FLAG(1).
CLEAR: LV_FLAG.

WHILE LV_FLAG <> 'X'.

  EXEC SQL PERFORMING APPENDITAB .
    SELECT TOP 100000 * INTO :ITAB FROM QCMVBAP WHERE VBELN < :LV_VBELN  OR (VBELN = :LV_VBELN AND POSNR < :LV_POSNR) ORDER BY VBELN DESC , POSNR DESC
  ENDEXEC .

  DESCRIBE TABLE ITAB LINES DATA(LV_LINES).
  IF LV_LINES < 100000.
    LV_FLAG = 'X'.
  ENDIF.

  READ TABLE ITAB INTO DATA(LS_ITAB) INDEX LV_LINES.
  LV_VBELN = LS_ITAB-VBELN.
  LV_POSNR = LS_ITAB-POSNR.
  CLEAR: LS_ITAB.

  INSERT VBAP CLIENT SPECIFIED FROM TABLE ITAB .
  COMMIT WORK.
  REFRESH ITAB.
  WRITE SY-DBCNT .

ENDWHILE.


FORM APPENDITAB .

  APPEND ITAB TO ITAB .

ENDFORM .








 "    DATA: BEGIN OF wa,
 "           VBELN   TYPE VBAP-VBELN,
 "           POSNR   TYPE VBAP-POSNR,
 "         END OF wa.
 "
 "   EXEC SQL.
 "     SELECT VBELN, POSNR
 "            INTO :wa
 "            FROM QCMVBAP
 "            WHERE mandt  = '500' AND
 "                  VBELN = '1000000016'
 "   ENDEXEC.
 "
 "   IF wa IS NOT INITIAL.
 "
 "   ENDIF.

如果临时表还有数据,运行上面的代码就能找回数据了,这个代码是数据库层面的,是跨client的,但是不跨环境。

数据量大的情况下可能出现time out 的情况,运行程序建议跑后台job。

如果是别的表,代码不适应,大家可以根据逻辑自己做修改。

总之,以后再SE14调整前大家都悠着点把,要我看,改小还不如新增个新字段,干脆就弃用原来的字段就好了。

最后 ,补充一个特别特别重要的问题,在改短字段前,一定要注意表里面的数据没有超长了,保证改短后的字段能存下所有数据,或者事先删除或修改数据,不然调整时必定报错,爆出超长的错,但是表又做不了调整了,数据也删不掉了,最后数据必定丢失,别问我为什么这么清楚,说出来都是泪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值