Развертывание в SQL Azure с помощью Powershell. Существует ли способ создания отчета с предупреждением о потере данных?

У меня есть вопрос, касающийся обновления приложения уровня данных (DACPAC) при развертывании в базе данных SQL Azure. Когда мы обновляем 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? Планируется ли, что это будет поддержано в ближайшее время?

Заранее благодарны за Вашу помощь.

2 ответа

Решение

Только что связался с владельцем DAC @ Microsoft, и вот решение, которое он предложил: это возможно, используя их управляемый API или SqlPackage.exe.

SqlPackage.exe имеет действие для создания отчета о развертывании. Если обнаружена возможная проблема потери данных, она будет включена в отчет.

Ссылка: http://msdn.microsoft.com/en-us/library/hh550080(v=VS.103).aspx

Согласно 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), которое сработает после завершения операции обновления, Если что-то пойдет не так, свойство Error аргумента события (http://technet.microsoft.com/en-us/library/microsoft.sqlserver.management.dac.dacactioneventargs.error.aspx) будет содержать подробное исключение. Это может быть не тот HTML-отчет, который вы хотите, но он все равно даст вам некоторую информацию. Вы можете обрабатывать события CLR из PowerShell. Пожалуйста, обратитесь к http://blogs.msdn.com/b/powershell/archive/2008/05/24/wpf-powershell-part-3-handling-events.aspx для образца.

Кстати, на самом деле проблема связана не только с SQL Azure. Вы также можете изменить свой тег на SQL Server, чтобы получить дополнительные предложения.

С уважением,

Мин Сюй.

Другие вопросы по тегам