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


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

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Перед развертыванием пакета приложения уровня данных рекомендуется просмотреть его содержимое и проверить действия по обновлению перед обновлением существующего пакета приложения уровня данных. Тем более это истина для развертывания пакетов, которые ранее в организации не развертывались.

Ниже перечислены методы обновления пакета DAC:

Ненадежные пакеты DAC

Рекомендуется не выполнять развертывание пакетов DAC, полученных из неизвестных или ненадежных источников. Такие daCs могут содержать вредоносный код, который может выполнять непреднамеренный код Transact-SQL или вызвать ошибки, изменив схему. Прежде чем использовать DAC из неизвестного или ненадежного источника, разверните его в изолированном тестовом экземпляре ядро СУБД, запустите DBCC CHECKDB (Transact-SQL) в базе данных, а также изучите код, например хранимые процедуры или другой определяемый пользователем код в базе данных.

Просмотр содержимого приложения уровня данных

Существует два механизма просмотра содержимого пакета приложения уровня данных:

  • импорт пакета DAC в проект SQL в средствах разработчика SQL Server
  • публикация пакета DAC в тестовом экземпляре

Импорт приложения уровня данных в средства разработчика SQL Server

  1. Откройте меню Файл, выберите Создать, затем Проект....

  2. Выберите шаблон проекта SQL Server и укажите Имя, Расположениеи Имя решения.

  3. В Обозреватель решений щелкните правой кнопкой мыши узел проекта и выберите "Свойства...".

  4. На вкладке Параметры проекта в разделе Типы вывода установите флажок Приложение уровня данных (файл с расширением DACPAC) и закройте диалоговое окно свойств.

  5. В Обозреватель решений щелкните правой кнопкой мыши узел проекта и выберите импорт приложения уровня данных....

  6. Используйте Обозреватель решений , чтобы открыть любые файлы в приложении уровня данных, например политику выбора сервера, а также скрипты, выполняемые до и после развертывания.

  7. Используйте Представление схемы , чтобы просмотреть все объекты, составляющие схему, обращая особое внимание на код таких объектов, как функции или хранимые процедуры.

Публикация пакета DAC в тестовом экземпляре

Несколько средств доступны для публикации пакета DAC в тестовом экземпляре. Расширение Dacpac SQL Server для Azure Data Studio содержит мастер приложений уровня данных. Мы рассмотрим публикацию пакета DAC в тестовом экземпляре.

  1. При необходимости разверните тестовый экземпляр с помощью мастера развертывания.

  2. Подключитесь к тестовом экземпляру в Azure Data Studio и щелкните правой кнопкой мыши узел сервера. Выберите мастер приложений уровня данных в контекстном меню.

  3. На шаге 1 мастера выберите "Развернуть dacpac-файл приложения уровня данных" в экземпляре SQL Server

  4. Один шаг 2 мастера, введите расположение файла и выберите новую базу данных для целевой базы данных . Введите имя базы данных.

  5. На шаге 3 мастера просмотрите сводку перед выбором "Развернуть".

  6. После завершения развертывания просмотрите содержимое базы данных в обозревателе объектов.

  7. НЕОБЯЗАТЕЛЬНО. Щелкните правой кнопкой мыши базу данных в обозревателе объектов и выберите "Создать проект из базы данных ", чтобы создать проект SQL из базы данных.

Просмотр изменений базы данных

Непосредственно в связанной базе данных после развертывания текущей версии приложения уровня данных на рабочем сервере могут быть выполнены изменения, конфликтующие со схемой, которая определена в новой версии приложения уровня данных. Прежде чем обновлять приложение уровня данных, проверьте, могут ли изменения, внесенные в базу данных, повлиять на процесс обновления. В нескольких сценариях может потребоваться просмотреть разницу между базой данных и пакетом DAC. Например, изменения могут быть внесены непосредственно в связанную базу данных, которая может конфликтовать с схемой, определенной в новой версии DAC.

Все базы данных

Просмотр изменений базы данных с помощью сравнения схем

Просмотр изменений базы данных с помощью интерфейса командной строки SqlPackage

Интерфейс командной строки SqlPackage можно использовать с действием DeployReport для просмотра различий между DACPAC и базой данных с помощью действий, которые будут приняты при публикации dacpac в базе данных.

