Tranzakció kezelés SSIS csomagokban


Adott egy egyszerű adattárház betöltési folyamat, melynek során

  1. Töröljük a Céltábla tartalmát,
  2. majd a Céltáblába másoljuk a Forrástábla adatait

Ha a betöltés a törlés után lehal, akkor lesz egy üres céltáblánk. Az üres táblánál még a régi adatokkal töltött tábla is jobb.

Ahhoz, hogy egy esetleges hiba esetén vissza tudjuk állítani az eredeti állapotot (ROLLBACK), betöltő csomagjainkat tranzakcióssá kell tennünk.

A teljes betöltés (SSIS Package) tranzakcióssá tétele.

A legegyszerűbben úgy tehetünk egy SSIS csomagot tranzakcióssá, hogy TransactionOption tulajdonságát átállítjuk Required-re.

Ha az adattárház töltő SSIS package futása valamilyen hiba miatt leáll, akkor az SSIS a package az összes eddig végrehajtott folyamatot visszagörgeti (ROLLBACK). Ebbe sajnos bele fognak tartozni azok a feladatok is, amelyeket nem akarunk visszagörgetni. Ilyen például a naplózás. Ha az SSIS beépített naplózási funkcióit kiegészítjük saját naplózási funkciókkal (pl.: mikor indult, mikor fejeződött be egy package futása, hány rekordot töltött be, .), akkor az SSIS a naplóbejegyzést is visszagörgeti, azaz az ETL naplónkból hiányozni fog, hogy a package elindult.

Sequence Container tranzakcióssá tétele

A teljes package tranzakcióssá tétele helyett finomabb megoldást kapunk, ha csak egy Sequence Container -t teszünk tranzakcióssá.

A Sequence Container-re lehetőséget biztosít arra, hogy a logikailag összetartozó feladatokat (task-okat) egy egységként kezeljük. Azaz például esetünkben a Sequence Container-be fűzött task-okat egy tranzakción belül hajtsuk végre. Egy esetleges hiba esetén csak a Sequence Container-ben tárolt task-ok folyamatai visszagördülnek, (ROLLBACK) a konténeren kívül elhelyezkedők, (pl. naplóírás) már nem.

SSIS csomagok tranzakció kezelése: Sequence Container tranzakcióssá tétele

Tranzakció kezelés Sequence Container-rel

Sequence Container tranzakcióssá tételének megvalósítása:

  1. Sequence Container TransactionOption tulajdonságát át kell állítani Required-re
  2. A Package TransactionOption tulajdonságát át kell állítani Supported-re

BEGIN TRANSACTION; COMMIT TRANSACTION

Alapértelmezettként minden egyes SSIS task külön connection-t nyit magának, minek következtében a TSQL-es tranzakció kezelés (BEGIN TRAN; COMMIT TRAN) csak task-on (Connection-ön) belül használható.

Az SSIS, illetve Connection manager-ek ezen alapértelmezett viselkedését megváltoztathatjuk, ha a package-ben használt Connection manager-ek RetainSameConnection tulajdonságát átírjuk TRUE-re. Ennek hatására minden task ugyanabban a connection-ben fog futni lehetővé téve, hogy legyen egy BEGIN TRANSACTION Execute SQL task-unk, sok-sok adattranszformációs task-unk, és a folyamat végén egy COMMIT TRANSACTION SQL task-unk

SSIS csomagok tranzakció kezelése: Begin Tran; Commit tran

Tranzakció kezelés TSQL módszerekkel
(RetainSameConnection = True)

Felhasznált irodalom:

Elválasztó

Már készül a következő cikk. Kérjen értesítést a megjelenéséről itt.

|