数据层应用程序框架(DAC Fx)中的复杂数据迁移

时间:2012-03-19 21:46:34

标签: data-migration data-tier-applications dac

我很高兴能够使用DAC Fx和声明式数据库开发。对我来说,主要的障碍是如何处理跨架构的几个不同版本的复杂数据迁移。在旧世界中,我们可以按顺序运行所有升级脚本,这可以保证在数据迁移时架构处于正确状态。当升级路径是动态的时,这是如何工作的?

例如,假设现有实例上有多个版本的架构(DACPAC1-4):

  • DACPAC1:tableA存在且具有宝贵的客户数据
  • DACPAC2:不推荐使用tableA并将其替换为tableB和规范化的tableC;添加新的 提交
    • 部署后脚本:将数据从tableA移动到新的tableB和 表C; drop tableA
  • DACPAC3:tableC有一个新的可空列columnX
    • 部署后脚本:根据tableD
    • 填充可空列
  • DACPAC4:tableC.columnX是不可为空的

如果我需要能够支持将DACPAC1-3服务器升级到最新的DACPAC4,我现在必须以足够聪明的方式编写我的部署前和部署脚本,以检测当前正在目标上的DACPAC按顺序处理数据迁移步骤。此外,我不能简单地重复使用我最初编写的天真的部署后脚本,因为它们依赖于模式的中间版本。

提前感谢任何建议!

1 个答案:

答案 0 :(得分:0)

我通常做的是以下内容:

  1. 创建一个包含名为SchemaVersion的属性的System表。所有升级脚本都被编程为首先检查当前版本,然后决定是否执行其内容。执行后,它将SchemaVersion设置为脚本中存储的最新版本。

  2. 我还通常包含另一个名为MinAppVersion的属性(与当前架构兼容的最低版本)。当应用程序尝试连接到数据库时,它会将其当前程序集版本与存储在数据库中的MinAppVersion进行比较。如果版本等于或高于MinAppVersion,则建立连接,否则抛出异常。

  3. 我希望这会有所帮助。亲切的问候,