在自动数据层应用程序(dacpac)升级中设置DacUpgradeOptions.IgnoreDataLoss属性的最佳实践是什么?
根据msdn文档(link),如果IgnoreDataLoss为真,即使某些操作导致数据丢失,升级也将继续。如果为false,这些操作将终止升级。例如,如果当前数据库中的表不在新DAC的架构中,则如果指定了true,则将删除该表。默认值为true。
但是,在连续交付的环境中,每一个数据库更改都会自动部署到整个管道(ci->测试->ui测试)并最终部署到生产环境中,似乎设置IgnoreDataLoss的安全措施是错误的,因为我们不希望生产数据库上发生数据丢失/漂移。如果IgnoreDataLoss为false,并且开发人员提交了导致数据丢失的数据库更改,则ci/test构建将失败,从而允许我们在该更改到达生产环境之前捕获该更改。
不过,这种方法有一个问题,因为有时故意丢失数据。例如,我们可能需要删除不再使用的特定表。如果IgnoreDataLoss为false,则生成将失败,并且DACPAC更改将永远不会应用,因为检测到潜在的数据丢失(即使此类丢失是故意的)。在这种情况下,我们希望IgnoreDataLoss是真的。
只是想知道这方面的最佳实践是什么,特别是在我们不断自动部署的环境中。任何建议都将不胜感激。谢谢!

最佳答案

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

关于sql-server - 在连续部署中设置DacUpgradeOptions.IgnoreDataLoss标志的最佳实践?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10358961/

10-11 05:12