torsdag 29 mars 2018

Hämta information från flera servrar med SSIS

Tänkte dela med mig om ett bra användningsområde som man som DBA kan nytta av när det gäller SSIS. Allt som oftast vill vi hämta information från våra servrar. Har vi inget system för detta så få vi användar det som finns att tillgå i SQL. Antingen Centralmanagement Server eller SSIS ser jag som det som fungera bäst. I detta fallet så kommer jag visa hur man använder SSIS och en sk Foreach Loop för att hämta det datat vi vill har. Själva listan på alla servrar får jag med en query mot en Centralmanagement Server.

Tanken är att Connection Managern som skall koppla upp sig mot respektive server för informations inhämtningen skall vara dynamisk. I detta fall behöver Server Name samt Initial Catalog vara dynamiska.

Låt oss starta med att lägga till en Execute SQL Task i paketet. Samt de nödvändiga variablerna. Det är viktigt att dessa variabler är av rätt datatyp.













Execute SQL Task konfigureras enligt följande med en Connection Manager som pekar på listan med servrar.


































Variabeln för att spara datat från queryn med serverlistan sätts under ResultSet. Detta är allt som behöver göras på Execute SQL Task.


































Nästa steg är att lägga till en Foreach Loop kontainer. Denna konfigureras enligt följande. Tanken är att den använder datat som vi hämtar i Execute SQL Task. I Foreach Loop kontainern lägger vi också till en Data Flow Task.





















För att använda oss av serverlistan vi generera från Execute SQL Task skall Enumeration vara en Foreach ADO Enumerator. Mappa sedan variabeln objServerList vi skapat tidigare enligt nedan.


































Under Variable Mappings mappar vi de andra variablerna också. Det vi behöver för att använda en dynamisk connection manager är ServerName och DBName.



































I Data Flow Task konfigurera vi sedan en vanlig OLEDB Source och en OLEDB Destination och knyter dessa till varsin Connection Manager.


















Om vi nu markera vår "source" Connection Manager, i mitt fall SourceQuery så väljer vi att göra den dynamisk. Under properties skall det se ut så här. Knyt variablerna till ServerName och InitialCatalog i Expression Editorn genom att klicka på den lilla fyrkanten i höger överkant.














Gå sedan in på respektive property och knyt variabeln till den.




























































Nu är hela lösningen klar och redo att användas.