4.3. Adatbázisnapló

A tranzakciónapló vagy adatbázisnapló az adatbázis egyik legfontosabb állománya. Az adatbázisnaplóban az adatbázisban végrehajtott tranzakciók bejegyzései vannak.

A tranzakció az adatbázis-műveletek végrehajtási egysége. A tranzakciónak van kezdőutasítása és befejezőutasítása, ez utóbbi általában a COMMIT vagy a ROLLBACK utasítás, vagy olyan művelet, amely ezeknek az utasításoknak a hatását váltja ki. A tranzakció alapvetően DML utasításokból áll: INSERT, UPDATE, DELETE. A tranzakcióknak a következő tulajdonsággal kell rendelkezniük (ACID-tulajdonságok):

Ahhoz, hogy a tranzakciók ezen tulajdonságokat teljesíteni tudják, szükség van az adatbázisnaplóra.

Az adatbázisnaplóban naplóbejegyzések sorozata van. Naplóbejegyzések lehetnek a következőek:

Tudnunk kell azt is, hogy mielőtt bármilyen változás történik az adatbázisban, azt először az adatbázisnaplóba be kell jegyezni. Így, ha hiba történik az adatbázis-kezelő rendszerben, azaz leáll, akkor az adatbázisnapló bejegyzései alapján azoknak a tranzakciónak a hatása visszavonható, amelyek nem lettek véglegesítve, illetve ha a véglegesített tranzakciók műveletei nem kerültek az adatbázisba, akkor azokat az adatbázisnapló alapján újra végre lehet hajtani.

A naplóbejegyzések egy megnyitott adatbázisnapló-állományba kerülnek. Ez a naplóállomány az aktív napló. Azonban a naplóbejegyzések száma idővel egyre több lesz, amely egy idő után egy állományban kezelhetetlenül sok lenne. Ezért naplóváltásra kerül sor, amely azt jelenti, hogy az adatbázis-kezelő rendszer az aktuális aktív naplóállományt bezárja, és egy másik naplóállományba kezdi el a naplóbejegyzéseket írni. A naplóváltás történhet automatikusan és az adatbázis-adminisztrátor is kikényszerítheti. Az automatikus naplóváltáshoz az adatbázis-kezelő rendszerek különböző opciókat biztosíthatnak. Ilyen lehet például, hogy megadható a naplóállományok mérete, így naplóváltás akkor történhet, amikor az adott állomány betelik. Másik lehetőség, hogy egy időintervallumot kell megadni, amely letelte után történik a naplóváltás.

Ha esetleg nincs adatbázismentés, és nincs szükség az adatbázisnapló archiválására, akkor felmerülhet a kérdés, hogy meddig szükséges őrizni a naplóbejegyzéseket. A régi naplóbejegyzésekre addig van szükség, amíg a hozzájuk tartozó változások az adatbázisban meg nem történtek, és az adott tranzakció véget nem ért. Kérdés, hogy ezt honnan lehet tudni. Az adatbázis-kezelő rendszer erre használja az ellenőrzőpontokat. Az adatbázisnaplóban található ellenőrzőpont-bejegyzés alapján az adatbázis-kezelő rendszer biztosan tudhatja, hogy az adatbázisnaplóban az az ellenőrzőpont előtti naplóbejegyzésekre már nincs szükség, ha nem szükséges az adatbázisnaplót archiválni. Ebben az esetben minden adatbázisbeli módosítás bekerült az adatbázisba is, és ezért az adatbázisnaplót nem szükséges az ellenőrzőpont-bejegyzés elé visszagörgetni. A naplóállományokat azonban csak addig szükséges őrizni, amíg szükség van rájuk.

Az adatbázis-kezelő rendszerek így rendelkeznek általában egy aktív naplóállománnyal, és legalább egy de inkább néhány inaktív naplóállománnyal. Naplóváltáskor egy inaktív naplóállományt nyit meg az adatadatbázis-kezelő rendszer. Természetesen a naplóállományok számát és helyét az adatbázis-adminisztrátornak előre meg kell mondani. Az adatbázis-kezelő rendszer a naplóállományokat ciklikusan használja. Legalább két naplóállományra van szükség.

Láthatjuk, hogy az adatbázisnapló állományai valóban nagyon fontosak az adatbázisunk életében. Az aktív naplóállományt nagyon kell védeni, mert ha elveszik, akkor az adatbázisunk nem lesz konzisztens, nem fogjuk tudni használni. Mivel ez egy megnyitott állomány, ezért menteni még nem lehet, de pontos másolatot készíteni róla igen. A legtöbb adatbázis-kezelő rendszer támogatja a többszörös redundáns naplókat. Azaz az adatbázis naplóállományai legalább két példányban két különböző lemezen léteznek. Így ha az egyik naplóállománnyal történik valami, és használhatatlanná válik, akkor a hiba kijavításáig a naplóállomány másik példányát lehet használni. Az adatadatbázis-adminisztrátornak kell eldöntenie, hogy hány példányban hozza létre az adatbázis naplóállományait. Ezeket a példányokat lehetőleg nem egy háttértárolón helyezi el az adatbázis-adminisztrátor. Az azonos tartalmú naplóállományok együttesét gyakran naplócsoportnak hívják.

A 4-6-os ábrán az adatbázisnapló-állományok közötti naplóváltást láthatjuk, redundáns naplózás megvalósítás esetén. Minden egyes naplóállományból 3 egyforma példány, azaz 3 naplócsoport van, és a naplóváltások miatt 4 különböző naplóállományt láthatunk az ábrán. Az ábra nem mutatja be a naplóarchiválás folyamatát.

4-6. ábra - Naplóváltás

Az adatbázis-adminisztrátornak tehát először döntenie kell arról, hogy mennyi adatbázisnapló-állományt hoz létre, aztán dönteni kell arról, hogy hány példányban tárolja őket. Ha 5 naplóállományt használ 3-3 példányban, akkor máris 15 naplóállományról beszélünk. Ezeket a döntéseket nagyban befolyásolja az is, hogy az egyes naplóállományoknak mennyi lehet a maximális mérete. Ha nem adunk meg maximális méretet, akkor a napló esetleg végtelen nagyra megnőhet, betöltheti a teljes háttértárolót. Ha betölti, akkor a következő naplóbejegyzést sem fogja tudni hova írni, ami lelassuló folyamatokat vagy teljes leállást okozhat. Fontos kérdés tehát az, hogy a naplóállományoknak mekkora legyen a mérete. Az adatbázis-adminisztrátor az adatbázisban történő tranzakciós tevékenység mennyiségére alapozva állapíthatja meg a naplóállományok méretét. A legfontosabb cél azonban az, hogy az adatbázisnapló állományai a legforgalmasabb időszakban is ki tudják szolgálni a teljes adatbázisbeli tevékenységeket teljesítménycsökkenés nélkül.

Az adatbázisnapló tárolási igényével kapcsolatban van még egy fontos kérdés. Ha az adatbázisunkat mentjük, márpedig a legtöbb esetben ez történik, akkor a naplóállományokat menteni, archiválni kell, és az adatbázismentéssel együtt kell a továbbiakban kezelni. Naplóváltáskor a régi állományt, amely tovább már nem változik, azonnal lehet archiválni. Ez történhet automatikusan és kézzel is. Az archivált naplóállományoknak azonban ugyancsak szükségük van tárterületre. Célszerű őket először a lemezre archiválni, mert így az archiválás gyorsabb, majd minél hamarabb, de legkésőbb 24 óra múlva más tárolási területre, például szalagra menteni őket.