SlideShare una empresa de Scribd logo
SoluciónSSIS para ejecucionescentralizadasengrandesentornos SQL SERVER.
En lostiemposque correnesbastante comúnque un DBA que trabaje enuna gran compañía
administre decenas,cientosoinclusomilesde instanciasSQLSERVER,porlo que una tarea tan
sencillacomocambiarunparámetrode configuracióndel servidor,instalarunnuevoplande
mantenimientoomodificarlaprogramaciónde backupentodas ellaspuede resultarunatareade lo
más tediosa.
Para podercontrolary automatizarenla medida de loposible este tipode operacionesyoptimizar
nuestrovaliosotiempose hadiseñadoestasolución.
A grandesrasgosel objetivoestenerunlistadode servidoresenunatablaconun campo enel que
cargaremosel códigoTSQL que deseamosejecutarsobre cadainstancia.
Instancia SQL
VAIO select@@version
Después,conlaayuda de SQL SERVER DATA TOOLS (SSTD) crearemosunpaquete de intrgration
servicesconunaconexióndinámicaque recorrerádichatablayejecutaráel códigoTSQL encada
una de las instancias.
De estamanera,algocomo crear un LOGIN,un LINKEDSERVER, o modificarel valordel Remote
QueryTimeoutentodasnuestrasinstanciaspodrállevarnosunospocosminutos.
Elementosnecesarios:
1 -Base de datos de herramientas:
Para contenerlastablasde configuraciónyde LOG que vamosa utilizarcrearemosunabase de
herramientasllamadaDBA,personalmentesiempre me gustatenerestabase de datosenlas
instanciasque administroparaalbergarmistablas,reportesyprocedimientosalmacenadosde
administración.
2 –Tabla de instancias:
En la base de datos DBA crearemosunatablallamada SSIS_All_instancesque constaráde 2 campos,
Instancia (Nombre exactode cadainstanciaque queramosincluir) y SQL(CódigoTSQL a ejecutar).
USE DBA
GO
CREATE TABLE [dbo].[SSIS_All_instances](
[Instancia] [varchar](200) NOT NULL,
[SQL] [varchar](MAX) NULL
) ON [PRIMARY]
GO
3 –Tabla de LOG.
Al tenerque establecerconexionesconmuchosservidores,nonosinteresaque unfallode conexión
o de ejecuciónsobre unode ellosfinaliceel trabajo,perosíteneruncontrol de encualesse ha
ejecutadoyencuálesno.Para ello,tambiénenlabase de datos DBA crearemoslatabla
SSIS_exec_LOG que constará de doscampos name (Nombre de lainstancia) y result(Resultadode la
ejecución).
name result
VAIO Success
USE [DBA]
GO
CREATE TABLE [dbo].[SSIS_exec_LOG](
[name] [varchar](200) NOT NULL,
[result][varchar](50) NULL
) ON [PRIMARY]
GO
4 –Paquete SSIS.
Esta es laparte fundamental delproyecto,yse explicaradetalladamenteelementoporelemento.
ELEMENTOS DEL PAQUETE SSIS
1 –Variables:
Crearemoslastresvariablesque vamosanecesitar
2 -Connection manager:
Para este paquete vamosanecesitardos conexionesque enmi casoson:
1 Vaio.DBA_SA:Se conectade forma directaa mi servidorde administraciónyami base de datos
DBA. Es laque utilizaremosparahacerla consultaa latabla SSIS_All_instancesypara cargar los
resultadosenel LOG.
La configuramosconel usuarioSA o con unusuarioque seaSYSAdminenlainstanciadonde hemos
creadola base de datosDBA y lastablasde configuraciónyde LOG.
2- Dynamic_Server_SA: Esta conexiónlaconfiguraremosparaque de formadinamicase vaya
conectandoa cada servidorque tengamosenlatablaSSIS_ALL_INSTANCES.
La manerade darle este dinamismoescreandounaexpresiónenlaventanade propiedadestal y
como se muestraenla imagen,seleccionarlapropiedadServerName e introducirlaexpresión
@[User::Servername]
Tambiénlaconfiguramosconel usuarioSA o con un usuarioque seaSysadminentodaslas
instancias.
3 –Tarea execute SQL (Delete_Log_Table)
Utilizamosestatareapara eliminarlosregistrosde latablade LOG antesde cada ejecución.
truncate table SSIS_exec_LOG
Esta tarea utilizarálaconexiónalabase de datosDBA,en mi caso Vaio.DBA_SA
4 –Tarea execute SQL (Select Servidor)
Esta tarea tambiénutilizarálaconexión Vaio.DBA_SAyserála encargadade recopilarlalistade
instanciasde nuestratabla.El resultadoloalmacenaremosenlavariable ServerListque definimos
anteriormente pormediolapropiedadResultSet.
El SQLStamentde latarea será el siguiente:
SELECT Instancia, SQL from SSIS_All_instances
5 – Foreach Loop Container
Este bucle recibirálalistade instanciasdel resultsetde latareaanteriory la recorreráejecutándose
una vezpor cada una de ellas.
Debemosconfigurarel apartadocollectionde lasiguiente manera.
Y Variable Mappings,enel que le asignaremosuníndice acada variable que vamosa utilizar
mapeandoel resultadode laconsulta.
Con estoya tendríamosconfiguradoel Foreach LoopContainer,peroojo,porque al tratarse de un
listadoque puede sermuyamplioyenalgúncaso puede fallarlaconexiónoejecuciónenalgunade
lasinstancias,nonos interesaque estohagafinalizarel procesocompleto.
Para evitarestodebemosmodificarlapropiedad ForceExecutionResultdentrode laspropiedades
del ForeachLoop estableciéndolaen Success.De estamanera,aunque laejecuciónfalleenalguna
de las instanciasoni siquieraseacapazde conectarse a ella,continuaráconlasiguiente.
Lo que sí nosinteresaesregistrarenlatabla de LOG el resultadode laejecuciónencadainstancia
para poderrevisarloposteriormente,loveremosal final deldocumento.
6 -Tarea (Execute SQL):
Esta tarea nosservirápara ejecutarel comandointroducidoenel campoSQLde la tabla
SSIS_All_instancessobre cada instanciaporla que pase el bucle foreachLoop.
Esta sentenciahasidoalmacenadaanteriormente enlavariable llamadaSQLporlo que editamosla
tarea y laconfiguramosde lasiguiente manera
Conection:Dynamic_Server_SA (Conexióndinámica)
SQLSourceType:Variable
SourceVariable:User::SQL
7 –LOG_Successon table
Comohemoscomentadoanteriormente nosinteresaregistrarel resultadode laejecuciónencada
instanciaenunatabla de LOG, para elloenla líneade Workflow de éxitocolocaremosunatareaque
introduciráenlatabla SSIS_exec_LOG el nombre de lainstancia(obtenidode lavariable
Servername) yel texto"Success".
En la configuraciónde latareadebmoseditarel apartado ParameterMapping de lasiguiente
manera.
Añadimosunparámetromapeadoala variable Servername,loque nosdaráel nombre de la
instanciasobre laque se ha ejecutadolainstrucciónSQL,eneste caso de formaexitosa.
El SQL SourceTypeeneste casoserá DirectImput,ya que pondremosel códigoSQLdirectamente
En el apartado SQLStatementintroducimosel siguiente código:
insertinto SSIS_exec_LOG (name,result)
values(?,'Success')
Y configuramoslatarea con laconexiónestáticaala base de datos DBA en laque se encuentrala
tablaSSIS_exec_LOG(Vaio.DBA_SA).
8 –LOG_Error on table.
En el Workflowde failure correspondientealatarea Execute SQL colocaremosestatareaque
configuraremosde maneraidénticaala anteriorconla únicadiferenciade que el códigoTSQL
registraráenla tablade LOG el texto"Error" enlugar de "Success".
insertinto SSIS_exec_LOG (name,result)
values(?, 'Error')
Con estoya tendríamoscompletadoel paquete SSIS.
Por último,haremosdeploydel proyectoyconfiguraremosunJobdentrodel SQLServerque ejecute
el paquete dtsx al que enprincipionole asignaremosningunaprogramaciónyaque estápensado
para ejecucionesAdHoc.
En el siguiente ejemplovamosamodificarel parámetro ''costthresholdforparallelism''entodaslas
instanciasque tengamosenlatablainventario.
Primerocargamostodas lasinstanciasenlatablaSSIS_All_Instancesjuntoconel códigoSQL a
ejecutar.
insertinto SSIS_All_Instances(Instancia,SQL)
selectinstancia,
'USEmaster
GO
EXEC sys.sp_configure N''costthresholdfor parallelism'',N''25''
GO
RECONFIGUREWITH OVERRIDE
GO'
from inventario
Una vez cargada nuestratablade configuraciónejecutamosel Jobque llamaal paquete dtsx que
acabamos de crear.
Puede tardarun rato dependiendodelnúmerode instanciasque tengamos.
Finalmentepodemosrevisarlatabla SSIS_exec_LOG de nuestrabase de datos DBA para ver en
cuálesse ha ejecutadocorrectamente yencualeshahabidoalgúnerror.
Comoveis,conla ayudade estasolución,simplementemodificandonuestratablade configuración
podemoshacermodificacionesde formamasivaentodonuestroentornoenunospocossegundos.

