Sql server 在锁定的生产环境中将DACPAC部署到可用性组

Sql server 在锁定的生产环境中将DACPAC部署到可用性组,sql-server,visual-studio-2013,sql-server-2012,production-environment,sql-server-data-tools,Sql Server,Visual Studio 2013,Sql Server 2012,Production Environment,Sql Server Data Tools,我的DBA和我正在努力研究如何有效地使用Microsoft的数据库项目及其生成的DACPAC来简化我们的生产部署系统 理想情况下,我将能够构建和/或发布.sqlproj,生成.dacpac文件,然后可以将该文件上载到生产服务器,并用于将数据库从任何版本升级到最新版本。这与我们进行网站部署的方式类似,我发布到一个包,然后将该包上载到服务器并导入IIS 然而,我们无法解决如何实现这一点。DBA已经创建了数据库并将其添加到我们的可用性组中。每次我们尝试应用Dacpac时,它都会尝试调整设置,但由于AG

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

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

然而,我们无法解决如何实现这一点。DBA已经创建了数据库并将其添加到我们的可用性组中。每次我们尝试应用Dacpac时,它都会尝试调整设置,但由于AGs,它无法调整设置

我所能做的任何事情都无法创建一个
.dacpac
文件,该文件不会试图将设置强加给数据库。我找到的最接近的选项将在发布时将它们排除在外,但我可以告诉您,您不能发布到无法访问的数据库,并且只有DBA可以访问生产服务器


我真的可以这样使用DACPAC吗?

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

对于无法访问SQL Server的第二部分,有几种不同的方法来处理此问题:

  • 使用脱机副本生成部署脚本
  • 让DBA生成部署脚本
  • 让DBA使用dacpac进行部署
  • 获取对数据库的只读访问权限
选项1:“使用脱机副本生成部署脚本”

您需要将dacpac与其他内容进行比较,如果您没有TDS连接(默认实例默认端口tcp:1433),则可以通过以下方式使用与生产相匹配的数据库版本:

  • 使用日志传送在您可以访问的地方恢复生产的副本
  • 让开发数据库和生产数据库保持同步,然后每个版本都进入dev和prod数据库,确保它们保持同步
日志附带的副本是最简单的,如果它是到开发服务器,您通常可以拥有服务器权限来授予您访问权限,或者您可以在数据库级别(但不在生产服务器级别)创建正确的权限

如果数据是敏感的,那么日志附带的副本可能不合适,因此您可以尝试保持开发和生产数据库的同步,但这很困难,需要DBA接受“良好培训”,不运行任何不是首先针对db数据库运行的数据

访问与生产数据库具有完全相同架构的数据库后,可以使用sqlpackage.exe/action:script生成部署脚本,事实上,因为它不是生产数据库,所以可以在CI过程中生成脚本:)

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

这是为了让DBA将dacpac复制到productions server,并使用“Program Files(x86)\Microsoft Sql server\Version\DAC\bin”文件夹中的sqlpack.exe将dacpac与数据库进行比较,并生成一个脚本,以便在部署之前进行查看

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

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

选项4:“以只读方式访问数据库”

这实际上是我的首选,因为这意味着您总是根据保证的生产状态(即生产状态)构建脚本。在您的情况下,您需要在您的计算机或理想的构建计算机与SQL Server之间获取tcp端口,然后需要以下权限:

正如我所说,选择4一直是我的首选,但我明白这并不总是可能的

选项2+3充满了担忧,因为您将运行未在任何地方测试过的脚本。使用选项4和选项1,您可以生成脚本,然后部署到测试/质量保证数据库,只要它们本身具有与生产相同的模式。脚本还可以经过代码审查过程

如果您选择了选项2/3,那么我将创建一个批处理文件或powershell脚本来驱动sqlpackage.exe,如果它们从没有sqlpackage.exe的其他服务器部署,那么您可以将DAC文件夹复制到该计算机并从该计算机运行sqlpackage,您不必实际安装它(您可能还需要从“Program Files(x86)\Microsoft Sql Server\Version\SDK\Assembly”文件夹复制到Microsoft.SqlServer.Transact-Sql.ScriptDom.dll中

我希望这有帮助,如果您还有任何问题,请随时在这里发布或ping我:)


ed

为什么您不能访问它们,是您的权限还是数据库是只读的辅助数据库?@EdElliott-这主要是一个访问问题。生产环境被锁定,因此只能从我们必须RDP进入的机器访问,并且该机器只能通过VPN访问。跳转框有SSMT,但ot VS,我们只能通过它进行只读访问(DBA除外)。我们有我们的设置,因此生成框读取了所有数据库及其架构的priv,以便生成适当的部署报告和更改脚本。然后,我们可以从生成工件中查看这些文件并验证它们。**听起来您的问题是试图更改数据库。有一个命令/选项不执行此操作。创建发布配置文件这不会尝试更新数据库设置,您应该可以。您的DBA应该能够运行适当的选项,然后生成dif