将SQL Server 2012 DACPAC部署到镜像数据库

时间:2016-09-28 09:48:05

标签: database visual-studio-2015 sql-server-2012 release-management dacpac

我们正在使用TFS 2015 Release Management将更新部署到各种环境,其中一个发布步骤是使用“SQL Server数据库部署”任务和发布配置文件将DACPAC应用于目标SQL Server 2012环境数据库。

在我们的每个环境中,我们都有一对镜像服务器,一次只有一个“主”,另一个是“镜像”。

Visual Studio中用于管理发布配置文件的GUI似乎不提供“故障转移伙伴”,因此我手动编辑了发布配置文件的XML文件,以将“故障转移伙伴”元素添加到连接字符串。 / p>

但是,似乎发布配置文件方法不支持镜像数据库连接字符串,因此当我们的数据库在连接字符串中标识为“故障转移伙伴”的节点上为主时,DACPAC部署(使用sqlpackage.exe) )失败并显示错误:“无法打开数据库”“DatabaseName”登录请求“。我们已经弄清楚它忽略了“故障转移伙伴”,只是试图连接到非活动节点。

我还尝试使用“发布配置文件”在Visual Studio 2015中运行部署,并且当数据库位于标识为故障转移伙伴的节点上时发生了同样的错误。

所以我的问题是,我们如何使用具有发布配置文件的DACPAC和sqlpackage.exe在部署时更新相应的数据库,其中数据库可能是镜像对中任一节点上的主数据库?

1 个答案:

答案 0 :(得分:0)

原来是错误消息:

  

无法对数据库“ ...”执行该操作,因为它涉及数据库镜像会话或可用性组。不允许对参与数据库镜像会话或可用性组的数据库进行某些操作

是由于尝试更改数据库属性而引起的,并且与dacpac部署没有特定关系。导致产生ALTER DATABASE语句的不正确的项目设置将在部署过程中导致该错误。在我们的情况下,将配置文件发布到Deploy database properties的选项与与目标数据库不同的SQL项目恢复数据库设置相结合,产生了ALTER DATABASE [$(database)] SET RECOVERY SIMPLE...语句,除非禁用了镜像,否则该语句将不会部署

尝试更改SQL项目属性以匹配目标数据库,或者选择不使用以下标志来部署数据库属性:/p:ScriptDatabaseOptions=False或从用户界面:

enter image description here