Más contenido relacionado

PDF
Replicación SQL Server 2008
 
PDF
Replicacion en SQLserver2008r2
DOCX
Replicacion de base de datos
PDF
Replica de SQL Server 2008
 
DOCX
Proyecto replicacion con sql server
PPTX
- Creación de una base de datos en MySql con Replicacion -
PDF
Manual de Duplicacion SQL Server 2008
PDF
MANUAL DE REPLICACIÓN SQL SERVER 2008
Replicación SQL Server 2008
 
Replicacion en SQLserver2008r2
Replicacion de base de datos
Replica de SQL Server 2008
 
Proyecto replicacion con sql server
- Creación de una base de datos en MySql con Replicacion -
Manual de Duplicacion SQL Server 2008
MANUAL DE REPLICACIÓN SQL SERVER 2008

La actualidad más candente (20)

PPT
Curso sql server 2012 clase 2
DOCX
la mejor forma de Conectar c# con mysql con archivos de configuracion
PDF
Cliente servidor
PDF
Guía rápida de MySQL Server 5.5 y Workbench 5.2
PDF
Crear conexion a servidor en MySQL Workbench
PDF
Replicacion de base de datos
PPTX
Base de Datos Grupo Los Informaticos
DOC
Manual de conexión de base de datos distribuida
DOCX
Replicación con sql server
PDF
Manual de instalacion de mysql Server mysql-workbench-xamp server
PDF
bdlink vistas materializadas
PDF
Instalacion de MySQL Workbench
PPTX
Instalación y configuración de sgbd presentacion
PPTX
Tutorial de como configurar y instalar Cassandra
PPTX
Replicación de Bases de Datos con SQL Server 2008
PPTX
Oracle enterprise manager
PPTX
Transac sq ll
PDF
Pasos para Instalar MySQL server
PDF
Guia de my sql workbench 5 2
PPTX
JDBC (Java Database Connectivity)
Curso sql server 2012 clase 2
la mejor forma de Conectar c# con mysql con archivos de configuracion
Cliente servidor
Guía rápida de MySQL Server 5.5 y Workbench 5.2
Crear conexion a servidor en MySQL Workbench
Replicacion de base de datos
Base de Datos Grupo Los Informaticos
Manual de conexión de base de datos distribuida
Replicación con sql server
Manual de instalacion de mysql Server mysql-workbench-xamp server
bdlink vistas materializadas
Instalacion de MySQL Workbench
Instalación y configuración de sgbd presentacion
Tutorial de como configurar y instalar Cassandra
Replicación de Bases de Datos con SQL Server 2008
Oracle enterprise manager
Transac sq ll
Pasos para Instalar MySQL server
Guia de my sql workbench 5 2
JDBC (Java Database Connectivity)
Publicidad

