sql-server - 什么会导致在一台服务器而不是另一台服务器上部署 dacpac 失败?
问题描述
关于这个问题有很多问题。这是一个 - SSDT 无法发布:“无法连接到主服务器或目标服务器”。我遇到了同样的错误:
2020-03-03T13:51:28.5079081Z *** Could not deploy package.
2020-03-03T13:51:28.5080013Z Unable to connect to master or target server 'databasename'. You must have a user with the same password in master or target server 'databasename'.
2020-03-03T13:51:28.6466638Z ##[error]Publishing to database 'databasename' on server 'server'.
Initializing deployment (Start)
Initializing deployment (Failed)
我正在通过 Azure DevOps 进行部署。当我部署到我们的两个较低环境(在同一开发服务器上运行)时,它工作正常,但今天早上是我们的第一次生产部署。SQL Server 2016 在两台服务器上运行。不过版本还是有区别的。开发服务器正在运行Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64)
,而生产正在运行Microsoft SQL Server 2016 (RTM-CU5) (KB4013105) - 13.0.2197.0 (X64)
。两者都将兼容性级别设置为 130。
开发中发布步骤的 YAML 如下所示:
steps:
- task: SqlDacpacDeploymentOnMachineGroup@0
displayName: 'Deploy using : dacpac'
inputs:
DacpacFile: '$(System.DefaultWorkingDirectory)/database/Database.dacpac'
TargetMethod: publishProfile
PublishProfile: '$(System.DefaultWorkingDirectory)/Database/develop.publish.xml'
开发步骤和生产步骤之间的唯一区别是发布配置文件不同。两个发布配置文件 XML 文件之间的唯一区别是服务器名称和数据库名称。
这是开发配置文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>develop</TargetDatabaseName>
<DeployScriptFileName>develop.sql</DeployScriptFileName>
<ProfileVersionNumber>1</ProfileVersionNumber>
<TargetConnectionString>validconnectionstring</TargetConnectionString>
<BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss>
<GenerateSmartDefaults>True</GenerateSmartDefaults>
</PropertyGroup>
<ItemGroup>
<SqlCmdVariable Include="dbEnvironment">
<Value>develop</Value>
</SqlCmdVariable>
<SqlCmdVariable Include="migratedLegacyDatabase">
<Value>Migration-Develop</Value>
</SqlCmdVariable>
<SqlCmdVariable Include="migrationSource">
<Value>false</Value>
</SqlCmdVariable>
</ItemGroup>
</Project>
我们使用 Jenkins 时使用了相同的配置文件,但过程略有不同。当我在生产配置文件中使用凭据时,我能够成功连接到数据库。
感觉我必须遗漏一些明显的东西,但我不确定它是什么。我知道这不是一个容易重现的问题,但如果有人有任何想法,我会全力以赴。
解决方案
推荐阅读
- flutter - 带有动画提示/标签的 TextField
- webdriver-io - 如何阻止 webdriverIo 测试运行器关闭浏览器
- elasticsearch - KEY 为 Null 的 Elasticsearch 查询
- c# - C# 使用构造函数设置多维数组的值
- android - 如何从网络而不是从 http 缓存中获取数据?
- c++ - 如何正确使用 QLayouts(hbox、vbox 等)?
- python - 如何将列表拆分为相等的子列表,最后一个子列表由列表的第一个可能元素组成
- arrays - 使用 Typescript 从数组中的键返回最大的数字
- c# - 您如何根据在此问题中所做的按键字母选择列表框中的项目,但在 UWP 中?
- python - 将多个文件的内容存储在数组 Python 中