在连续部署中设置DacUpgradeOptions.IgnoreDataLoss标志的最佳做法?

时间:2012-04-27 23:00:15

标签: sql-server database deployment azure-sql-database data-tier-applications

在自动数据层应用程序(DACPAC)升级中设置DacUpgradeOptions.IgnoreDataLoss属性的最佳做法是什么?

根据MSDN文档(link),如果IgnoreDataLoss True ,即使某些操作导致数据丢失,升级仍将继续。如果 False ,这些操作将终止升级。例如,如果当前数据库中的表不存在于新DAC的模式中,则如果指定了True,则将删除该表。默认值为 True

但是,在持续交付的环境中,每个数据库更改都会自动部署到管道(CI - >测试 - > UI-Test)并最终到生产环境,这似乎是一个安全措施set IgnoreDataLoss False ,因为我们不希望生产数据库上出现数据丢失/漂移。如果IgnoreDataLoss False 且开发人员提交的数据库更改会导致数据丢失,则CI / Test构建将失败,从而允许我们在此更改到达生产之前捕获此内容。

这种方法存在问题,因为当数据丢失是有意的时,次。例如,我们可能需要删除不再使用的特定表。如果IgnoreDataLoss False ,则构建将失败,并且永远不会应用DACPAC更改,因为会检测到潜在的数据丢失(即使这种丢失是故意的)。在这种情况下,我们希望IgnoreDataLoss True

只是想知道最佳做法是什么,特别是在我们连续自动部署的环境中。任何建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

在大多数情况下,我们可以将IgnoreDataLoss设置为false。这有助于确保我们不会意外地修改数据库并引入数据丢失。当我们想要删除表时,我们可以手动删除表(请不要使用DACPAC)。或者,对于特定的升级操作,我们可以临时将IgnoreDataLoss设置为true。

最诚挚的问候,

徐明。