Similar a Paquete SSIS para administración SQL centralizada (20)

PPTX
Java con base de datos
PPTX
Ms SQL Server
DOCX
Html,php
DOCX
Proyecto final
DOCX
Proyecto final
PPTX
Análisis y diseño ii sql php
PPTX
Java con base de datos
DOCX
Ambiente sql server 2008
DOCX
Ambiente sql server 2008
DOCX
Ambiente sql server 2008
PPTX
P2C1 - Configuración del Entorno
DOCX
Notas clase java ii
PPTX
Microsoft sql-server-2012
PPTX
Microsoft sql server 2012
PDF
Tutorial mysql
PDF
Tutorial mysql
PDF
Tutorial mysql
PDF
DOCX
PPT
Bases distribuidas en mysql
Java con base de datos
Ms SQL Server
Html,php
Proyecto final
Proyecto final
Análisis y diseño ii sql php
Java con base de datos
Ambiente sql server 2008
Ambiente sql server 2008
Ambiente sql server 2008
P2C1 - Configuración del Entorno
Notas clase java ii
Microsoft sql-server-2012
Microsoft sql server 2012
Tutorial mysql
Tutorial mysql
Tutorial mysql
Bases distribuidas en mysql
Publicidad

Último (20)

PDF
Principios d. Anatomía y no se que más poner jaja
PPTX
Diapos.pptxcscscscscscscscscscscscscscscsc
PDF
S07 - Morfología urbana..........................
PPTX
DICTÁMENES MÉDICO-PSIQUIÁTRICOS Y PSICOLÓGICOS FORENSES 6.pptx
PPTX
Epidemiologia de campo vrs epidemiologia social.pptx
PDF
Administracion y contabilidad publica 1era clase
PPTX
CRITERIOS DE UN SERVICIO DE INTENSIVO presen.pptx
PPTX
GOOGLE SHEETS IMPORTANCIA Y CARACTERISITICAS
PPT
RESOLUCION ALTERNATIVA DE CONFLICTOS 3 CONT.ppt
PPTX
Sistema Cardiovascular, funciones, partes
PPTX
INDUCCION Y ORIENTACION DE LA EMPRESA VALE
PPTX
Precio optimo de venta para un emprendimiento familiar
PPTX
La gestión en los servicios de salud.pptx 1.pptx
PDF
Mapa mental de cultura social Historia Economica
PDF
Unidad Nº 1 Introduccion a Estadísticas
PPTX
EPCE_EXCEL 365 CURSO DE ENTRENAMIENTO.pptx
DOCX
Estratégias de Ventas para WhatsApp paso a paso
PDF
PRESENTACION DE LA ASIGNATURA materiales no convencionales.pdf
PDF
MOVIMIENTO DE TIERRA Y ASFALTO.pdf 2025A
PPTX
Grupo 008_Equipo 3_Evidencia 4_ATDI.pptx
Principios d. Anatomía y no se que más poner jaja
Diapos.pptxcscscscscscscscscscscscscscscsc
S07 - Morfología urbana..........................
DICTÁMENES MÉDICO-PSIQUIÁTRICOS Y PSICOLÓGICOS FORENSES 6.pptx
Epidemiologia de campo vrs epidemiologia social.pptx
Administracion y contabilidad publica 1era clase
CRITERIOS DE UN SERVICIO DE INTENSIVO presen.pptx
GOOGLE SHEETS IMPORTANCIA Y CARACTERISITICAS
RESOLUCION ALTERNATIVA DE CONFLICTOS 3 CONT.ppt
Sistema Cardiovascular, funciones, partes
INDUCCION Y ORIENTACION DE LA EMPRESA VALE
Precio optimo de venta para un emprendimiento familiar
La gestión en los servicios de salud.pptx 1.pptx
Mapa mental de cultura social Historia Economica
Unidad Nº 1 Introduccion a Estadísticas
EPCE_EXCEL 365 CURSO DE ENTRENAMIENTO.pptx
Estratégias de Ventas para WhatsApp paso a paso
PRESENTACION DE LA ASIGNATURA materiales no convencionales.pdf
MOVIMIENTO DE TIERRA Y ASFALTO.pdf 2025A
Grupo 008_Equipo 3_Evidencia 4_ATDI.pptx

