Как проверить пакет приложения уровня данных
Перед развертыванием пакета приложения уровня данных (DAC) рекомендуется просмотреть его содержимое и проанализировать действия по обновлению перед тем, как обновить существующее приложение DAC с помощью пакета DAC. Тем более это истина для развертывания пакетов, которые ранее в организации не развертывались.
Просмотр содержимого приложения уровня данных
Просмотреть содержимое пакета приложения уровня данных можно с помощью двух механизмов. Можно создать проект приложения уровня данных в среде Microsoft Visual Studio 2010, а затем импортировать пакет приложения уровня данных в этот проект. Можно распаковать содержимое пакета в папку.
Примечание по безопасности |
---|
Рекомендуется не выполнять развертывание пакетов DAC, полученных из неизвестных или ненадежных источников. В этих пакетах может содержаться вредоносный код, вызывающий выполнение непредусмотренных инструкций Transact-SQL или появление ошибок из-за изменения схемы. Прежде чем использовать приложение уровня данных, полученное из ненадежного источника, разверните его на изолированном тестовом экземпляре компонента Database Engine, выполните для базы данных инструкцию DBCC CHECKDB, а также изучите исходный код в базе данных, например хранимые процедуры и другой определенный пользователем код. |
Просмотреть содержимое пакета приложения уровня данных можно, создав в Microsoft Visual Studio 2010 проект приложения уровня данных и импортировав пакет в этот проект. Затем с помощью области Обозреватель решений можно будет открыть любые файлы в приложении уровня данных, например политику выбора сервера, а также сценарии, выполняемые до и после развертывания. С помощью области Представление схемы можно просмотреть все объекты, составляющие схему, обращая особое внимание на код таких объектов, как функции или хранимые процедуры.
При отсутствии доступа к Visual Studio 2010 содержимое пакета приложения уровня данных можно распаковать в папку. После этого скрипты Transact-SQL можно будет открывать в редакторе запросов компонента Database Engine в среде SQL Server Management Studio, а файлы — в таких программах, как «Блокнот». Инструкции см. в разделе Как распаковать пакет DAC.
Анализ и обновление с помощью мастера
Перед обновлением приложения уровня данных сначала рекомендуется проверить изменения, внесенные в базу данных после развертывания первоначального приложения уровня данных, и проанализировать скрипт изменений, который будет выполнен при обновлении. Для просмотра этих сведений можно воспользоваться мастером обновления приложения уровня данных. Изменения базы данных отображаются на странице Обнаружение изменений, а действия по обновлению ― на странице Сводка. Если выполнять обновление не требуется, нажмите кнопку Отмена на странице Сводка. Дополнительные сведения см. в разделе Как обновить приложение уровня данных.
Просмотр изменений базы данных с помощью PowerShell
Перед тем как обновить приложение уровня данных, развернутое из пакета DAC более ранней версии, с помощью новой версии пакета DAC, проверьте, могут ли изменения, внесенные в базу данных, повлиять на процесс обновления.
Примечание |
---|
В примерах PowerShell, приведенных в этом разделе, используются методы из пакета дополнительных компонентов DAC Framework 1.1. Пакет дополнительных компонентов можно загрузить на этой веб-странице. |
Создайте файл скрипта PowerShell (с расширением PS1), содержащий следующий код:
Добавьте код для создания объекта SMO Server и задайте его экземпляру, содержащему приложение уровня данных, которое требуется обновить. В этом примере для объекта сервера задается экземпляр по умолчанию на локальном компьютере.
## Set a SMO Server object to the default instance on the local computer. CD SQLSERVER:\SQL\localhost\DEFAULT $srv = get-item .
Добавьте код, чтобы открыть объект ServerConnection и подключиться к тому же экземпляру.
## Open a Common.ServerConnection to the same instance. $serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject) $serverconnection.Connect() $dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
Добавьте код, чтобы указать ранее развернутое приложение уровня данных, затем создайте объект ChangeResults и направьте его в текстовый файл, чтобы сформировать простой отчет о новых, удаленных и измененных объектах.
## Specify the DAC instance name. $dacName = "MyApplication" ## Generate the change list and save to file. $dacChanges = $dacstore.GetDatabaseChanges($dacName) | Out-File -Filepath C:\DACScripts\MyApplicationChanges.txt
Запустите файл PS1 из сеанса PowerShell, в котором была выполнена загрузка оснасток SQL Server PowerShell, или с помощью программы командной строки sqlps.
Формирование скрипта обновления с помощью PowerShell
Перед тем как обновить приложение уровня данных, развернутое из пакета DAC более ранней версии, с помощью новой версии пакета DAC, можно сформировать файл скрипта, содержащий инструкции Transact-SQL, которые будут выполнены во время обновления, а затем просмотреть скрипт. Создайте файл скрипта PowerShell (с расширением PS1), содержащий следующий код:
Добавьте код для создания объекта SMO Server и задайте его экземпляру, содержащему приложение уровня данных, которое требуется обновить. В этом примере для объекта сервера задается экземпляр по умолчанию на локальном компьютере.
## Set a SMO Server object to the default instance on the local computer. CD SQLSERVER:\SQL\localhost\DEFAULT $srv = get-item .
Добавьте код, чтобы открыть объект ServerConnection и подключиться к тому же экземпляру.
## Open a Common.ServerConnection to the same instance. $serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject) $serverconnection.Connect() $dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
Добавьте код для загрузки файла пакета DAC. В этом примере загружается файл MyApplication.dacpac.
## Load the DAC package file. $dacpacPath = "C:\MyDACs\MyApplication.dacpac" $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate) $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
Добавьте код, чтобы указать ранее развернутое приложение уровня данных, затем создайте скрипт Transact-SQL и вставьте его в файл с расширением SQL. Закройте файловый поток, используемый для чтения нового пакета DAC.
## Specify the DAC instance name. $dacName = "MyApplication" ## Generate the upgrade script and save to file. $dacstore.GetIncrementalUpgradeScript($dacName, $dacType) | Out-File -Filepath C:\DACScripts\MyApplicationUpgrade.sql ## Close the filestream to the new DAC package. $fileStream.Close()
Запустите файл PS1 из сеанса PowerShell, в котором была выполнена загрузка оснасток SQL Server PowerShell, или с помощью программы командной строки sqlps.
Сравнение приложений уровня данных
Перед обновлением приложения уровня данных также можно проанализировать различия в базе данных и объектах уровня экземпляра между текущим и новым приложениями уровня данных. В случае отсутствия копии пакета действующего приложения уровня данных его можно извлечь из текущей базы данных.
Если импортировать оба пакета приложений уровня данных в проекты приложений уровня данных в Visual Studio 2010, то для анализа различий между ними можно будет использовать средство «Сравнение схем».
При отсутствии доступа к среде Visual Studio 2010 распакуйте приложения уровня данных в отдельные папки. После этого проанализировать различия можно будет с помощью средства поиска отличий, например программы WinDiff.
См. также