You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle DataGuard异常:含默认值表数据同步及丢失问题排查

排查主库插入数据丢失且备库未同步的问题(含默认值表)

问题场景

我创建了一张带默认值的表:

CREATE TABLE "TEST"."AA" (
  "COL1" VARCHAR2(20 BYTE),
  "cretime" TIMESTAMP(3) DEFAULT SYSTIMESTAMP
);

在主库(PRIMARY_ROLE)执行插入语句:

INSERT INTO "AA"("COL1", "cretime") VALUES ('2', TO_TIMESTAMP('2024-06-03 15:18:18.028', 'SYYYY-MM-DD HH24:MI:SS:FF3'))

执行结果显示影响1行,但备库(STANDBY_ROLE)未同步这条数据,片刻后主库中的该数据也丢失了。在无默认值的其他表插入数据则正常,需要排查是否由默认值导致该问题。

排查步骤

1. 确认事务提交状态

  • 检查插入操作是否执行了显式COMMIT;,若为自动提交模式,确认数据库自动提交配置是否正常。主库数据丢失大概率是事务未提交被回滚,或存在隐式回滚场景。
  • 查询主库事务日志,确认该插入事务是否完成提交,是否存在回滚记录。

2. 针对默认值设计多场景测试

  • 场景1:使用默认值插入数据
    执行以下语句并提交:
    INSERT INTO "TEST"."AA"("COL1") VALUES ('test_default');
    COMMIT;
    
    观察主库数据是否保留、备库是否同步。若此场景正常,说明手动指定时间戳的插入逻辑存在问题;若同样丢失,则默认值定义大概率是诱因。
  • 场景2:移除默认值后测试原插入语句
    先修改表结构:
    ALTER TABLE "TEST"."AA" MODIFY "cretime" TIMESTAMP(3);
    
    再执行原插入语句并提交,查看主库数据是否保留、备库是否同步。若恢复正常,可直接确认默认值是问题根源。

3. 检查主备同步链路

  • 查看备库同步日志,排查是否存在TEST.AA表的同步报错,比如数据类型不兼容、SYSTIMESTAMP函数在备库无法执行等。同时确认主备库时区、时间配置是否一致。
  • 检查主库归档日志,确认该插入操作是否被归档,备库是否正常接收并应用归档日志。

4. 排查数据库异常日志与触发器

  • 查看主库alert日志,检查插入操作后是否有表空间不足、约束冲突、触发器执行失败等报错,这些情况会导致事务隐式回滚。
  • 确认TEST.AA表是否存在触发器,比如插入后自动删除/修改数据的逻辑,这也可能导致数据丢失。

内容的提问来源于stack exchange,提问作者wfugui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:29:55