Paquete SSIS para administración SQL centralizada

  • 1. SoluciónSSIS para ejecucionescentralizadasengrandesentornos SQL SERVER. En lostiemposque correnesbastante comúnque un DBA que trabaje enuna gran compañía administre decenas,cientosoinclusomilesde instanciasSQLSERVER,porlo que una tarea tan sencillacomocambiarunparámetrode configuracióndel servidor,instalarunnuevoplande mantenimientoomodificarlaprogramaciónde backupentodas ellaspuede resultarunatareade lo más tediosa. Para podercontrolary automatizarenla medida de loposible este tipode operacionesyoptimizar nuestrovaliosotiempose hadiseñadoestasolución. A grandesrasgosel objetivoestenerunlistadode servidoresenunatablaconun campo enel que cargaremosel códigoTSQL que deseamosejecutarsobre cadainstancia. Instancia SQL VAIO select@@version Después,conlaayuda de SQL SERVER DATA TOOLS (SSTD) crearemosunpaquete de intrgration servicesconunaconexióndinámicaque recorrerádichatablayejecutaráel códigoTSQL encada una de las instancias. De estamanera,algocomo crear un LOGIN,un LINKEDSERVER, o modificarel valordel Remote QueryTimeoutentodasnuestrasinstanciaspodrállevarnosunospocosminutos. Elementosnecesarios: 1 -Base de datos de herramientas: Para contenerlastablasde configuraciónyde LOG que vamosa utilizarcrearemosunabase de herramientasllamadaDBA,personalmentesiempre me gustatenerestabase de datosenlas instanciasque administroparaalbergarmistablas,reportesyprocedimientosalmacenadosde administración. 2 –Tabla de instancias: En la base de datos DBA crearemosunatablallamada SSIS_All_instancesque constaráde 2 campos, Instancia (Nombre exactode cadainstanciaque queramosincluir) y SQL(CódigoTSQL a ejecutar). USE DBA GO CREATE TABLE [dbo].[SSIS_All_instances]( [Instancia] [varchar](200) NOT NULL, [SQL] [varchar](MAX) NULL ) ON [PRIMARY] GO 3 –Tabla de LOG. Al tenerque establecerconexionesconmuchosservidores,nonosinteresaque unfallode conexión o de ejecuciónsobre unode ellosfinaliceel trabajo,perosíteneruncontrol de encualesse ha ejecutadoyencuálesno.Para ello,tambiénenlabase de datos DBA crearemoslatabla SSIS_exec_LOG que constará de doscampos name (Nombre de lainstancia) y result(Resultadode la ejecución).
  • 2. name result VAIO Success USE [DBA] GO CREATE TABLE [dbo].[SSIS_exec_LOG]( [name] [varchar](200) NOT NULL, [result][varchar](50) NULL ) ON [PRIMARY] GO 4 –Paquete SSIS. Esta es laparte fundamental delproyecto,yse explicaradetalladamenteelementoporelemento. ELEMENTOS DEL PAQUETE SSIS 1 –Variables: Crearemoslastresvariablesque vamosanecesitar
  • 3. 2 -Connection manager: Para este paquete vamosanecesitardos conexionesque enmi casoson: 1 Vaio.DBA_SA:Se conectade forma directaa mi servidorde administraciónyami base de datos DBA. Es laque utilizaremosparahacerla consultaa latabla SSIS_All_instancesypara cargar los resultadosenel LOG. La configuramosconel usuarioSA o con unusuarioque seaSYSAdminenlainstanciadonde hemos creadola base de datosDBA y lastablasde configuraciónyde LOG. 2- Dynamic_Server_SA: Esta conexiónlaconfiguraremosparaque de formadinamicase vaya conectandoa cada servidorque tengamosenlatablaSSIS_ALL_INSTANCES.
  • 4. La manerade darle este dinamismoescreandounaexpresiónenlaventanade propiedadestal y como se muestraenla imagen,seleccionarlapropiedadServerName e introducirlaexpresión @[User::Servername] Tambiénlaconfiguramosconel usuarioSA o con un usuarioque seaSysadminentodaslas instancias. 3 –Tarea execute SQL (Delete_Log_Table) Utilizamosestatareapara eliminarlosregistrosde latablade LOG antesde cada ejecución. truncate table SSIS_exec_LOG Esta tarea utilizarálaconexiónalabase de datosDBA,en mi caso Vaio.DBA_SA 4 –Tarea execute SQL (Select Servidor) Esta tarea tambiénutilizarálaconexión Vaio.DBA_SAyserála encargadade recopilarlalistade instanciasde nuestratabla.El resultadoloalmacenaremosenlavariable ServerListque definimos anteriormente pormediolapropiedadResultSet.
  • 5. El SQLStamentde latarea será el siguiente: SELECT Instancia, SQL from SSIS_All_instances 5 – Foreach Loop Container Este bucle recibirálalistade instanciasdel resultsetde latareaanteriory la recorreráejecutándose una vezpor cada una de ellas. Debemosconfigurarel apartadocollectionde lasiguiente manera.
  • 6. Y Variable Mappings,enel que le asignaremosuníndice acada variable que vamosa utilizar mapeandoel resultadode laconsulta.
  • 7. Con estoya tendríamosconfiguradoel Foreach LoopContainer,peroojo,porque al tratarse de un listadoque puede sermuyamplioyenalgúncaso puede fallarlaconexiónoejecuciónenalgunade lasinstancias,nonos interesaque estohagafinalizarel procesocompleto. Para evitarestodebemosmodificarlapropiedad ForceExecutionResultdentrode laspropiedades del ForeachLoop estableciéndolaen Success.De estamanera,aunque laejecuciónfalleenalguna de las instanciasoni siquieraseacapazde conectarse a ella,continuaráconlasiguiente.
  • 8. Lo que sí nosinteresaesregistrarenlatabla de LOG el resultadode laejecuciónencadainstancia para poderrevisarloposteriormente,loveremosal final deldocumento. 6 -Tarea (Execute SQL): Esta tarea nosservirápara ejecutarel comandointroducidoenel campoSQLde la tabla SSIS_All_instancessobre cada instanciaporla que pase el bucle foreachLoop. Esta sentenciahasidoalmacenadaanteriormente enlavariable llamadaSQLporlo que editamosla tarea y laconfiguramosde lasiguiente manera Conection:Dynamic_Server_SA (Conexióndinámica) SQLSourceType:Variable SourceVariable:User::SQL
  • 9. 7 –LOG_Successon table Comohemoscomentadoanteriormente nosinteresaregistrarel resultadode laejecuciónencada instanciaenunatabla de LOG, para elloenla líneade Workflow de éxitocolocaremosunatareaque introduciráenlatabla SSIS_exec_LOG el nombre de lainstancia(obtenidode lavariable Servername) yel texto"Success". En la configuraciónde latareadebmoseditarel apartado ParameterMapping de lasiguiente manera.
  • 10. Añadimosunparámetromapeadoala variable Servername,loque nosdaráel nombre de la instanciasobre laque se ha ejecutadolainstrucciónSQL,eneste caso de formaexitosa. El SQL SourceTypeeneste casoserá DirectImput,ya que pondremosel códigoSQLdirectamente En el apartado SQLStatementintroducimosel siguiente código: insertinto SSIS_exec_LOG (name,result) values(?,'Success') Y configuramoslatarea con laconexiónestáticaala base de datos DBA en laque se encuentrala tablaSSIS_exec_LOG(Vaio.DBA_SA). 8 –LOG_Error on table. En el Workflowde failure correspondientealatarea Execute SQL colocaremosestatareaque configuraremosde maneraidénticaala anteriorconla únicadiferenciade que el códigoTSQL registraráenla tablade LOG el texto"Error" enlugar de "Success". insertinto SSIS_exec_LOG (name,result) values(?, 'Error')
  • 11. Con estoya tendríamoscompletadoel paquete SSIS. Por último,haremosdeploydel proyectoyconfiguraremosunJobdentrodel SQLServerque ejecute el paquete dtsx al que enprincipionole asignaremosningunaprogramaciónyaque estápensado para ejecucionesAdHoc. En el siguiente ejemplovamosamodificarel parámetro ''costthresholdforparallelism''entodaslas instanciasque tengamosenlatablainventario. Primerocargamostodas lasinstanciasenlatablaSSIS_All_Instancesjuntoconel códigoSQL a ejecutar. insertinto SSIS_All_Instances(Instancia,SQL) selectinstancia, 'USEmaster GO EXEC sys.sp_configure N''costthresholdfor parallelism'',N''25'' GO RECONFIGUREWITH OVERRIDE GO' from inventario Una vez cargada nuestratablade configuraciónejecutamosel Jobque llamaal paquete dtsx que acabamos de crear. Puede tardarun rato dependiendodelnúmerode instanciasque tengamos. Finalmentepodemosrevisarlatabla SSIS_exec_LOG de nuestrabase de datos DBA para ver en cuálesse ha ejecutadocorrectamente yencualeshahabidoalgúnerror. Comoveis,conla ayudade estasolución,simplementemodificandonuestratablade configuración podemoshacermodificacionesde formamasivaentodonuestroentornoenunospocossegundos.