SAP B1 全员掉线事件:建一个测试库,SLD 服务就崩了
一个平平无奇的周三上午,我在 SAP Business One(MSSQL 环境)上给内部审计(IA)批量创建测试数据库——前面好几个库都建得好好的,建到其中一个子公司的库时,全公司的 SAP 突然登不进去了。
现象
- 客户端弹出 Unhandled Exception:“SAP Business One has encountered a problem and needs to close… refer to note 1989457”;
- 登录界面状态栏一条红字:
Failed to get database information from System Landscape Directory; - 不是个别用户——Teams 和 WhatsApp 同时开始涌入报障,所有人都登不进,波及所有公司库。

事发当时用户看到的弹窗(真实截图)——每个人的屏幕上都是这一幕
那一刻的体感:我只是建了一个测试库,为什么整个 landscape 都下线了?
排查过程
- 先收集证据:让报障用户提供错误截图,确认症状一致(都是 SLD 报错),第一时间写 incident report;
- 通知全员:在支持群里发公告「所有用户暂时无法登录,正在联系 vendor 紧急处理」——比逐个回复省力得多;
- 联系 vendor:vendor 远程上来,判断是 SLD(System Landscape Directory)服务异常,决定重启 SQL Server 和 SAP SLD 服务;
- 第一个坑:SLD 服务启动特别慢。vendor 的解释是 “it took a while for SLD service to start, probably due to the long list of number of DB”——我们实例上挂了十几个公司库加一堆测试库,SLD 启动时要逐个枚举;
- 第二个坑:重启过程中 SLD 一度抛出一大段 Java 异常,vendor 说 “looks like we need to reinstall the SLD server”。重装 SLD 可不是小事——好在这时我们已经把肇事的那个测试库删掉了,vendor 再次重启,SLD 正常起来。不用重装了。
前后大约 40 分钟,用户恢复登录。
根因(以及一个不太安心的结论)
问了 vendor 两个问题:
这个症状其他客户见过吗? —— “never seen before.”
会复发吗? —— 建议再创建一个测试库试试能否复现。
后来在 vendor 指导下用另一个命名重新建了测试库,一切正常,没有复现。所以最终的结论只能是:创建数据库的动作在某个时点干扰了 SLD 服务,确切机制连 vendor 也说不清。生产环境的很多事故最后就停在这种「无法完全解释」的状态。
教训
- SLD 是 SAP B1 的单点。它一挂,不是某个库不可用,是所有库、所有用户全下线。做任何可能影响它的操作前要有这个意识;
- 在生产 SQL 实例上建库不是零风险操作。哪怕只是测试库。之后这类操作我们一律安排在 out of office hours;
- 重装是最后手段。vendor 说要重装 SLD 的时候,先想想「刚才改了什么」——把可疑变更回滚掉再试一次,我们就是删掉肇事测试库后免掉了一次重装;
- 沟通模板提前备好:报障洪水期间,一条群公告 + 恢复后一条解释(「测试数据库创建意外中断了 SAP 服务,已恢复,正在跟 vendor 追根因」)就能稳住场面;
- SLD 启动时间和库数量正相关——测试库用完要清理,别让它们拖慢下一次恢复。