Hogyan kapcsoljon ki egy SSIS task-ot?

Az adattárház fejlesztések során gyakran szerettem volna úgy futtatni az adattárház betöltőket (SSIS vagy DTS csomagokat), hogy azoknak egy vagy néhány taszkja ne fusson le.

Gondoljon egy olyan adattárház betöltőre, amely futás előtt eldönti, hogy kell-e futnia vagy sem. Ez éles környezetben igen hasznos, hiszen egy újratöltésnél csak azok a betöltők fognak futni, amelyek az előző betöltés során hibásan futottak. (így a sikeresen lefutott betöltők el sem indulnak, a már betöltött adatokat nem bántják). A fejlesztés során azonban jó lenne, ha nem konfigurálgatná magát, hanem az általunk megadott paraméterek (pl.: dátumok) alapján futna.

Vagy képzeljen el egy olyan SSIS csomagot, amely sok-sok másik adattárház betöltő csomagot hív meg. (például dimenziókat, ténytáblákat töltő SSIS csomagokat hívó, ún. master SSIS csomagok). Fejlesztés során a master csomagot hívjuk meg, de nem akarjuk, hogy a már kitesztelt betöltők fussanak. Jó lenne ilyenkor egy lehetőség arra, hogy kijelölhessük azokat a betöltő csomagokat, amelyeket már nem akarunk futtatni. Szerencsére minden SSIS task-nak van egy Disable nevű tulajdonsága, amelyet igazra állítva (disable=true) elérhetjük, hogy az adott task ne fusson.

Az alábbi ábrán kikapcsoltam az első és az utolsó taskok futását (szürke dobozok), hogy a package ne írjon a naplóba (Nálam az első és az utolsó taskok konfigurálnak és naplóznak)

SSIS Task-ok futásának kikapcsolása (Disable=true)

SSIS Task-ok futásának kikapcsolása (Disable=true)

A kikapcsolt SSIS task (Disable=true) futás közben nem hajtja végre a benne definiált utasítást és nem ír az Integration Services beépített naplójába sem (sysdtslog90 tábla)

Ha egy olyan SSIS task-ot kapcsolunk ki, amely a package elején vagy végén helyezkedik el, akkor a kikapcsolt task úgy fog futás közben viselkedni, mintha nem lenne része az SSIS csomagnak.

Más a helyzet, ha egy olyan task-ot akarunk kikapcsolni, amely a betöltési folyamat (workflow) közepén helyezkedik el. Ebben az esetben a kikapcsolt task úgy viselkedik, mintha sikeresen futott volna, így az utána következő task csak akkor fog lefutni, ha a két task között definiált precedencia típusa sikeres, vagy befejezett futást feltételez. (Success or Copletion precedence constraint, azaz zöld és kék nyilak)

De menjünk tovább: Tételezzük fel, hogy van egy SSIS csomagom, ami betöltés után menti az adattárház adatbázisait, fájljait. Hogyan tudom megmondani, hogy ne fusson a Backup SSIS csomag? A válasz egyszerű: Magának az SSIS csomagnak is van Disable tulajdonsága, amely ha true-ra van állítva, az SSIS package egyik taskja sem fog lefutni. (Maga a package elindul, de egyik taskja sem hajtódik végre. Az alábbi ábrán ezt jelképezi a szürke háttér)

Az SSIS package összes task-jának kikapcsolása. (Disable = true)

Az SSIS package összes task-jának kikapcsolása. (Disable = true)

Összefoglalva: Az SSIS csomagok, taskok futásának kikapcsolása egy egyszerű szolgáltatás, ami megkönnyíti a fejlesztési munkát, és ami nagyon hiányzott a régi DTS-ekből. Már csak azt kéne megoldani, hogy parancssorból is futtathassunk SSIS task-okat. Talán majd a Katmai-ban... (A Katmai az SQL Server újabb verziójának kódneve)

Kővári Attila - BI projekt

Új hozzászólás