将Dacpacs部署到锁定生产中的可用性组

时间:2015-09-21 22:18:43

标签: sql-server visual-studio-2013 sql-server-2012 production-environment sql-server-data-tools

我的DBA和我正在努力研究如何有效地使用Microsoft的数据库项目和他们生成的Dacpac来简化我们的生产部署系统。

理想情况下,我可以构建和/或发布.sqlproj,生成.dacpac文件,然后可以将其上传到生产服务器并用于从任何版本升级数据库是最新版本。这类似于我们如何进行网站部署,我将其发布到软件包,然后将该软件包上传到服务器并导入到IIS中。

但是,我们无法弄清楚如何使这项工作。 DBA已经创建了数据库并将其添加到我们的可用性组中。每当我们尝试应用Dacpac时,它会尝试调整由于AG而无法调整的设置。

我无法做到的任何事情都设法创建了一个{em>没有尝试在数据库上设置的.dacpac文件。我发现的最接近的选项会在发布时将它们排除在外,但我可以告诉您不能发布到无法访问的数据库,只有DBA才能访问生产服务器。

我可以用这种方式实际使用dacpac吗?

1 个答案:

答案 0 :(得分:1)

这有两个部分,首先是如何停止部署您不想部署的设置 - 您能举例说明其中一个不适用的设置吗?

对于您无权访问SQL Server的第二部分,有几种不同的方法可以解决这个问题:

  • 使用脱机副本生成部署脚本
  • 获取DBA以生成部署脚本
  • 使用dacpac
  • 获取DBA部署
  • 获取对数据库的只读访问权限

选项1:“使用脱机副本生成部署脚本”

您需要将dacpac与某些东西进行比较,如果您没有TDS连接(默认实例默认端口tcp:1433),那么您可以使用与生产相匹配的数据库版本:

  • 使用日志传送在您可以访问的地方恢复生产副本
  • 同步获取开发数据库和生产,然后每个版本都会转到开发和生产数据库,确保它们保持同步

日志传送副本是最简单的,如果是开发服务器,您通常可以拥有服务器权限来为您提供访问权限,或者您可以在数据库级别创建正确的权限,但不能在生产服务器级别创建。

如果数据是敏感的,那么日志传送的副本可能不合适,因此您可以尝试使开发和生产数据库保持同步,但这很困难,并且要求DBA“训练有素”,不运行任何非也不要先对数据库数据库运行。

一旦访问了与生产数据库具有完全相同模式的数据库,就可以使用sqlpackage.exe / action:script生成部署脚本,实际上因为它不是生产数据库,所以可以生成脚本作为CI过程的一部分:)。

选项2:“让DBA生成部署脚本”

这是为了让DBA将dacpac复制到productions服务器并使用sqlpackage.exe,它将在“Program Files(x86)\ Microsoft Sql Server \ Version \ DAC \ bin”文件夹中比较dacpac到数据库并生成一个他可以在部署之前查看的脚本。

选项3:“让DBA生成部署脚本”

这与选项2类似,但不是生成他在SSMS中部署的脚本,而是使用sqlpackage.exe / Action:Publish直接部署更改。

选项4:“获取对数据库的只读访问权限”

这实际上是我的首选,因为它意味着您始终根据保证生产状态(因为它是生产)来构建脚本。在您的情况下,您需要在您的机器或理想的构建机器和SQL Server之间获取tcp端口,然后您将需要这些权限:

https://the.agilesql.club/Blogs/Ed-Elliott/What-Permissions-Do-I-Need-To-Generate-A-Deploy-Script-With-SSDT

正如我所说,选项4总是我的首选,但据我所知,并非总是可行。

选项2 + 3充满了担忧,因为您将运行尚未在任何地方进行过测试的脚本,使用选项4和1,您可以生成脚本然后部署到测试/ QA数据库,只要他们自己拥有与生产相同的模式。脚本也可以通过代码审查过程。

如果你选择2/3,那么我会创建一个驱动sqlpackage.exe的批处理文件或powershell脚本,如果它们从不具备sqlpackage.exe的其他服务器部署,那么你可以将DAC文件夹复制到该文件夹从那里运行并运行sqlpackage,你不必实际安装它(你可能还需要从“Program Files(x86)\ Microsoft Sql Server \ Version \ SDK \中复制Microsoft.SqlServer.TransactSql.ScriptDom.dll”程序集“文件夹。

我希望这会有所帮助,如果您有任何其他问题,请随时在此发布或ping我:)