Поделиться через


Как проверить пакет приложения уровня данных

Перед развертыванием пакета приложения уровня данных (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), содержащий следующий код:

  1. Добавьте код для создания объекта SMO Server и задайте его экземпляру, содержащему приложение уровня данных, которое требуется обновить. В этом примере для объекта сервера задается экземпляр по умолчанию на локальном компьютере.

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. Добавьте код, чтобы открыть объект 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)
    
  3. Добавьте код, чтобы указать ранее развернутое приложение уровня данных, затем создайте объект 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), содержащий следующий код:

  1. Добавьте код для создания объекта SMO Server и задайте его экземпляру, содержащему приложение уровня данных, которое требуется обновить. В этом примере для объекта сервера задается экземпляр по умолчанию на локальном компьютере.

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. Добавьте код, чтобы открыть объект 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)
    
  3. Добавьте код для загрузки файла пакета 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)
    
  4. Добавьте код, чтобы указать ранее развернутое приложение уровня данных, затем создайте скрипт 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.