DACPAC版本号更改会导致漂移,但漂移报告为空

时间:2016-06-23 14:44:02

标签: powershell dacpac sql-server-data-tools sql-server-data-project

我正在使用SQL Server数据层应用程序来控制数据库。我在Visual Studio中创建了SQL Server数据库项目,现在正在通过PowerShell自动部署DACPAC。在使用DacFx服务部署方法测试部署选项时,我一直在使用部署选项,特别是BlockWhenDriftDetected

根据我的理解,在您将部署并将所述数据库注册为数据后,在SQL Server中向外部部署的数据库添加某种类型的SQL Server对象(表,函数,sproc等)时,会发生数据库偏移。所述服务器上的层应用程序。虽然我已经对此进行了测试,但这种漂移检测似乎有点不对劲。

当我第一次部署/注册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>

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

感谢。

0 个答案:

没有答案