Базы данных, зарегистрированные в качестве приложения уровня данных

Просмотр изменений базы данных с помощью мастера

  1. Запустите мастер обновления приложения уровня данных , указав текущую развернутую версию приложения уровня данных и пакет приложения уровня данных, содержащий новую версию приложения уровня данных.

  2. На странице Обнаружение изменений просмотрите отчет об изменениях, которые были выполнены в базе данных.

  3. Выберите Отмена , если не желаете продолжать обновление.

  4. Дополнительные сведения об использовании мастера см. в разделе Обновление приложения уровня данных.

Просмотр изменений базы данных с помощью PowerShell

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

  2. Откройте объект ServerConnection и подключитесь к тому же экземпляру.

  3. Укажите имя приложения уровня данных в переменной.

  4. Используйте метод GetDatabaseChanges() для получения объекта ChangeResults и направьте объект по каналу в текстовый файл, чтобы сформировать простой отчет о новых, удаленных и измененных объектах.

В следующем примере отображаются все изменения базы данных, внесенные в развернутый DAC с именем MyApplication.

## Set a SMO Server object to the default instance on the local computer.  
CD SQLSERVER:\SQL\localhost\DEFAULT  
$srv = get-item .  
  
## 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)  
  
## 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  

Просмотр изменений базы данных с помощью интерфейса командной строки SqlPackage

Интерфейс командной строки SqlPackage можно использовать с действием DriftReport для просмотра изменений, внесенных в базу данных с момента последней регистрации.

Просмотр действий по обновлению

Все базы данных

Просмотр изменений базы данных с помощью публикации проекта SQL

Просмотр действий по обновлению с помощью интерфейса командной строки SqlPackage с помощью интерфейса командной строки SqlPackage можно использовать с действием DeployReport для просмотра различий между dacpac и базой данных с помощью действий, которые будут приняты при публикации dacpac в базе данных.

Базы данных, зарегистрированные в качестве приложения уровня данных

Прежде чем использовать новую версию пакета DAC для обновления уровня данных, развернутого из более раннего пакета DAC, можно создать отчет, содержащий инструкции Transact-SQL, которые будут выполняться во время обновления, а затем просмотреть инструкции.

Создание отчетов об обновлениях с помощью мастера

  1. Запустите мастер обновления приложения уровня данных , указав текущую развернутую версию приложения уровня данных и пакет приложения уровня данных, содержащий новую версию приложения уровня данных.

  2. На странице Сводка просмотрите отчет о действиях обновления.

  3. Выберите Отмена , если не желаете продолжать обновление.

  4. Дополнительные сведения об использовании мастера см. в разделе Обновление приложения уровня данных.

Действия обновления отчета с помощью PowerShell

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

  2. Откройте объект ServerConnection и подключитесь к тому же экземпляру.

  3. Используйте System.IO.File для загрузки файла пакета приложения уровня данных.

  4. Укажите имя приложения уровня данных в переменной.

  5. Используйте метод GetIncrementalUpgradeScript() для получения списка инструкций Transact-SQL, которые будут выполняться при обновлении, и направьте этот список по каналу в текстовый файл.

  6. Закройте файловый поток, используемый для чтения файла пакета приложения уровня данных.

В следующем примере сообщается инструкции Transact-SQL, которые будут выполняться для обновления DAC с именем MyApplication до схемы, определенной в файле MyApplication2017.dacpac.

## Set a SMO Server object to the default instance on the local computer.  
CD SQLSERVER:\SQL\localhost\DEFAULT  
$srv = get-item .  
  
## 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)  
  
## Load the DAC package file.  
$dacpacPath = "C:\MyDACs\MyApplication2017.dacpac"  
$fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)  
$dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)  
  
## 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()  

сравнение приложений уровня данных

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

Если импортировать оба пакета приложений уровня данных в проекты приложений уровня данных в средствах разработчика SQL Server, то для анализа различий между ними станет возможным использовать средство «Сравнение схем».

Можно также распаковать приложения уровня данных в отдельные папки. После этого проанализировать различия можно будет с помощью средства поиска отличий, например программы WinDiff.

См. также

Приложения уровня данных
Развертывание приложения уровня данных
Обновление приложения уровня данных