【问题标题】:How to make DACPAC update only one schema?如何让 DACPAC 只更新一个模式?
【发布时间】:2014-05-08 18:45:24
【问题描述】:

我有一个带有 *.sqlproj 项目的 VS2013 解决方案,其中包含特定于此解决方案的对象。问题是这对于其他项目来说也是常见的数据库。

我的问题是在不影响其他对象的情况下自动将架构中的更改部署到数据库。默认情况下,DACPAC 会更新我不需要的整个数据库。

我尝试编写部署贡献者http://msdn.microsoft.com/en-us/library/dn268597(v=vs.103).aspx,但似乎无法将它放在解决方案文件夹中,因为它必须放在 SQL 服务器的 Program Files 子文件夹中。

我使用 Bamboo 创建部署包,应用程序托管在带有 Azure SQL 数据库的 Microsoft Azure 上。

有什么方法可以使用 DACPAC 或其他自动方式仅在我的架构中部署数据库更改?

【问题讨论】:

  • 您最终如何部署 dacpac?您可以控制它还是从远程位置运行?我问是因为您可以将扩展 DLL 放在与 Dac DLL (Microsoft.Data.Tools.Schema.Sql.dll) 相同的目录中。因此,如果您可以包含这些和您的扩展并使用 SqlPackage 来创建可能有效的 dacpac?请注意,安装是在您的客户端计算机上的 SQL Server 目录中,因此如果您可以从那里运行,那么您部署到 Azure 的事实应该没有任何区别。
  • 目前 dacpac 由部署团队执行。在他们的机器或构建服务器上进行系统范围的修改可能是不可能的,所以我正在寻找一种方法来引用我的解决方案文件夹中的贡献者 DLL 或其他方式来忽略 DACPAC 中的其他模式。

标签: sql-server azure-sql-database sql-server-data-tools dacpac


【解决方案1】:

您的两个选项如下:

  1. 将 SqlPackage.exe 和其他 DAC DLL 复制到解决方案内的文件夹中,或者由部署团队控制的文件夹中。还将您的贡献者 DLL 复制到同一文件夹中。然后确保在部署时使用该位置的 SqlPackage.exe。由于将检查与 Microsoft.Data.Tools.Schema.Sql.dll 相同文件夹中的任何 DLL 的扩展,您可以使用此方法在部署期间包含您的贡献者,而无需安装到系统范围的位置。

  2. 从您的 dacpac 中过滤掉与其他模式相关的对象,然后使用 DropObjectsNotInSource = false 进行部署。这不太理想,因为它不会删除您删除的对象,但好处是您可以在构建时/传递给部署团队之前这样做。

请注意,我写的API tutorial 涵盖了这个基本主题,samples project 中有一些示例。听起来您已经编写了选项#1(本教程有一个简化版本,仅阻止添加,而不是更改/删除),但您可以看到它们之间的比较。示例还展示了如何使用我们的 API(这直接映射到使用 SqlPackage.exe)进行发布,以及如何轻松测试和验证贡献者的行为。

【讨论】:

  • 感谢您的回复。你能告诉我如何在构建时设置 DropObjectsNotInSource 吗?我试图在第一个属性组中设置<DropObjectsNotInSource>False</DropObjectsNotInSource>,但它似乎被忽略了,对象仍然被丢弃
  • 我刚刚检查了目标文件(C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\SSDT\Microsoft.Data.Tools.Schema.SqlTask​​s.targets)和那里是 2 个不同的变量,1 个用于 F5 部署,一个用于发布。对于 F5 部署,您的 应该是正确的。对于 Publish,它应该是 。请注意,如果您愿意,也可以在发布配置文件中进行设置。此外,如果您想了解有关发布期间发生的情况的更多信息,请使用 /v:diag 标志从命令行运行任务以获取详细输出。
【解决方案2】:

您可以使用DacpacMerge 库构建部署,这会将数据库中的模型与单个架构的模型合并到一个新的 DacPac 中。这个新生成的 Dacpac 可以在不影响其他对象的情况下部署,因为它们与数据库当前定义相同。

【讨论】:

    猜你喜欢
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2020-06-04
    • 2013-05-26
    • 2011-07-04
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多