Tranzakció kezelés SSIS csomagokban
Adott egy egyszerű adattárház betöltési folyamat, melynek során
- Töröljük a Céltábla tartalmát,
- 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.
Tranzakció kezelés Sequence Container-rel
Sequence Container tranzakcióssá tételének megvalósítása:
- Sequence Container TransactionOption tulajdonságát át kell állítani Required-re
- 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
Tranzakció kezelés TSQL módszerekkel
(RetainSameConnection = True)
Felhasznált irodalom:
- Jamie Thomson: RetainSameConnection property of the OLE DB Connection Manager
- SQL Server 2005 Books Online: How to Configure a Package to Use Multiple Transactions
Kővári Attila - BI projekt

BI projekt: BI & DWH Tervezés, tanfolyam, tanácsadás - 


Új hozzászólás