新旧数据库数据同步
Data Synchronisation between new and old database
我负责新系统到旧系统的数据同步。我正在使用 ssis 2012 并想知道什么是最佳解决方案。我需要对新系统中的新记录、更改记录和删除记录进行数据同步。数据同步是一种方式,需要使用 ssis 尽可能接近实时。我应该在新数据库上使用 CDC 还是在源应用程序中使用消息 table 来告诉我所做更改的类型,然后使用存储过程或带有单独暂存 tables 的 ssis?
我需要将这个过程 运行 保留一年。此外,源结构和目标结构将不同,因此我预计这些包中会有很多查找、映射和转换。
以下是根据我的经验需要考虑的一些事项。
如果您还没有,请将最后更改的日期时间列添加到 every table。确保它自动默认为 getdate()。此触发器还可以将删除捕获到本地 table,以便定期传输到目标分段 table。 (如果这不可能,你能不能有一个 "local" table 有最近 X 个月的数据并与之比较以检测变化?也许存储主键和校验和您可以与实时校验和进行比较)
在旧数据库或单独的数据库中创建所有查找转换 table,以便有一天您可以将其全部关闭。在新服务器上考虑一个单独的数据库来保存您的 导入暂存 table 和执行实际导入的存储采购
考虑升级旧数据库以获得更好的功能性能 - 或者让它旧而慢,以便您不得不淘汰它!
我不了解 CDC,所以我无法提供建议,但我已经多次以艰难的方式做到这一点,所以我有伤疤,每次都从以前的经验中吸取教训。
我会有一个 table 来保持每个 table 的最后一次同步时间。然后,您可以创建需要复制到暂存区的视图或查询 tables
在您的暂存数据库中,创建将执行每个 table 合并的存储过程
希望您在 table 上有删除标志,否则会变得混乱。您可能需要触发器来复制此数据。然后,您可以在暂存中标记它 tables
以适当的频率构建提取系统和时间表。记录元数据,以便您可以轻松地对其进行报告
建立一个独立的报告导入系统。这方面可能很难以正确的顺序获得依赖关系。 使用 SSIS 控制导入 table 的顺序,但如果实际导入是由导入数据库中的存储过程完成的,您可能会发现开发和测试更容易
考虑保留登台数据库数据,但使用时间戳来显示应用 imported/updated/deleted 更改的时间(以及源系统中更改的日期时间)以防出现问题
- 你说这是一个单向界面。我同意这是你现在应该公开说的话。然而,在这个项目的末尾,反转接口可能是有益的,这样旧系统就会被新系统填充(对于代码 tables 以便它们保持一致,或者一些事务数据)。
在其他情况下,您可能需要从旧到新再回到旧或 N > O > N,以便您可以从两个系统中获取主键数据以供其他提取使用
目标数据库还在开发中吗?如果是这样,请让开发人员和用户参与您的计划!
确保您的用户已签署他们将用于对应用程序中的数据进行分类的所有代码 table。确保他们了解您将如何将旧代码映射到新代码。这可能意味着如果旧代码中有多个新代码,他们将不得不手动更新这些代码,幸运的是您保留了元数据,这样他们就可以有一份每日报告,这样他们就知道要检查什么!
祝你好运
最干净、最简单的方法是使用事务复制。设置起来并不难,如果它的数量非常大,您可以使用旧机器作为发布者,这样对服务器的影响最小。
我负责新系统到旧系统的数据同步。我正在使用 ssis 2012 并想知道什么是最佳解决方案。我需要对新系统中的新记录、更改记录和删除记录进行数据同步。数据同步是一种方式,需要使用 ssis 尽可能接近实时。我应该在新数据库上使用 CDC 还是在源应用程序中使用消息 table 来告诉我所做更改的类型,然后使用存储过程或带有单独暂存 tables 的 ssis?
我需要将这个过程 运行 保留一年。此外,源结构和目标结构将不同,因此我预计这些包中会有很多查找、映射和转换。
以下是根据我的经验需要考虑的一些事项。
如果您还没有,请将最后更改的日期时间列添加到 every table。确保它自动默认为 getdate()。此触发器还可以将删除捕获到本地 table,以便定期传输到目标分段 table。 (如果这不可能,你能不能有一个 "local" table 有最近 X 个月的数据并与之比较以检测变化?也许存储主键和校验和您可以与实时校验和进行比较)
在旧数据库或单独的数据库中创建所有查找转换 table,以便有一天您可以将其全部关闭。在新服务器上考虑一个单独的数据库来保存您的 导入暂存 table 和执行实际导入的存储采购
考虑升级旧数据库以获得更好的功能性能 - 或者让它旧而慢,以便您不得不淘汰它!
我不了解 CDC,所以我无法提供建议,但我已经多次以艰难的方式做到这一点,所以我有伤疤,每次都从以前的经验中吸取教训。
我会有一个 table 来保持每个 table 的最后一次同步时间。然后,您可以创建需要复制到暂存区的视图或查询 tables
在您的暂存数据库中,创建将执行每个 table 合并的存储过程
希望您在 table 上有删除标志,否则会变得混乱。您可能需要触发器来复制此数据。然后,您可以在暂存中标记它 tables
以适当的频率构建提取系统和时间表。记录元数据,以便您可以轻松地对其进行报告
建立一个独立的报告导入系统。这方面可能很难以正确的顺序获得依赖关系。 使用 SSIS 控制导入 table 的顺序,但如果实际导入是由导入数据库中的存储过程完成的,您可能会发现开发和测试更容易
考虑保留登台数据库数据,但使用时间戳来显示应用 imported/updated/deleted 更改的时间(以及源系统中更改的日期时间)以防出现问题
- 你说这是一个单向界面。我同意这是你现在应该公开说的话。然而,在这个项目的末尾,反转接口可能是有益的,这样旧系统就会被新系统填充(对于代码 tables 以便它们保持一致,或者一些事务数据)。
在其他情况下,您可能需要从旧到新再回到旧或 N > O > N,以便您可以从两个系统中获取主键数据以供其他提取使用
目标数据库还在开发中吗?如果是这样,请让开发人员和用户参与您的计划!
确保您的用户已签署他们将用于对应用程序中的数据进行分类的所有代码 table。确保他们了解您将如何将旧代码映射到新代码。这可能意味着如果旧代码中有多个新代码,他们将不得不手动更新这些代码,幸运的是您保留了元数据,这样他们就可以有一份每日报告,这样他们就知道要检查什么!
祝你好运
最干净、最简单的方法是使用事务复制。设置起来并不难,如果它的数量非常大,您可以使用旧机器作为发布者,这样对服务器的影响最小。