A tranzakció-kezelő

Van néhány fontos szempont, amit az adatbázis-kezelőnek garantálnia kell azok számára, akik az adatbázison műveleteket hajtanak végre. Egy művelet hatása akkor sem tűnhet el, ha valamilyen komoly rendszerhiba következne be. Az adatbázis-kezelők többnyire megengedik a felhasználóknak, hogy egy vagy több lekérdezést vagy módosítást egy tranzakcióba csoportosítsanak. A tranzakció tulajdonképpen olyan műveletek egy csoportja, amelyeket egymás után egy egységként kell végrehajtani.

Az adatbázisrendszerek gyakran sok tranzakció egyidejű végrehajtását engedik meg. Például egy bank bankjegykiadó automatáinál egyszerre különböző dolgok történhetnek. Annak biztosítása, hogy mindezek a tranzakciók helyesen fussanak le, a tranzakció-kezelő feladata. Hogy pontosan mit is értünk a tranzakciók "helyes" lefutásán, azt a következő négy alapvető elvárás megfogalmazásával részletezzük.

Atomosság Megköveteljük, hogy a tranzakció vagy teljes egészében hajtódjon végre, vagy semmi ne hajtódjon végre belőle. Például az automatából történő pénzfelvétel és a hozzá kapcsolódó megterhelés az ügyfél számláján egyetlen atomi tranzakciót kell, hogy alkosson. Nem megengedhető, hogy a pénzkiadás megtörténjen, de a megterhelés ne legyen regisztrálva, vagy fordítva, hogy a megterhelés megtörténjen, de a pénzt az automata ne adja ki.
Következetesség Egy adatbázisban általában beszélhetünk a "következetes állapotok" fogalmáról, amelyekben az adatok megfelelnek bizonyos elvárásoknak. Például egy repülőgép-helyfoglalási adatbázisban egy megfelelő következetességi feltétel lehet az, hogy egyetlen ülőhelyet se rendeljünk hozzá két különböző utashoz. Noha ezt a feltételt megsérthetjük egy rövid időre egy tranzakció alatt (pl. amíg az utasokat áthelyezzük az ülőhelyek között), a tranzakció-kezelőnek kell biztosítania, hogy a tranzakciók befejeződése után az adatbázis ismét következetes állapotba kerüljön, vagyis elégítse ki az összes következetességi feltételt.
Elkülönítés Amikor két vagy több tranzakció egyidejűleg fut, azok kihatását el kell különíteni egymástól. Ez azt jelenti, hogy semmiféle olyan eredményt vagy kihatást nem tapasztalhatunk az adatbázisban, amit a két tranzakció egyidejű futása okozott, és ami nem fordult volna elő, ha a két tranzakció egymás után fut le. Ha például két ügynök éppen ugyanarra a járatra ad el jegyet és a járaton már csak egy hely van, akkor az egyik kérést teljesíteni kell, és a másikat vissza kell utasítani. Sem az nem elfogadható, hogy a jegyet kétszer adjuk el, sem az, hogy egyszer sem, az egyidejű műveletek miatt.
Tartósság Ha egy tranzakció befejezte a munkáját, akkor annak eredménye nem veszhet el rendszerhiba esetén sem, még akkor sem, ha a rendszer közvetlenül a tranzakció befejezése után hibásodik meg.

Röviden vázoljuk azokat a technikákat, amelyek a fenti négy elvárás érvényre juttatásában segítenek.

Zárolás

Ha a tranzakciók kihatása nem különül el egymástól annak az alapvető oka az, hogy két vagy több tranzakció írja vagy olvassa ugyanazt az adattételt. Ha például két tranzakció próbálja meg egyidejűleg módosítani ugyanannak a számlának az egyenlegét, akkor az egyik felül fogja írni a másikat és így az első írás eredménye el fog veszni. Ezért a legtöbb adatbázis-kezelőben a tranzakció-kezelő zárolhatja a tranzakció által elérni kívánt adattételt. Amíg egy tranzakció zárolva tart egy tételt, addig a többi tranzakció nem érheti el azt.

A zárolások finomsága

A különböző adatbázis-kezelők eltérnek abban, hogy milyen fajta adattételek zárolását teszik lehetővé. Van amelyik sorok, van amelyik lemezblokkok, és van amelyik teljes relációk zárolását megengedi. Minél nagyobb a zárolt objektum, annál nagyobb az esélye annak, hogy egy tranzakciónak egy másikra kell várnia, még akkor is, ha a két tranzakció ténylegesen nem ugyanazt az adatelemet szeretné elérni. Viszont minél kisebb a zárolható adattétel, annál terjedelmesebb és bonyolultabb a zárolást kezelő mechanizmus.

Naplózás

A tranzakció-kezelő az összes megkezdett tranzakciót, a tranzakciók által az adatbázisban végzett módosításokat, és a tranzakciók végét feljegyzi egy naplóba. A napló mindig olyan tárolóeszközre íródik, ami nem érzékeny az esetleges áramkimaradásra. Ilyenek például a lemezek. Ezért noha a tranzakció a munkájának egy részéhez a sokkal érzékenyebb memóriát használja, a napló minden esetben azonnal lemezre íródik. Az összes művelet naplózása fontos szerepet játszik a tartósság biztosításában.

Tranzakciók érvényesítése

A tartósság és az atomosság érdekében a tranzakciók egyfajta "puhatolózás" jelleggel kerülnek végrehajtásra, ami azt jelenti, hogy az adatbázisbeli módosítások kiszámításra kerülnek, de ténylegesen az adatbázisban még nem történnek meg. Amikor a tranzakció készen áll a befejezésre, arra, hogy érvényesítse az elvégzett munkát, a módosítások a naplóba kerülnek. Először ezek a naplóbejegyzések íródnak lemezre, és csak ezután történik meg az adatbázis tényleges módosítása.

Így, még ha a rendszer a két lépés közben omlik is össze, akkor is látható lesz majd a naplóból, amikor a rendszer ismét helyreáll, hogy a változtatásokat még el kell végeznünk az adatbázisban. Ha a rendszer még azelőtt omlik össze, hogy az összes módosítást a naplóba bejegyeztük volna, akkor a tranzakciót nyugodtan visszagörgethetjük. Ezzel tudjuk biztosítani, hogy még véletlenül se adhassuk el kétszer ugyanazt a jegyet, vagy ne terheljük meg kétszer tévedésből ugyanazt a bankszámlát.