Развертывание в 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, чтобы получить дополнительные предложения.
С уважением,
Мин Сюй.