新旧数据库之间的数据同步

时间:2016-06-20 17:41:04

标签: sql-server ssis architecture

我负责将数据从新系统同步到旧系统。我正在使用ssis 2012,并想知道什么是最好的解决方案。我需要为新系统中的新记录,更改记录和已删除记录执行此数据同步。数据同步是一种方式,需要尽可能接近实时与ssis。我应该在新数据库上使用CDC还是从源应用程序使用消息表来告诉我所做的更改类型然后使用存储过程或ssis与单独的临时表?

我需要让这个过程持续一年。此外,源和目标结构将不同,因此我预计这些包中会有大量的查找,映射和转换。

2 个答案:

答案 0 :(得分:1)

根据我的经验,有些事情需要考虑。

  • 如果您还没有将上次更改的日期时间列添加到每个表中。确保它自动默认为getdate()。此触发器还可以捕获删除到本地表中以定期传输到目标登台表。 (如果这不可能,你有一个"本地"表,其中包含过去X个月的数据,并与之进行比较以检测更改?也许存储主键和校验和,你可以与现场校验和进行比较

  • 在旧数据库或单独的数据库中创建所有查找转换表,以便有一天您可以将其全部关闭。在新服务器上,考虑使用单独的数据库来保存导入登台表以及执行实际导入的存储采购

  • 考虑升级旧数据库以获得更好的功能性能 - 或者让它保持老旧和缓慢,以便 退出它!

  • 我不知道CDC,所以我无法建议,但我已经多次这么做了,所以我有伤疤,每次都是从前一次学到的。

  • 我会有一个表来保存每个表的最后同步时间。然后,您可以创建需要复制到临时表的视图或查询

  • 在您的暂存数据库中,创建将执行每个表的合并的sprocs

  • 希望您在表格上删除标记或者是否会变得混乱。您可能需要触发器才能复制此数据。然后,您可以在临时表中标记它

  • 以适当的频率构建提取系统和时间表。记录元数据,以便您轻松报告

  • 使用报告构建单独的导入系统。这方面可能很难以正确的顺序获得dependanciess。 使用SSIS控制导入表的顺序,但如果实际导入由导入数据库中的存储过程完成,您可能会发现更容易开发和测试

  • 考虑保留登台数据库数据,但使用时间戳显示何时应用导入/更新/删除的更改(以及源系统中更改的日期时间)以防出现问题

    • 你说这是一个单向界面。我同意你现在应该公开发言。但是,在该项目结束时,反转接口可能是有益的,因此旧系统由新的填充(对于任一代码表,以便它们保持一致,或者某些事务数据)。
  • 在其他情况下,您可能需要从旧到新的往返并返回到旧的或N> O> N,这样您就可以从两个系统中获取可用于其他提取的主键数据

  • 是否仍在开发目标数据库?如果是这样,请让您的计划中的开发人员和用户参与其中!

  • 确保您的用户已签署他们将用于对应用程序中的数据进行分类的所有代码表。确保他们了解如何将旧代码映射到新代码。这可能意味着,如果旧代码不止一个新代码,他们必须手动更新这些代码,幸运的是,您保留了元数据,以便他们可以拥有每日报告,以便他们知道要检查的内容!

祝你好运

答案 1 :(得分:0)

最简洁,最简单的方法是使用事务复制。设置并不难,如果它的体积非常大,您可以将旧机器用作发布者,这样对服务器的影响最小。