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: …