Informix 10 Enterprise Replication B到A方向复制队列不移动问题排查
诊断思路
- 定位队列阻塞事务:在主机B执行
cdr view queue <A的服务器名> send,查看发送队列的头部事务信息,重点确认是否为包含BLOB/CLOB字段的表的事务,匹配假脱机损坏的故障特征。 - 调高ER日志级别排查隐性报错:当前默认日志级别未输出异常,可执行
cdr set log debug 9开启最高级别调试日志,等待10-15分钟后查看cdr_mon.log、online.log,高日志级别会打印事务发送、ACK接收的全流程细节,可定位是否为发送端编码异常、接收端拒绝未上报的问题。 - 验证网络大包传输能力:ER同步大字段时会发送超过MTU的数据包,因B到DR单向同步正常但B到A双向异常,可在Solaris环境下用
snoop工具抓取B和A之间ER默认端口(通常为20000)的通信包,检查是否存在大包丢弃、ICMP不可达等异常。 - 检查A端接收进程状态:在主机A执行
onstat -g rea确认ER接收进程无挂起,执行cdr check serv做两端节点的健康校验,排查未标记的节点状态异常。
可尝试的解决办法
- 手动清理阻塞事务:如果确认队列头部为损坏的异常事务,在主机B执行
cdr delete queue <A的服务器名> send <事务ID>删除该事务,删除后观察队列是否恢复流转,注意提前记录事务涉及的表和数据范围,后续通过数据校验补全差异。 - 单独重置B到A的复制链路:无需中断A到B的正常同步,也无需停止A端业务,执行
cdr change repl <复制名> -S <B的服务器名> -R <A的服务器名> reset,重置单个复制的B到A方向状态,若需批量处理所有复制,可执行cdr reset repl --all -S <B的服务器名> -R <A的服务器名>。 - 重建B到A的复制参与关系:若重置无效,先暂停所有B到A方向的复制,导出当前复制配置后删除B到A的参与关系,再重新添加该方向的参与配置,校验同步两端差异数据后重新开启复制,该操作完全不影响A到B的现有同步链路。
- 修复BLOB假脱机损坏:如果确认是BLOB字段的假脱机数据损坏,先执行
oncheck -cD <库名>:<表名>检查包含BLOB字段的表的磁盘结构,修复损坏的extent后,对该表执行一次全量同步即可恢复该表的复制。
内容的提问来源于stack exchange,提问作者M.M
相关产品推荐
相关产品推荐

