Использование переменной среды SSIS на разных серверах
Я прочитал несколько статей о переменных окружения, но я не могу найти как применить их использование в моем случае. Я разрабатываю пакеты SSIS на своей локальной машине. После их завершения я планирую развернуть их на промежуточном рабочем сервере. Мой проект SSIS состоит из нескольких пакетов, большинство из которых подключаются к 2 базам данных (но каждый сервер имеет свою собственную копию БД) и несколько файлов excel.
Итак, я хочу развернуть свои пакеты на 3 разных серверах. На основе сервера, строки подключения будут другими. Поскольку это все еще этап разработки, мне придется время от времени перераспределять большинство пакетов. Какова наилучшая практика для достижения этой цели?
1 ответов
создать папку
на Каталог Служб Integration Services, в SSISDB щелкните правой кнопкой мыши и создайте папку с именем, но сделайте не нажмите OK. Вместо этого щелкните сценарий, новое окно редактора запросов. Это дает запрос типа
DECLARE @folder_id bigint
EXEC [SSISDB].[catalog].[create_folder]
@folder_name = N'MyNewFolder'
, @folder_id = @folder_id OUTPUT
SELECT
@folder_id
EXEC [SSISDB].[catalog].[set_folder_description]
@folder_name = N'MyNewFolder'
, @folder_description = N''
запустите это, но затем сохраните его, чтобы вы могли создать ту же папку на сервере 2 и сервере 3. Это будет тема, кстати
создавая свой среды
обновите раскрывающийся список в SSISDB и найдите вновь созданную папку. Разверните его и в разделе среды щелкните правой кнопкой мыши и создайте новую среду. Дайте ему имя и описание, но не нажимайте OK. Вместо этого щелкните сценарий, новое окно редактора запросов.
теперь у нас есть этот код
EXEC [SSISDB].[catalog].[create_environment]
@environment_name = N'DatabaseConnections'
, @environment_description = N''
, @folder_name = N'MyNewFolder'
запустите его и сохраните для развертывания на серверах 2 и 3.
добавление значений в среде
обновить сред дерево и в окне Свойства для вновь созданной среды перейдите на вкладку переменные и добавьте записи для строк подключения или что-то еще. Вот где ты на самом деле,действительно не хотите нажимать OK. Вместо этого щелкните сценарий, новое окно редактора запросов.
DECLARE @var sql_variant = N'ITooAmAConnectionString'
EXEC [SSISDB].[catalog].[create_environment_variable]
@variable_name = N'CRMDB'
, @sensitive = False
, @description = N''
, @environment_name = N'DatabaseConnections'
, @folder_name = N'MyNewFolder'
, @value = @var
, @data_type = N'String'
GO
DECLARE @var sql_variant = N'IAmAConnectionString'
EXEC [SSISDB].[catalog].[create_environment_variable]
@variable_name = N'SalesDB'
, @sensitive = False
, @description = N''
, @environment_name = N'DatabaseConnections'
, @folder_name = N'MyNewFolder'
, @value = @var
, @data_type = N'String'
GO
запустите этот запрос и сохраните его. Теперь, когда вы идете к развертыванию в среде 2 и 3, Вы просто измените значение @var
конфигурация
для этот момент, мы просто позиционировали себя для успеха в том, чтобы иметь последовательный набор папок, среды и переменных(ов) для наших пакетов. Теперь нам нужно на самом деле использовать их против набора пакетов. Это предполагает, что ваши пакеты были развернуты в папку между вышеуказанным шагом и сейчас.
щелкните правой кнопкой мыши на пакете / проекте, который нужно настроить. Скорее всего, вам нужен проект.
- перейдите на вкладку Ссылки. Добавлять... и используйте DatabaseConnections или то, что вы назвали своим
- Нажмите кнопку Назад к параметрам. Перейдите на вкладку диспетчеры соединений. Найдите диспетчер соединений и в строке соединения щелкните многоточие и измените его на "использовать переменную среды" и найдите свое значение
- НЕ НАЖИМАЙТЕ OK! Скрипт - > Новое Окно Редактора Запросов
на этом этапе у вас будет скрипт, который добавляет ссылку на переменную среды (чтобы вы могли ее использовать), а затем накладывает сохраненное значение пакета с одним из среды.
DECLARE @reference_id bigint
EXEC [SSISDB].[catalog].[create_environment_reference]
@environment_name = N'DatabaseConnections'
, @reference_id = @reference_id OUTPUT
, @project_name = N'HandlingPasswords'
, @folder_name = N'MyNewFolder'
, @reference_type = R
SELECT
@reference_id
GO
EXEC [SSISDB].[catalog].[set_object_parameter_value]
@object_type = 30
, @parameter_name = N'CM.tempdb.ConnectionString'
, @object_name = N'ClassicApproach.dtsx'
, @folder_name = N'MyNewFolder'
, @project_name = N'HandlingPasswords'
, @value_type = R
, @parameter_value = N'SalesDB'
GO
этот скрипт следует сохранить и использовать для сервера 2 & 3.
задание
все это делает так, что у вас будут доступные вам конфигурации. Когда вы запланируете выполнение пакета из задания, вы получите следующий шаг задания
EXEC msdb.dbo.sp_add_jobstep
@job_name = N'Demo job'
, @step_name = N'SSIS job step'
, @subsystem = N'SSIS'
, @command = N'/ISSERVER "\"\SSISDB\MyNewFolder\HandlingPasswords\ClassicApproach.dtsx\"" /SERVER "\".\dev2014\"" /ENVREFERENCE 1 /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E'
- команда, очевидно, является важной частью.
- мы бежим пакет
ClassicApproach
- запустите это на текущем сервере с экземпляром Dev2014
- используйте ссылку на среду 1
- мы используем стандартный уровень ведения журнала.
- это синхронный вызов, означающий, что агент будет ждать, пока пакет не завершится, прежде чем перейти к следующему шагу
Справочная Среды
вы заметите, что все вышеперечисленное было приятным и заданными текстовыми строками вместо случайных целых значений, за исключением нашей ссылки на окружающую среду. Это потому, что вы можете иметь одно и то же текстовое имя для среды в нескольких папках. Подобно тому, как вы можете развернуть один и тот же проект в нескольких папках, но по какой-либо причине разработчики SSIS решили предоставить полные пути к пакету, пока мы используем "случайные" целочисленные значения. Чтобы определить идентификатор среды, можно выполнить следующий запрос
SELECT
ER.reference_id AS ReferenceId
, E.name AS EnvironmentName
, F.name AS FolderName
, P.name AS ProjectName
FROM
SSISDB.catalog.environments AS E
INNER JOIN
SSISDB.catalog.folders AS F
ON F.folder_id = E.folder_id
INNER JOIN
SSISDB.catalog.projects AS P
ON P.folder_id = F.folder_id
INNER JOIN
SSISDB.catalog.environment_references AS ER
ON ER.project_id = P.project_id
ORDER BY
ER.reference_id;
или изучите каталог служб Integration Services в разделе папка / среды и дважды щелкните нужную среду. В результирующем окне свойств среды имя и идентификатор будут выделены серым цветом, и это Identifier
значение свойства, которое необходимо использовать в команде шага задания агента SQL для /ENVREFERENCE
значение.
подведем итоги
если вы будете осторожны и сохраните все, что мастер делает для вас, у вас есть только 1 вещь, которая должна быть изменена при миграции изменений по всей среде. Это приведет к чистому, ровному, repeatable процессы миграции, и Вам интересно, почему вы когда-нибудь захотите вернуться к XML-файлам или любому другому подходу к конфигурации.