Использование переменной среды 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

конфигурация

для этот момент, мы просто позиционировали себя для успеха в том, чтобы иметь последовательный набор папок, среды и переменных(ов) для наших пакетов. Теперь нам нужно на самом деле использовать их против набора пакетов. Это предполагает, что ваши пакеты были развернуты в папку между вышеуказанным шагом и сейчас.

щелкните правой кнопкой мыши на пакете / проекте, который нужно настроить. Скорее всего, вам нужен проект.

  1. перейдите на вкладку Ссылки. Добавлять... и используйте DatabaseConnections или то, что вы назвали своим
  2. Нажмите кнопку Назад к параметрам. Перейдите на вкладку диспетчеры соединений. Найдите диспетчер соединений и в строке соединения щелкните многоточие и измените его на "использовать переменную среды" и найдите свое значение
  3. НЕ НАЖИМАЙТЕ 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-файлам или любому другому подходу к конфигурации.