6

我正在使用 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>

这是一个错误还是我错过了什么?我很想忽略整个漂移检测并强制对生产数据库进行严格访问,以试图限制事后的更改。任何帮助将不胜感激。

谢谢。

4

0 回答 0