четверг, 25 августа 2016 г.

Как далать массовую загрузку пакетов SSIS в хранилище

Не так давно на моей работе мы проводили миграцию с MSSQL2008 на MSSQL2014. Больше всего хлопот доставил перенос пакетов SSIS. Учитывая, что в новой версии SSIS поменялись типы объектов и вообще структура пакета, для преобразования придется открыть все проекты и конвертировать пакеты штатными средствами. Это простой, но довольно утомительный процесс, который я здесь не буду описывать.

Когда все пакеты преобразованы, их нужно установить на новом сервере (здесь я имею ввиду, что хранилище пакетов MSSQL сервера). Если вы используете project deployment model, то, возможно, этот процесс будет тривиальным. Проблемы могут возникнуть при использовании package deployment model. Штатными средствами Visual Studio нет возможности осуществить деплоймент всех пакетов проекта одной операцией - нужно каждый пакет устанавливать отдельно. Если вы используете утилиту BIDSHelper, то она позволяет осуществлять массовую установку пакетов проекта. В свойствах проекта на закладке Deploy нужно лишь указать куда устанавливать пакеты. К сожалению, у утилиты BIDSHelper не очень много настроек для управления процессами деплоймента пакетов, и поэтому, если ваши пакеты хранят sensitive данные (ProtectionLevel = EncryptSensitiveWithPassword) и обычно вы его сохраняете в хранилище с опцией rely on server storage and roles for access control, то утилита сохранит их некорректно.

Что можно сделать в данной ситуации?


Использовать утилиту dtutil 

Для массовой установки пакетов мною был написан небольшой скрипт (Deploy.bat):

set SSISDIR=/CRM_ETL/

for %%f in (D:\Deployment\*.dtsx)  do (

"C:\Program Files\Microsoft SQL Server\120\DTS\Binn\dtutil.exe" /Decrypt "pwd" /FILE "%%f" /Encrypt SQL;"%SSISDIR%/%%~nf";5 /DestServer PRDSrv /Quiet

)
pause>nul

Что делает скрипт.
1. На диске D: я создал папку D:\Deployment\ в которую поместил все пакеты проекта, который хочу установить.
2. Переменной SSISDIR присваиваем значение папки на сервере SSIS, в которую хотим установить пакеты (папка должна быть предварительно создана).
3. Запускаем скрипт.

Скрипт в цикле перебирает все файлы *.dtsx в указанной директории (D:\Deployment\) и запускает утилиту dtutil.exe.

Что делает командная строка утилиты dtutil.
Если у вас на компьютере установлено несколько версий клиентской части MSSQL, то убедитесь, что запускаете нужную версию dtutil. В данном примере версия MSSQL2014. Опцией /FILE , мы указываем, какой файл должна использовать утилита. Имя файла берется из переменной цикла "%%f". Далее файла декодируется командой /Decrypt используя пароль "pwd". Далее файл снова кодируется и загружается в хранилище на сервере /DestServer PRDSrv. Операция кодирования и загрузки : /Encrypt SQL;"%SSISDIR%/%%~nf";5 . Здесь SSISDIR - папка, куда устанавливать пакет (берется из переменной), %%~nf - имя файла, ;5 - указывает, что файл нужно установить с опцией rely on server storage and roles for access control.

Комментариев нет:

Отправить комментарий