【发布时间】:2022-01-09 06:58:19
【问题描述】:
我在 Solaris 10 上使用 Informix IDS 10.00.UC6,两台机器具有相同的数据库架构,并且所有表都使用 Enterprise Replication 双向复制,因此理论上两个数据库应该具有相同的内容。
但是,出现了一个问题,即一个复制方向(主机 A 到主机 B)继续正常工作,但另一个方向(主机 B 到主机 A)不起作用。症状是:
- 对主机 B 上的表所做的更改不会传播到主机 A(通过更改主机 B 上的一行并检查主机 A 上的表来确定)
-
cdr list serv显示Active和Connected(双向),但在主机 B 上有数百万字节的队列。 -
cdr list repl显示多个复制的非零队列。 -
主机 A 上的
cdr stats recvq显示最近没有从主机 B 收到任何信息。 -
cdr stats rqm显示假脱机trg_send_stxn中的数据,带有标志SEND_Q, SPOOLED, PROGRESS_TABLE, NEED_ACK, SENDQ_MASK, SREP_TABLE。 -
online.log或cdr_mon.log或我能想到的任何其他地方都没有错误或相关消息。 - 有些表“不同步”,因为行有冲突的数据或丢失;这是由于与过去错误有关的各种原因,其中一台主机脱机。但是,即使对主机 B 上具有正确数据的表所做的更改也不会传播到主机 A。
- 昨天我在主机 B 上做了一个
cdr cleanstart,因为这个问题在两个方向都发生了,这至少使 A -> B 方向开始工作(与我预期的相反),并且主机 B 上的队列当时为0。在该 cleanstart 之后,对表(具有正确数据)的一些更改将传播到主机 A,而对 B 上的其他表的一些更改则不会。但是今天,没有表从 B 传播到 A。 - 在
cleanstart之前,我通过实验发现有时删除单个副本会减小卡住队列的大小,但队列仍然卡住;有时,删除副本会使队列移动一段时间,然后再次卡住。
- 昨天我在主机 B 上做了一个
- 还有一个 DR 主机,A 和 B 都向其进行单向传播,并且该主机在没有队列备份的情况下正确传播。
我现在不知道为什么要尝试诊断复制队列中的数据没有移动的原因。如果存在同步错误(即由于主机 A 数据不同而无法应用复制的更改),我希望在 online.log 中记录更新被拒绝的消息,并将信息保存到 $INFORMIXDIR/ats_dr 等等——这有最近发生了。似乎队列中必须有某些东西被拒绝但未被清除且未被记录,从而阻塞了队列。主机 A 的实时流量很大,并且(谢天谢地)正确地复制到主机 B,但反之则不然。
任何关于更多尝试的想法或诊断问题的方法都将受到欢迎。
编辑 - 可能与 Retrieving or deleting a row with a blob in Informix 10 相关,也可能不相关,其中主机 B 上的 ER 发送假脱机程序似乎已损坏。
【问题讨论】:
-
您可能已经知道,10.00 版本已正式停止服务——后续版本 11.10、11.50、11.70 也是如此(尽管 11.70 只是最近才停止使用)。这使您很难获得帮助。升级路径也很曲折;我不确定 12.10 或 14.10 是否支持从 10.00 迁移。您应该查看更改的内容以使一直在工作的事情中断。你升级操作系统了吗? (我很确定 10.00 没有移植到 Solaris 11,因此自从首次安装 DBMS 以来,操作系统发生变化的可能性很高。)
-
@JonathanLeffler 是的,官方支持似乎不太可能,因此希望找到有经验的人来回答:) 实际上是 Solaris 10,现在正在编辑。
标签: informix database-replication