一
前言
拯救SAP系統系列是對應與搞死SAP系統系列. (感覺就像是防毒軟體公司,先放出病毒,再搞個專殺工具).
在搞死SAP系統系列出來後, 立馬就有人中招. 看來幹壞事遠比做好事對人的誘惑要更大一些.
本文是用于解決 搞死SAP系統系列 讓系統無法登入
詳見連結
無峰,公衆号:ABAP 技巧與實戰搞死SAP系統系列 讓系統無法登入
本文中提到的"方式"來自上述連結. 請參照閱讀
二
SAPMSYST文法錯誤
前文中提到方式四/方式五 導緻系統無法登入. 表現形式是輕按兩下登入圖示時. 系統就會報錯SHORT DUMP (感謝勇敢的讀者提供截圖)
三
方式一 拯救
針對 無意删除了T000表内容
使用事務代碼SCC4新增被删除的集團 (注意不能通過SE11/SE16N添加記錄. 因為集團字段的特殊性. 這些工具添加的記錄都是目前登入集團的).
四
方式二/方式三 拯救
針對 增強中的報錯和文法錯誤.
這個報錯出現時,可能有兩種情況. 已經登入系統和尚未登陸系統.
- 已經登入系統. 此時新的登入已經無法進入了. 因為之前登入成功過. 可以找到增強程式 ZXUSRU01 注釋或清空裡面的代碼,激活即可.
- 尚未登入系統. 此時已經無法登入SAP系統了. 隻能嘗試通過資料庫用戶端登陸資料庫系統(比如HANA STUDIO ). 使用語句清空表REPOSRC字段LOAD
SQL語句如下:
UPDATE REPOSRC SET LOAD = '' WHERE PROGNAME = 'ZXUSRU01'
如果還不能登入, 嘗試删除表REPOLOAD 中的記錄 SAPMSYST
DELETE FROM REPOLOAD WHERE PROGNAME = 'SAPMSYST'
原理
SPRING
清空源代碼 REPOSRC-LOAD .
清空編譯代碼 REPOLOAD. 這樣系統會重新編譯SAPMSYST
五
方式四/方式五 拯救
針對标準登入程式SAPMSYST文法錯誤
在下面的例子中. ECC系統在HANA資料庫使用的catalog是SAPHE9(出現問題的系統)/SAPHE3(正常系統),一般情況下, ECC系統在底層資料庫使用的catalog都是SAPABAP1(依賴有BASIS的安裝) , 無需授權操作. 實際處理時請務必注意.
如果SAPMSYST丢失或者存在文法錯誤. 輕按兩下系統圖示後會報DUMP .無法登入
此時可以使用如下步驟從其它正常的系統擷取SAPMSYST源代碼(以下步驟基于HANA資料庫, 如果非HANA資料庫, 過程類似,具體步驟的處理方法可能有點變化)
系統的激活程式存放在表 REPOSRC 中. 對于存在文法錯誤的程式. 在ST22中可以看到報錯的程式名稱 SAPMSYST
01
正常系統導出程式
HANA工作台 登入可以正常系統,使用賬号SAPHE3
打開表 REPOSRC的編輯器
點選下圖的導出按鈕
獲得表的建立的SQL語句,修改表名,添加一個Z
執行SQL 建立新的Z表
把有問題的代碼複制到新的臨時表中 INSERT INTO ZREPOSRC SELECT * FROM REPOSRC WHERE PROGNAME = 'SAPMSYST'
把新表導出
02
代碼導入到目标系統
登陸目标系統(使用SYSTEM賬号,出現SAPGUI登入問題的系統),導入表定義及内容. (如果源系統和目标系統的catalog一緻, 則無需使用SYSTEM賬号)
對SAPHE9使用者授權 SAPHE3的SQL通路權限(如果catalog一緻, 無需授權)
03
替換有問題的程式代碼
用SAPHE9登陸
執行SQL
UPDATE "SAPHE9"."REPOSRC" SET DATA = ( SELECT DATA FROM "SAPHE3"."ZREPOSRC" WHERE PROGNAME = 'SAPMSYST' )
WHERE PROGNAME = 'SAPMSYST'
上述步驟會把源系統的正确的代碼傳遞到目标系統
六
總結
方式四/五的拯救也适用于方式二/三 ,目标都是找回正常的代碼.
上述解決方案中使用了兩個重要的表
- REPOSRC 存放激活的SAP程式的源代碼.
- REPOLOAD 存放了編譯後的代碼.
SCN網站中有一篇文章詳細講解了這兩個表的用處. 有興趣的讀者可以自行閱讀一下下面的連結, 以加深這這兩個表作用的了解.
https://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=464686816
上述方案成立的前提是有一個能夠正常登入的系統提供源代碼. 如果沒有,就比較麻煩了.
終極方案是讓BASIS恢複備份. 隻是這樣可能會丢失一段時間的工作(視備份周期而定)
THE
END
約定
如果你對這篇文章感興趣,請幫忙點贊分享.
(如果你真的喜歡這篇文章,請記得回來打個賞,作為支援我繼續下去的動力,這是一個正回報過程. 越多的人打賞,作者越有動力分享,讀者就能享受更多的福利.畢竟打賞的金額富不了我,窮不了你,卻能支援這個公衆号長久發文.)
公衆号 : syjf1976_abap