原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
**点击蓝字** 关注我们
一
前言
拯救SAP系统系列是对应与搞死SAP系统系列. (感觉就像是杀毒软件公司,先放出病毒,再搞个专杀工具).
在搞死SAP系统系列出来后, 立马就有人中招. 看来干坏事远比做好事对人的诱惑要更大一些.
**本文是用于解决 搞死SAP系统系列 让系统无法登录**
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ 搞死SAP系统系列 让系统无法登录
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486886&idx=1&sn=e96b3c6c4c51666c1b67e158c48ccbb5&chksm=cf5dd090f82a5986be6ed87aede703ee5c901c8cdce384ec141a98ae4d3cebd33626fa6ce5d3&token=2142941217&lang=zh_CN#rd)
本文中提到的"方式"来自上述链接. 请参照阅读
二
SAPMSYST语法错误
前文中提到方式四/方式五 导致系统无法登录. 表现形式是双击登录图标时. 系统就会报错SHORT DUMP (感谢勇敢的读者提供截图)
三
方式一 拯救
针对 无意删除了T000表内容
使用事务代码SCC4新增被删除的集团 (注意不能通过SE11/SE16N添加记录. 因为集团字段的特殊性. 这些工具添加的记录都是当前登录集团的).
四
方式二/方式三 拯救
针对 增强中的报错和语法错误.
这个报错出现时,可能有两种情况. 已经登录系统和尚未登陆系统.
• 已经登录系统. 此时新的登录已经无法进入了. 因为之前登录成功过. 可以找到增强程序 ZXUSRU01 注释或清空里面的代码,激活即可.
• 尚未登录系统. 此时已经无法登录SAP系统了. 只能尝试通过数据库客户端登陆数据库系统(比如HANA STUDIO ). 使用语句清空表REPOSRC字段LOAD
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**
**ABAP开发技巧**
**微信号 : 392077**
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论