我正在尝试使用 ms-replication 解决问题,但我不确定它是否最适合当前的问题。
问题:需要复制所有初始插入和所有更新,同时忽略对订阅的删除。本质上,目标数据库会继续增长,并且数据永远不会被删除,即使在源端删除了记录。能够在源端恢复而不破坏目标将是一个很大的优势。
我可以通过 ms-replication 在所有表项目上设置忽略删除并将表准备模式设置为不执行任何操作来实现大部分工作。这将处理在恢复期间维护数据并在目标处保留已删除的记录,但是,如何处理在源处恢复后会导致 PK 违规的插入。我找不到任何记录在案的方法来“在插入期间忽略现有记录”,即使存在黑客攻击,它是否会大大降低复制的性能?
注意:我应该提到,支持备份并不意味着回到很久以前的某个时间点,它只是意味着如果发生硬故障,需要使用最新的日志链恢复源数据库。最多需要处理两个小时的插入。这可能可以通过手动删除目标中不在源中的记录来处理,但是,我试图完全避免这种情况。
除了尝试通过 BCP 加载数据之外,我对快照过程的基础不太熟悉。如果表准备模式不执行任何操作,是否有选项可以选择跳过快照的“批量加载”阶段,然后在应用快照后像往常一样使用日志读取器进行读取?
“如何处理在源恢复后会导致 PK 违规的插入”
您可以在订阅服务器上的 PK 上设置IGNORE_DUP_KEY。或者使用 INSTED OF INSERT 触发器,或者修改复制插入存储过程以覆盖该行(如果存在)。
但您始终需要有一个记录并经过测试的流程来重新初始化订阅者。因此,作为备份流程,您可能需要准备好重命名订阅者数据库、重新初始化订阅,然后重新添加发布者中不再存在的行。