Задача: автоматизировать снятие BACPAC пакета с базы данных SQL Server (для Azure SQL Database тоже работает). Напомню, BACPAC не содержит transaction log, соответственно для point-in-time restore не подойдет. В нашем случае нужен для быстрого развертывания "по требованию" копии базы с нужными данными, для проведения интеграционного тестирования.
Идеальным решением оказался скрипт на PowerShell. Код простейший, я взял гуляющую по интернету версию (к сожалению, ссылка на исходный скрипт затерялась) и немного ее доработал в нужную сторону. Создание бэкапа выполняется следующими командлетами:
$Services = new-object Microsoft.SqlServer.Dac.DacServices $ConnectionString
$Services.ExportBacpac($OutputFile, $DatabaseName)
Есть полный работоспособный пример на GitHub. Для работы необходим PowerShell 3.0+ и Microsoft® SQL Server® Data-Tier Application Framework, желательно последней версии. На х64 машине необходимо установить как х86, так и х64 версию данной библиотеки.
Куда больше времени пришлось потратить на запуск скрипта через SQL Server Agent, когда я решил автоматизировать создание пакета с помощью периодически выполняемой задачи (job). Как оказалось, SQL Server может использовать различные версии powershell для выполнения скрипта, в зависимости от версии самого SQL Server и step type у нашей задачи. Вообще говоря, выполнить PowerShell от лица SQL Server Agent возможно из нескольких типов шагов:
Сразу приведу workaround: для успешного выполнения Powershell скрипта через агента SQL Server 2012-2014 необходим шаг Operating System (CmdExec) со следующей командой:
Идеальным решением оказался скрипт на PowerShell. Код простейший, я взял гуляющую по интернету версию (к сожалению, ссылка на исходный скрипт затерялась) и немного ее доработал в нужную сторону. Создание бэкапа выполняется следующими командлетами:
$Services = new-object Microsoft.SqlServer.Dac.DacServices $ConnectionString
$Services.ExportBacpac($OutputFile, $DatabaseName)
Есть полный работоспособный пример на GitHub. Для работы необходим PowerShell 3.0+ и Microsoft® SQL Server® Data-Tier Application Framework, желательно последней версии. На х64 машине необходимо установить как х86, так и х64 версию данной библиотеки.
Куда больше времени пришлось потратить на запуск скрипта через SQL Server Agent, когда я решил автоматизировать создание пакета с помощью периодически выполняемой задачи (job). Как оказалось, SQL Server может использовать различные версии powershell для выполнения скрипта, в зависимости от версии самого SQL Server и step type у нашей задачи. Вообще говоря, выполнить PowerShell от лица SQL Server Agent возможно из нескольких типов шагов:
- Operating System (CmdExec)
- Powershell
Сразу приведу workaround: для успешного выполнения Powershell скрипта через агента SQL Server 2012-2014 необходим шаг Operating System (CmdExec) со следующей командой:
powershell.exe -version 3.0 -ExecutionPolicy Bypass -file "C:\yourscript.ps1"
Комментариев нет:
Отправить комментарий