经常需要从一个数据库中的主表同步数据以克隆其他数据库中的表,通常是在其他服务器上。例如,考虑后端系统管理库存数据并且库存数据最终必须被推送到作为网站应用程序一部分的一个或多个数据库的情况。
后端系统中的源数据是高度规范化的,有几十个表和外键约束。它是一个精心设计的OLTP RDBMS 系统。许多有问题的表包含数百万行。需要定期将这些数据推送到其他数据库。尽可能频繁;延迟是可以容忍的。最重要的是,后端和远程数据库的最长正常运行时间是必不可少的。
我正在使用 SQL Server,并且熟悉更改跟踪、行版本、触发器等。我知道微软在这些场景中大力推动复制、SyncFx 和 SSIS。但是,供应商白皮书和概述推荐技术与解决方案的实际实施、部署和维护之间存在很大差异。在 SQL Server 世界中,复制通常被视为交钥匙解决方案,但我正在尝试探索替代解决方案。(有人担心复制难以管理,难以更改模式,并且如果需要重新初始化,关键系统会出现大量停机时间。)
有很多陷阱。由于大量表之间的复杂外键关系,确定执行捕获或应用更新的顺序并非易事。由于唯一索引,两行可能会以这样的方式互锁,以至于一次一行的更新甚至不起作用(需要在最终更新之前对每一行执行中间更新)。这些不一定是显示停止器,因为唯一索引通常可以更改为常规索引并且可以禁用外键(尽管禁用外键是非常不可取的)。通常,您会听到“只”使用 SQL 2008 更改跟踪和 SSIS 或 SyncFx。这类答案确实不公平对待实际困难。(当然,客户真的很难理解复制数据为何如此困难,
这个问题归根结底是非常普遍的:对具有大量行的许多高度相关的数据库表执行单向同步。几乎所有涉及数据库的人都必须处理这类问题。白皮书很常见,实用的专业知识很难找到。我们知道这可能是一个难题,但必须完成这项工作。让我们听听什么对您有用(以及应该避免什么)。讲述您对 Microsoft 产品或其他供应商产品的体验。但是,如果您个人没有使用大量相关的表和行对解决方案进行实战测试,请不要回答。让我们保持实际 - 而不是理论上的。