2010-01-21 28 views
5

Tengo muchos paquetes de SSIS que se conectan todos a la misma base de datos. No quiero codificar el nombre del servidor en la conexión db en cada base de datos, porque es diferente del servidor dev en vivo. Y esos nombres de servidor podrían cambiar con el tiempo.Cómo hacer que el nombre del servidor sea dinámico en un paquete SSIS

sé que se puede poner en un archivo de configuración, pero todos estos paquetes SSIS se almacenan en SQL Server 2008 y quiero seguir todos los detalles en SQL Server.

¿Alguien tiene alguna sugerencia o consejo?

Estaba pensando en la creación de un paquete llamado GetServerName que devuelve el nombre del servidor, el cual podría utilizar para cambiar las conexiones en cada paquete. Pero podría haber una mejor manera.

Respuesta

0

He encontrado que el archivo de configuración es una manera bastante práctico para ir sobre esto.

Si programa su paquete para que se ejecute desde el Agente de SQL Server, puede especificar el archivo de configuración a usar desde una ruta de archivo, y que generalmente se encarga de todos mis requisitos de parámetros.

Si desea mantener los resultados en SQL Server, puede almacenarlos en una mesa, y recuperarlos. Pero ahora tienes que saber a qué servidor/tabla ir en contra de Dev/Test/Prod, y vuelves al problema original.

Mi consejo: tenga un archivo de configuración en la misma ubicación física en todos los servidores (Dev/Test/Prod) y tenga el punto de trabajo en el archivo de configuración apropiado para los parámetros.

2

que pueblan una variable con el nombre de servidor de una consulta que tiene el nombre del servidor activo. a continuación, en una tarea de secuencia de comandos Acabo de cambiar la cadena de conexión

Este ejemplo es para un ExcelFile pero sería muy similar a una conexión de SQL

Dts.Connections("ExcelConnection").ConnectionString = 
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\" + 

Dts.Variables("ActiveServerName").Value.ToString + "\Summary_" + 

Dts.Variables("FileDate").Value.ToString + 
".xls;Extended Properties=Excel 8.0;HDR=YES;" 
+0

Esto funciona bien Utilizamos SSIS para cargas de datos especializadas y pase la información de conexión de DB, ya que es única para cada instalación de cliente. – DaveE

7

Una característica muy agradable en SSIS para resolver sólo su tipo de problema se llama configuraciones de paquetes. Muchas personas tienen opiniones y/o ideas diferentes sobre cómo almacenar sus propiedades dinámicas de servidor/paquete/valores variables: archivos de configuración, variables de entorno, servidor SQL o entradas de registro. Personalmente me gusta almacenar toda la información en SQL Server, que es lo que quieres hacer. Para lograr esto, siga los pasos de este artículo: Package Configuration Steps

1

Además del archivo de configuración ...

Se puede definir una variable que se puede configurar mediante la línea de comandos o en un trabajo por lotes o SQL Server Trabajo del agente La variable puede ser sustituida en el nombre del servidor (por una expresión, IIRC).

Esto es útil para si quieres un despliegue único archivo.

Editar:

Example: (Lo siento, SQL Server central requiere registro)

2

Utilizamos una tabla de configuración en lugar de un archivo. Empiezas con una variable de entorno para apuntar a la base de datos con la tabla config y luego extraer todas las demás configuraciones desde allí.

Aquí es una muestra de una secuencia de comandos para rellenar una tabla de configuración (que daría lugar a una secuencia de comandos independiente para el servidor dev, QA Server, servidor Prod:.

--connections 
--for MyDatabaseName 
INSERT INTO MyDatabase.dbo.SSISConfig VALUES (
'MyConfigurationName', 'Data Source=MYSQLSERVER;Initial Catalog=MyDatabaseName;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;', 'Package.Connections[MyDatabaseName].Properties[ConnectionString]' , 'String') 

--variables 
--FilePathImportServer 
INSERT INTO MyDatabase.dbo.SSISConfig VALUES (
'MyConfigurationName', '\\MYSERVER\SOMECLIENT\Import\', '\Package.Variables[User::FilePathImportServer].Properties[Value]' , 'String') 

--select * from SSISConfig where configurationFilter = MyConfigurationName 
Cuestiones relacionadas