Papa Labs

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 同时开始涌入报障,所有人都登不进,波及所有公司库。

SAP Business One Unhandled Exception 报错弹窗

事发当时用户看到的弹窗(真实截图)——每个人的屏幕上都是这一幕

那一刻的体感:我只是建了一个测试库,为什么整个 landscape 都下线了?

排查过程

  1. 先收集证据:让报障用户提供错误截图,确认症状一致(都是 SLD 报错),第一时间写 incident report;
  2. 通知全员:在支持群里发公告「所有用户暂时无法登录,正在联系 vendor 紧急处理」——比逐个回复省力得多;
  3. 联系 vendor:vendor 远程上来,判断是 SLD(System Landscape Directory)服务异常,决定重启 SQL Server 和 SAP SLD 服务
  4. 第一个坑:SLD 服务启动特别慢。vendor 的解释是 “it took a while for SLD service to start, probably due to the long list of number of DB”——我们实例上挂了十几个公司库加一堆测试库,SLD 启动时要逐个枚举;
  5. 第二个坑:重启过程中 SLD 一度抛出一大段 Java 异常,vendor 说 “looks like we need to reinstall the SLD server”。重装 SLD 可不是小事——好在这时我们已经把肇事的那个测试库删掉了,vendor 再次重启,SLD 正常起来。不用重装了。

前后大约 40 分钟,用户恢复登录。

根因(以及一个不太安心的结论)

问了 vendor 两个问题:

这个症状其他客户见过吗? —— “never seen before.”

会复发吗? —— 建议再创建一个测试库试试能否复现。

后来在 vendor 指导下用另一个命名重新建了测试库,一切正常,没有复现。所以最终的结论只能是:创建数据库的动作在某个时点干扰了 SLD 服务,确切机制连 vendor 也说不清。生产环境的很多事故最后就停在这种「无法完全解释」的状态。

教训

  1. SLD 是 SAP B1 的单点。它一挂,不是某个库不可用,是所有库、所有用户全下线。做任何可能影响它的操作前要有这个意识;
  2. 在生产 SQL 实例上建库不是零风险操作。哪怕只是测试库。之后这类操作我们一律安排在 out of office hours;
  3. 重装是最后手段。vendor 说要重装 SLD 的时候,先想想「刚才改了什么」——把可疑变更回滚掉再试一次,我们就是删掉肇事测试库后免掉了一次重装;
  4. 沟通模板提前备好:报障洪水期间,一条群公告 + 恢复后一条解释(「测试数据库创建意外中断了 SAP 服务,已恢复,正在跟 vendor 追根因」)就能稳住场面;
  5. SLD 启动时间和库数量正相关——测试库用完要清理,别让它们拖慢下一次恢复。
← 全部文章