Oracle-19c

修复数据迁移后的 Oracle 序列漂移

新增业务记录时,数据库在主键处返回了 ORA-00001。这看起来不合常理,因为应用的主键来自 Oracle 序列。日志却给出了明确解释:本次生成的数值已经属于迁移进来的历史记录。

故障来自迁移后两个必须同步的对象发生漂移:表中的数据已经前进,负责生成后续主键的序列却仍描述旧历史。另一个独立写入流程也出现了相同故障,同时说明只修复第一个失败表并不安全。

从违反的约束开始

Oracle 把 ORA-00001 定义为 INSERT、UPDATE 或 MERGE 试图写入受唯一约束、唯一索引或主键保护的重复值(Oracle ORA-00001)。第一步应确定:

  • 违反的是哪个约束或索引;
  • 对应哪张 …

Oracle 19c 中用确定性 LISTAGG …

浏览器请求返回了 HTTP 200,响应体却是空的,页面也没有数据。状态码看起来成功,后端日志却给出了另一条链路:映射 SQL 在调用 WM_CONCAT 时触发了 ORA-00904。

这次修复不能只做全局文本替换。字符串聚合包含排序、重复值、分隔符、别名和溢出语义。安全迁移到 Oracle 19c,需要逐项保留这些契约,证明运行时产物已经同步变化,并把“源码与数据库验证完成”和“部署后页面已恢复”严格分开。

从第一个失败边界开始

有效的执行链是:

HTTP 200 空响应
  -> 异常被捕获
  -> 映射 SQL 失败
  -> ORA-00904: …