Ujednolicony SSIS

https://xpil.eu/Q6kTo

Na horyzoncie ju偶 SQL Server 2016, a ja dopiero si臋 oswajam z wersj膮 2012. No nic. Lepiej tak, ni偶 wcale.

SSIS, technologia Microsoftu o chyba o najcz臋艣ciej zmienianej nazwie, r贸wnie偶 ewoluuje. Dzi艣 napisz臋 odrobin臋 o tym, jak Microsoft ujednolici艂 konfigurowanie paczek SSIS w wersji 2012.

Ma艂e wyja艣nienie: wed艂ug polskiej nomenklatury, w przypadku SSIS m贸wi si臋 o pakietach, a nie o paczkach. Ale ja si臋 jako艣 przyzwyczai艂em do u偶ywania w tym kontek艣cie s艂owa "paczka" i b臋d臋 pisa艂 "paczka". Je偶eli si臋 to komu艣 nie podoba - trudno...

Ot贸偶 przenie艣li paczki SSIS do osobnej bazy danych. Dotychczas pakiety by艂y przechowywane b膮d藕 w plikach dtsx, b膮d藕 te偶 w systemowej bazie msdb, w tabeli sysssispackages. Tymczasem od wersji 2012 pojawi艂a si臋 osobna, opcjonalna baza o nazwie SSISDB, oferuj膮ca o wiele bardziej rozbudowany i funkcjonalny model przechowywania projekt贸w SSIS.

Tak, ca艂ych projekt贸w!

Mo偶na w tej bazie tworzy膰 wirtualne foldery, kt贸re pomog膮 nam uporz膮dkowa膰 nasze projekty SSIS. W ramach ka偶dego takiego folderu s膮 sobie projekty, a ka偶dy projekt zawiera rozmaite obiekty - g艂贸wnie paczki ("packages") SSIS, ale nie tylko.

No i teraz najfajniejsze: je偶eli skonfigurujemy sobie w projekcie kilka 艣rodowisk docelowych, mo偶emy ustawi膰 bardzo szczeg贸艂owe parametry dla ka偶dego 艣rodowiska. Najprostszy przyk艂ad: definiujemy sobie 艣rodowiska DEV, TEST i PROD i dla ka偶dego z nich ustalamy sobie inne parametry po艂膮cze艅 do baz danych. Albo do folder贸w z plikami 藕r贸d艂owymi (albo docelowymi). Albo loginy i has艂a. I tak dalej, i tak dalej.

Kolejne udogodnienie to mo偶liwo艣膰 definiowania niekt贸rych obiekt贸w i parametr贸w na poziomie projektu - na przyk艂ad mo偶emy mie膰 JEDNO po艂膮czenie do bazy (obiekt typu Connection) w projekcie i u偶ywa膰 tego jednego po艂膮czenia w ka偶dej paczce. Dzi臋ki temu je偶eli zmieni si臋 jaki艣 parametr po艂膮czenia (na przyk艂ad has艂o albo adres serwera itd), wystarczy zmieni膰 to w JEDNYM miejscu, a nie w ilu艣-tam.

Jak ju偶 zbudujemy wszystkie potrzebne do projektu paczki, klikamy prawym myszem w drzewku projektu na jego nazw臋, wybieramy Deploy, wskazujemy docelowy serwer i folder wirtualny - i ca艂y nasz projekt (w moim przypadku najwi臋kszy taki projekt mia艂 co艣 ponad sze艣膰set paczek SSIS) l膮duje w bazie SSISDB na serwerze docelowym, skonfigurowany konkretnie pod zadane 艣rodowisko (dev, test, prod czy cokolwiek innego).

Baz臋 SSISDB mo偶emy przechowywa膰 na jednym serwerze (i tam, w osobnych wirtualnych folderach, trzyma膰 projekty dla poszczeg贸lnych 艣rodowisk), albo mo偶emy mie膰 osobn膮 instancj臋 bazy SSISDB na ka偶dym z serwer贸w dev, test itd. - w t臋 czy we w t臋, zawsze mamy konkretnie zdefiniowane projekty w konkretnie zdefiniowanych lokalizacjach, sparametryzowane pod k膮tem 艣rodowisk, w kt贸rych b臋d膮 one dzia艂a膰.. Bardzo wygodne. I bardzo logicznie uporz膮dkowane.

