4

在部署到 SQL Azure 数据库时,我有一个关于数据层应用程序 (DACPAC) 升级的问题。当我们通过向导 UI 手动升级 DACPAC 时,有一个步骤是我们查看数据丢失警告报告并能够将操作报告保存到 HTML 文件(请参阅此处的“查看升级计划页面”)。操作列显示将运行以执行升级的操作,例如 Transact-SQL 语句。如果相关操作可能会删除数据,则数据丢失列将包含警告。

现在,我正在使用 Powershell 自动化数据库升级过程,到目前为止效果很好。不幸的是,我找不到生成相同数据丢失警告报告的方法

我的 Powershell 升级脚本的摘录如下:

## Generate the database change list (database drift) and upgrade script and save them to file.
$dacChanges = $dacStore.GetDatabaseChanges($dataTierAppNameToUpgrade) | Out-File -Filepath .\DatabaseChanges.txt

## Getting the DAC incremental upgrade script for data-tier application
$dacStore.GetIncrementalUpgradeScript($dataTierAppNameToUpgrade, $nextDacType) | Out-File -Filepath .\DatabaseUpgrade.sql

生成的DatabaseChanges.txt输出文件GetDatabaseChanges()并没有提供真正的信息,所以我们想知道是否有一种方法可以获得与手动完成升级向导时获得的报告文件相同的报告文件。在解决数据迁移问题时,此报告对部署团队有很大帮助,我们希望在部署到实时生产数据库时能够手动检查它。

我们搜索了 MSDN 文档,但没有任何运气。有谁知道 Powershell 部署是否支持此功能?是否有计划在不久的将来支持此功能?

提前感谢您的帮助。

4

2 回答 2

1

根据http://technet.microsoft.com/en-us/library/microsoft.sqlserver.management.dac.dacupgradeoptions.aspx,默认情况下 IgnoreDataLoss 为 false,这意味着如果检测到数据丢失,升级将失败。在 .NET 中,您可以处理 DacActionFinished 事件 (http://technet.microsoft.com/en-us/library/microsoft.sqlserver.management.dac.dacstore.dacactionfinished.aspx),该事件将在升级操作完成时触发. 如果出现问题,事件 arg 的错误属性 (http://technet.microsoft.com/en-us/library/microsoft.sqlserver.management.dac.dacactioneventargs.error.aspx) 将包含详细的异常。它可能不是您想要的 html 报告,但它仍会为您提供一些信息。您可以从 PowerShell 处理 CLR 事件。请参阅http://blogs.msdn.com/b/powershell/archive/2008/05/24/wpf-powershell-part-3-handling-events.aspx示例。

顺便说一句,实际上这个问题不仅特定于 SQL Azure。您还可以将标记修改为 SQL Server 以获得进一步的建议。

最好的祝福,

明旭。

于 2012-04-17T08:55:36.210 回答
0

刚刚与 DAC @ Microsoft 的所有者取得联系,这是他建议的解决方案:可以使用他们的托管 API 或通过SqlPackage.exe

SqlPackage.exe 对其进行了操作以生成部署报告。如果检测到可能的数据丢失问题,它将包含在报告中。

参考: http: //msdn.microsoft.com/en-us/library/hh550080 (v=VS.103).aspx

于 2012-04-19T20:40:11.160 回答