我正在使用 SQL Server 数据层应用程序对数据库进行源代码控制。我在 Visual Studio 中创建了我的 SQL Server 数据库项目,现在正在通过 powershell 自动部署 DACPAC。在使用 DacFx 服务部署方法测试部署选项时,我一直在尝试部署选项,特别是BlockWhenDriftDetected
.
现在根据我的理解,当您将某种类型的 SQL Server 对象(表、函数、sproc 等)添加到 SQL Server 中的外部部署数据库后,在您将所述数据库部署并注册为数据层应用程序之后,就会发生数据库漂移。说服务器。尽管我一直在对此进行测试,但这种漂移检测似乎有点不对劲。
当我第一次部署/注册 DACPAC 时,当然一切都很好,没有漂移。然而,如果我唯一更改的是 VS 中我的数据库项目属性中的版本号,重建项目,然后尝试使用 DacFx 重新部署 DACPAC 文件,它会检测到数据库漂移。
要部署我的 DACPAC,我使用以下 powershell 代码:
Add-Type -Path "C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\Microsoft.SqlServer.Dac.dll"
$dacservices = New-Object Microsoft.SqlServer.Dac.DacServices "server=(localdb)\v11.0;trusted_connection=true;"
$dacpac = [Microsoft.SqlServer.Dac.DacPackage]::Load("C:/Projects/Sample/DacProject/bin/Debug/MyDatabase.dacpac")
$deployOptions = New-Object Microsoft.SqlServer.Dac.DacDeployOptions
$deployOptions.RegisterDataTierApplication = $true;
$deployOptions.BlockWhenDriftDetected = $true;
$dacservices.Deploy($dacpac, "MyDatabase", $true, $deployOptions)
更新版本号并重建后再次运行上述代码,我会得到漂移检测错误:
Exception calling "Deploy" with "4" argument(s): "Could not deploy package.
Error SQL0: Database has drifted from its registered data-tier application.
另外,为了让事情变得更加混乱,当我检查数据库漂移时......
Write-Host $dacservices.GenerateDriftReport("MyDatabase")
我得到一个空报告,这意味着一切都应该没问题:
<DriftReport xmlns="http://schemas.microsoft.com/sqlserver/dac/DriftReport/2012/02">
<Additions />
<Removals />
<Modifications />
</DriftReport>
这是一个错误还是我错过了什么?我很想忽略整个漂移检测并强制对生产数据库进行严格访问,以试图限制事后的更改。任何帮助将不胜感激。
谢谢。