Saltar al contenido

Usando la variable de entorno SSIS en diferentes servidores

Ten en cuenta que en las ciencias un problema suele tener varias resoluciones, no obstante nosotros te mostramos lo más óptimo y eficiente.

Solución:

Creando tu carpeta

En el Catálogo de servicios de integración, en SSISDB, haga clic con el botón derecho y cree una carpeta dándole un nombre, pero no no haga clic en Aceptar. En su lugar, haga clic en Script, Nueva ventana del editor de consultas. Esto da una consulta como

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''

Ejecute eso, pero luego guárdelo para que pueda crear la misma carpeta en el servidor 2 y el servidor 3. Este será un tema, por cierto

Creando tu entorno

Actualice el menú desplegable debajo de SSISDB y busque la carpeta que acaba de crear. Expanda y en Entornos, haga clic con el botón derecho y Crear nuevo entorno. Déle un nombre y una descripción, pero NO HAGA CLIC EN ACEPTAR. En su lugar, haga clic en Script, Nueva ventana del editor de consultas.

Ahora tenemos este código

EXEC [SSISDB].[catalog].[create_environment]
    @environment_name = N'DatabaseConnections'
,   @environment_description = N''
,   @folder_name = N'MyNewFolder'

Ejecútelo y guárdelo para implementarlo en los servidores 2 y 3.

Agregar valores a un entorno

Actualice el árbol de entornos y, en la ventana Propiedades del entorno recién creado, haga clic en la pestaña Variables y agregue sus entradas para sus cadenas de conexión o lo que sea. Aquí es donde realmente De Verdad no quiero hacer clic en Aceptar. En su lugar, haga clic en Script, Nueva ventana del editor de consultas.

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

Ejecute esa consulta y luego guárdela. Ahora, cuando vaya a implementar en el entorno 2 y 3, simplemente cambiará el valor de @var

Configuración

Hasta este punto, simplemente nos hemos posicionado para tener éxito en tener un conjunto consistente de Carpetas, Entornos y Variables para nuestros paquetes. Ahora necesitamos realmente usar ellos contra un conjunto de paquetes. Esto supondrá que sus paquetes se han implementado en la carpeta entre el paso anterior y ahora.

Haga clic derecho en el paquete / proyecto a configurar. Lo más probable es que desee el proyecto.

  1. Haga clic en la pestaña Referencias. Agregue … y use DatabaseConnections, o lo que sea que haya llamado suyo
  2. Vuelva a hacer clic en Parámetros. Haga clic en la pestaña Administradores de conexiones. Busque un Administrador de conexión y en la Cadena de conexión, haga clic en los puntos suspensivos y cámbielo a “Usar variable de entorno” y encuentre su valor.
  3. ¡NO HAGA CLIC EN ACEPTAR! Script -> Nueva ventana del editor de consultas

En este punto, tendrá una secuencia de comandos que agrega una referencia a la variable de entorno (para que pueda usarla) y luego superpone el valor del paquete almacenado con el del entorno.

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

Esta secuencia de comandos debe guardarse y utilizarse para los servidores 2 y 3.

Trabajo

Todo eso hace que tenga las configuraciones disponibles para usted. Cuando programe la ejecución del paquete desde un trabajo, terminará con un paso de trabajo como el siguiente

EXEC msdb.dbo.sp_add_jobstep
    @job_name = N'Demo job'
,   @step_name = N'SSIS job step'
,   @subsystem = N'SSIS'
,   @command = N'/ISSERVER ""SSISDBMyNewFolderHandlingPasswordsClassicApproach.dtsx"" /SERVER "".dev2014"" /ENVREFERENCE 1 /Par ""$ServerOption::LOGGING_LEVEL(Int16)"";1 /Par ""$ServerOption::SYNCHRONIZED(Boolean)"";True /CALLERINFO SQLAGENT /REPORTING E'
  • El Comando es obviamente la pieza importante.
  • Estamos ejecutando el paquete ClassicApproach
  • Ejecute esto en el servidor actual con una instancia de Dev2014
  • Usar referencia de entorno 1
  • Usamos el nivel de registro estándar.
  • Esta es una llamada síncrona, lo que significa que el agente esperará hasta que se complete el paquete antes de pasar al siguiente paso.

Referencia de entorno

Notará que todo lo anterior fue agradable y cadenas de texto especificadas en lugar de valores enteros aleatorios, excepto por nuestra Referencia de entorno. Eso es porque puede tener el mismo nombre textual para un entorno en varias carpetas. De manera similar a cómo se puede implementar el mismo proyecto en varias carpetas, pero por alguna razón, los desarrolladores de SSIS optaron por proporcionar rutas de acceso completamente calificadas a un paquete mientras nosotros usamos valores enteros “aleatorios”. Para determinar el ID de su entorno, puede ejecutar la siguiente consulta

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;

O explore el Catálogo de servicios de integración en Carpeta / Entornos y haga doble clic en el Entorno deseado. En la ventana Propiedades del entorno resultante, el nombre y el identificador aparecerán atenuados y es el Identifier valor de propiedad que necesita usar en el comando de paso de trabajo de su Agente SQL para el /ENVREFERENCE valor.

Envolver

Si tiene cuidado y guarda todo lo que el asistente hace por usted, solo tiene 1 cosa que debe cambiarse cuando migre los cambios en su entorno. Esto conducirá a procesos de migración limpios, fluidos y repetibles y te preguntarás por qué querrías volver a los archivos XML o cualquier otro enfoque de configuración.

Eres capaz de animar nuestra función mostrando un comentario o puntuándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *