数据如何恢复(以VBAP表为例,SE14调整表的逻辑是把数据先复制到临时表QCMVBAP,然后将VBAP整个干掉,然后把新的表结构给VBAP,然后把临时表数据给VBAP)<转载>"/>
SAP SE14丢失的数据如何恢复(以VBAP表为例,SE14调整表的逻辑是把数据先复制到临时表QCMVBAP,然后将VBAP整个干掉,然后把新的表结构给VBAP,然后把临时表数据给VBAP)<转载>
原文链接:
在做项目时有时需要对标准表做增强,增加字段,但是如果增加的字段太长了想要改小,这时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 DESCENDEXEC .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调整前大家都悠着点把,要我看,改小还不如新增个新字段,干脆就弃用原来的字段就好了。
最后 ,补充一个特别特别重要的问题,在改短字段前,一定要注意表里面的数据没有超长了,保证改短后的字段能存下所有数据,或者事先删除或修改数据,不然调整时必定报错,爆出超长的错,但是表又做不了调整了,数据也删不掉了,最后数据必定丢失,别问我为什么这么清楚,说出来都是泪
更多推荐
SAP SE14丢失的数据如何恢复(以VBAP表为例,SE14调整表的逻辑是把数据先复制到临时表QCMVBAP,然后将VBAP整个干掉,然后把新的表结构给VBA
发布评论