Выгрузка SSIS-пакетов с сервера MS SQL
Жизнь порой подкидывает интересные задачки, на которые не так просто найти решение в интернете. Например, попрощаться с одним продуктом и перейти на другой, но на всякий случай оставить резервную копию наработок.
В нашем случае необходимо отказаться от использования трех MS SQL серверов, при этом сохранить все наработки, размещенные на серверах для переиспользования в случае необходимости.
В этой публикации расскажем, как можно быстро экспортировать все SSIS пакеты с нескольких MS SQL серверов, чтобы в дальнейшем можно было локально извлекать и использовать необходимые скрипты.
Поискав на просторах интернета, мы поняли, что информации про выгрузку SSIS пакетов практически нет. Погрузившись и изучив вопрос, нам удалось найти решение, которым делимся с вами.
Общий алгоритм следующий:
- Сначала собираем все пакеты с нужных нам серверов в отдельную табличку в виде двоичных данных.
- Затем создаем исполняемый файл сценария PowerShell Import_SSIS.ps1, создающий структуру папок SSISDB на диске и выгружающий пакеты в файлы.
- После чего, исполняем сценарий из файла PowerShell Import_SSIS.ps1, запустив файл Run_PScript.cmd.
Все это реализовано через SSIS-пакет.
Создадим таблицу в БД MS SQL для сбора SSIS пакетов в двоичном виде (например, на сервере serv 1):
Далее в Visual Studio (SSDT) создаем показанную ниже структуру SSIS пакета:
Описание элементов структуры (Рисунок 1):
1. «Trunc SSIS_Projects» — Очистка таблицы[DB_TOOL].[TOOLS].[SSIS_Projects]
2. «Fill serv1», «Fill serv2», «Fill serv3» — заполнение таблицы бинарными данными SSIS пакетов со всех трех серверов
3. «Make Server Dir cmd» — создание папок для каждого сервера. Внутри элемента создаем структуру:
3.1. «Источник “OLE DB”» — запрос, формирующий строки сценария создания структуры папок
3.2. «Назначение “Неструктурированный файл”» — создание самого файла с данными
4. «Make Folder Dir cmd» — создания папок структуры SSISDB. Внутри элемента создаем структуру:
4.1. «Источник “OLE DB”» — запрос, формирующий строки сценария создания структуры папок
4.2. «Назначение “Неструктурированный файл”» — добавление данных в файл
5. «Make Import SSIS cmd» — выгрузки пакетов в файлы. Внутри элемента создаем структуру:
5.1. «Источник “OLE DB”» — запрос, формирующий строки сценария для выгрузки пакетов в бинарные файлы
5.2. «Назначение “Неструктурированный файл”» — добавление данных в файл
6. «Задача “Выполнение процесса”» — запуск файла на исполнение
Далее выполним каждый шаг подробнее:
- В элемент «Trunc SSIS_Projects» (Execute SQL Task) добавляем скрипт очистки созданной таблицы «SSIS_Projects»:
2. Заполняем таблицу бинарниками пакетов со всех трех серверов. Для этого, в каждом из элементов: «Fill serv1», «Fill serv2», «Fill serv3» настраиваем соединение с сервером и вставляем следующий скрипт в свойство «SQLstatement»:
3. В элементах «Make Server Dir cmd», «Make Folder Dir cmd», «Make Import SSIS cmd» создаем два элемента, как показано на Рисунке 4:
Для всех трех элементов: «Make Server Dir cmd», «Make Folder Dir cmd», «Make Import SSIS cmd» настраиваем свойства внутреннего элемент «Назначение “Неструктурированный файл”» (как показано на Рисунках 5 и 6):
Обратите внимание, что галку «Overwrite data in the file» оставляем, чтобы создать файл.
Для элемента: «Make Server Dir cmd» во внутреннем элементе «Источник “OLE DB”» в свойство SQL command вставляем скрипт, представленный ниже. Где «\\SQLSF\fir\ETL\SSIS\’ + Server_Name + ‘» — это путь к расшаренной папке, в которую будут выгружаться SSIS пакеты (Рисунок 7):
4. Для элемента: «Make Folder Dir cmd» во внутреннем элементе «Назначение “Неструктурированный файл”» убираем галку «Overwrite data in the file», чтобы в файл дописывать данные (Рисунок 8).
Для элемента: «Make Folder Dir cmd» во внутреннем элементе «Источник “OLE DB”» в свойство SQL command вставляем скрипт:
5. Для элемента: «Make Import SSIS cmd» во внутреннем элементе «Назначение “Неструктурированный файл”» убираем галку «Overwrite data in the file», чтобы в файл дописывать данные.
Для элемента: «Make Import SSIS cmd» во внутреннем элементе «Источник “OLE DB”» в свойство SQL command вставляем скрипт:
3, 4, 5 шаги формируют файл Import_SSIS.ps1 с командами PowerShell, которые формируют файловую структуру и выгружают в нее SSIS пакеты при помощи утилиты «bcp».
Для корректной выгрузки нужно также настроить файл форматирования (bcp.fmt), указав нулевую длину префикса поя с данными. Про утилиту bcp и формат файла форматирования можно прочитать на сайте Microsoft.
Создаем файл Run_PScript.cmd – вручную со скриптом:
7. В элементе «Задача “Выполнение процесса”» в свойство Executable во вкладке Process пропишем строку запуска:
Публикуем SSIS пакет на сервере и запускаем его на исполнение.
В итоге, получается готовая структура вида:
И в папке serv* выгруженные SSIS пакеты соответствующего сервера:
В каждой папке SSIS пакета будут файлы формата .ispac. Если переименовать данные файлы с расширением .rar, то обычной программой Winrar можно увидеть внутренности архива:
Результат
Таким образом можно выгрузить разом все SSIS пакеты за относительно короткое время и сохранить для переиспользования в репозиторий.