Pozostaje jeszcze pytanie: w jaki spos贸b uruchamia膰 paczki przechowywane w bazie SSISDB?

Tu sprawa si臋 nieco komplikuje, albo - w zale偶no艣ci od punktu widzenia - upraszcza.

Oczywi艣cie mo偶na si臋 doklika膰 do paczki bezpo艣rednio z poziomu SSMS, d藕gn膮膰 j膮 prawym myszem i wybra膰 "Execute". Ale co, je偶eli chcemy uruchomienie paczki zautomatyzowa膰?

Poprzednio mieli艣my do dyspozycji zewn臋trzn膮 utilk臋 dtexec.exe, za pomoc膮 kt贸rej uruchamia艂o si臋 paczki SSIS (zar贸wno te z plik贸w jak te偶 te z bazy msdb). Natomiast w przypadku projekt贸w SSIS sk艂adowanych w bazie SSISDB mo偶emy "zapuszcza膰" paczki za pomoc膮 "czystego" SQL-a. Nie musimy opuszcza膰 艣rodowiska SQL, 偶eby uruchomi膰 paczk臋, a przedtem mo偶emy j膮 dodatkowo sparametryzowa膰, skonfigurowa膰 i tak dalej.

Aby uruchomi膰 paczk臋 SSIS z bazy SSISDB, musimy najpierw utworzy膰 kontekst uruchomieniowy:

Declare @execution_id bigint
EXEC SSISDB.catalog.create_execution @package_name=N'NazwaPaczki.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'NazwaFolderuZProjektem', @project_name=N'NazwaProjektuSSIS', @use32bitruntime=False, @reference_id=Null

Powy偶szy kod utworzy nowy kontekst uruchomieniowy, przypisze mu unikaln膮 warto艣膰 numeryczn膮 i zwr贸ci j膮 do zmiennej wyj艣ciowej @execution_id. Nast臋pnie mo偶emy opcjonalnie skonfigurowa膰 dodatkowe parametry (za pomoc膮 procedury set_execution_parameter_value - prosz臋 sobie pogugla膰 po szczeg贸艂y), wreszcie samo uruchomienie paczki realizuje si臋 za pomoc膮 procedury start_execution, o tak:

EXEC SSISDB.catalog.start_execution @execution_id

Paczka zaczyna dzia艂a膰, zapisuj膮c szczeg贸艂owy log z wykonania do osobnych tabel w bazie SSISDB (mo偶na sobie w ten spos贸b monitorowa膰 wykonywanie paczki bez konieczno艣ci opuszczania 艣rodowiska SQL).

Jak wida膰, zmiany w por贸wnaniu do poprzedniej wersji (tj. 2008 R2) s膮 do艣膰 znaczne, ale zdecydowanie idzie ku lepszemu.

Moje ulubione ulepszenia to:

  1. Obiekty na poziomie projektu
  2. Parametryzacja paczek per 艣rodowisko (to akurat nie jest nowo艣ci膮, ale nigdy przedtem tego nie u偶ywa艂em, wi臋c DLA MNIE to nowo艣膰:) )
  3. Baza SSISDB i "ekosystem" procedur i tabel, pozwalaj膮cy 艂atwo parametryzowa膰, uruchamia膰 i monitorowa膰 poszczeg贸lne procesy.

Ot, co.

https://xpil.eu/Q6kTo

Leave a Comment

Komentarze mile widziane.

Je偶eli chcesz do komentarza wstawi膰 kod, u偶yj sk艂adni:
[code]
tutaj wstaw sw贸j kod
[/code]

Je偶eli zrobisz liter贸wk臋 lub zmienisz zdanie, mo偶esz edytowa膰 komentarz po jego zatwierdzeniu.