ssdt dacpac:如何构建不同的版本

ssdt dacpac: how to structure diffrent versions

为当前项目中的每个版本创建两个 sql 脚本 (update/rollback)。我们想迁移到 DACPAC 解决方案。

每个 DACPAC 项目在 en 处创建 1 个文件 dacpac,因此对于每个版本,我创建 2 个项目(1 个用于更新,1 个用于回滚)。架构更改将在 dacpac 本身中进行,而前脚本和 post-脚本用于数据迁移。

为了添加新版本,我将当前的更新项目复制到新的更新项目和新的回滚项目中。然后从那里修改。

有什么想法吗?

我想这归结为您是否需要实际完成所有这些工作,我使用 SSDT 的方式是定义我希望当前版本在架构 + 代码和我需要的任何升级脚本中的样子进入 post-deploy 文件作为重新运行nable 脚本(幂等)。

如果数据库在版本 1 或 100 上,它们仍然会得到相同的 post-部署脚本,但脚本会检查数据或存储在数据库中的标志以表明特定脚本具有已经 运行 - 这应该很容易设置,但取决于您的具体要求。

为了保持这种可管理性,最好了解特定脚本何时进入您的所有环境,然后将其删除,这样您实际上只有 post-部署脚本确实需要。

话虽这么说,但有时会有特定的限制,通常是:

  • 客户管理数据库,因此您无法确定他们的版本
  • 监管(感知或其他)要求要求 upgrade/rollback 脚本

首先了解您的要求是如何确定的,SSDT 的目标是不必担心升级/降级脚本(当然是针对模式)——我会问的问题是:

  • 在部署之前制作备份或快照就足够了吗?
  • 您能否在需要时停止降级脚本并编写它们?
  • 回滚脚本的使用频率(也知道前两个在这里会有帮助)

如果你有一套好的测试,一个自动部署管道(即使它有一个手动的 DBA 在某些时候介入)那么这些问题变得不那么重要,随着时间的推移,每个人都学会相信这个过程会变得部署更改明显更快、更容易。

你有什么限制?

埃德

如果您发现自己投入了大量精力将逻辑放入 post 部署脚本中,那么基于迁移的方法(而不是基于状态的方法)很可能是更适合你

示例是 DBUp (open source), ReadyRoll(这是商业的,我们在 Redgate 开发的那个 - 具有其他功能,例如自动生成与 VS 集成的脚本等)。

基于迁移的工具代表您管理版本(包括 table Ed 所指的版本)。