天天看點

拯救SAP系統系列 恢複系統登入

前言

拯救SAP系統系列是對應與搞死SAP系統系列. (感覺就像是防毒軟體公司,先放出病毒,再搞個專殺工具).

在搞死SAP系統系列出來後, 立馬就有人中招. 看來幹壞事遠比做好事對人的誘惑要更大一些.

本文是用于解決 搞死SAP系統系列 讓系統無法登入

詳見連結

無峰,公衆号:ABAP 技巧與實戰​​搞死SAP系統系列 讓系統無法登入​​

本文中提到的"方式"來自上述連結. 請參照閱讀

SAPMSYST文法錯誤

前文中提到方式四/方式五 導緻系統無法登入. 表現形式是輕按兩下登入圖示時. 系統就會報錯SHORT DUMP (感謝勇敢的讀者提供截圖)

拯救SAP系統系列 恢複系統登入
拯救SAP系統系列 恢複系統登入

方式一 拯救

針對 無意删除了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

拯救SAP系統系列 恢複系統登入

01

正常系統導出程式

HANA工作台 登入可以正常系統,使用賬号SAPHE3

打開表 REPOSRC的編輯器

拯救SAP系統系列 恢複系統登入

點選下圖的導出按鈕

拯救SAP系統系列 恢複系統登入

獲得表的建立的SQL語句,修改表名,添加一個Z

執行SQL 建立新的Z表

把有問題的代碼複制到新的臨時表中  INSERT INTO ZREPOSRC  SELECT * FROM REPOSRC WHERE PROGNAME = 'SAPMSYST'

把新表導出

02

代碼導入到目标系統

登陸目标系統(使用SYSTEM賬号,出現SAPGUI登入問題的系統),導入表定義及内容. (如果源系統和目标系統的catalog一緻, 則無需使用SYSTEM賬号)

拯救SAP系統系列 恢複系統登入
拯救SAP系統系列 恢複系統登入
拯救SAP系統系列 恢複系統登入
拯救SAP系統系列 恢複系統登入

對SAPHE9使用者授權 SAPHE3的SQL通路權限(如果catalog一緻, 無需授權)

拯救SAP系統系列 恢複系統登入

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