Papa Labs

云 ERP 的"自助刷新"按钮,在多站点复制没收尾干净时会悄悄失效

云端 ERP(SaaS)通常会提供一个”自助刷新(Self-Service Refresh)“功能,允许客户自己把生产环境(PRD)的一份数据快照拉到测试/培训环境(TRN)里,不需要每次都开工单等供应商处理。这次为测试环境新增两个站点的数据复制之后,测试环境的站点下拉菜单里突然找不到原有的站点了,而自助刷新功能本身也开始反复报错失败。

问题的第一层:自助流程失败,但看不出原因

最初的报错很表面:执行自助刷新后,测试环境的下拉菜单里两个业务实例(暂称实例 A、实例 B)都消失了,无法选择,也无法重新提交刷新请求——系统提示配置名称无效。多次重试、等待、再重试,结果一样。这类”自助功能本身报错”的情况,靠客户自己在界面上是排查不出根因的,只能升级给供应商的技术支持。

自助刷新按钮卡住的表象:测试环境的站点下拉菜单缺失选项,重试无效,需要供应商介入排查后端数据库

“自助”省掉的是走流程的时间,不代表后端数据结构的问题也能自助解决

真正的根因:新增站点的复制记录,在两端都没清理干净

供应商技术支持排查后给出的结论是:在给测试环境做站点复制之前,需要先在生产库和测试库两端,各自执行一段 SQL 清理脚本,把要移除/替换的站点的复制配置记录彻底清干净。如果这一步没做,遗留的复制记录会和新的复制请求产生冲突,导致自助刷新功能在执行时找不到有效的配置,直接把两个实例都从下拉菜单里剔除,而不是报出”冲突”这种更直白的错误。

也就是说:自助刷新功能本身没有设计成能处理”多站点复制配置正在变动”这种中间状态——它假设的是一个干净、稳定的站点结构,一旦站点增删发生在自助刷新的窗口期内,功能就会以一种不直观的方式失效。

修复

由供应商的数据库团队(DBA)分别在生产库和测试库上执行对应的站点清理 SQL 脚本,把旧站点的复制记录移除干净,再重新提交一次站点复制/自助刷新请求,测试环境的下拉菜单和刷新功能才恢复正常。

教训

  1. “自助”功能省的是流程时间,不是排查时间——当自助功能本身开始报错,尤其是伴随”配置消失”这种不直观的现象时,大概率意味着后端数据结构出现了自助流程没有覆盖到的中间状态,此时继续重试没有意义,应该尽快升级到能直接看数据库的一方;
  2. 多站点/多租户系统的结构性变更(增删站点),最好和”自助刷新”这类自动化操作错开时间窗口——两者同时进行时,中间状态很容易让自动化流程的假设失效,而失败的表现形式往往和真正的原因(复制记录残留)看起来毫无关系;
  3. 遇到”功能忽然大范围失效,但没人改过配置”的情况,先怀疑最近的结构性变更(哪怕看起来和当前报错无关),而不是先怀疑软件本身出了 bug——本例里两个看似独立的操作(新增站点复制、自助刷新报错)实际上共享同一个根因。
← 全部文章