• Nem Talált Eredményt

4. fejezet - Adat- és tároláskezelés

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):

Atomosság (atomicity): a tranzakció „mindent vagy semmit” jellegű végrehajtása (vagy teljesen végrehajtjuk, vagy egyáltalán nem hajtjuk végre).

Konzisztenciamegőrzés (consistency preservation): az a feltétel, hogy a tranzakció megőrizze az adatbázis konzisztenciáját, azaz a tranzakció végrehajtása után is teljesüljenek az adatbázisban előírt konzisztenciamegszorítások (integritási megszorítások), azaz az adatelemekre és a közöttük lévő kapcsolatokra vonatkozó elvárások.

Elkülönítés (isolation): az a tény, hogy minden tranzakciónak látszólag úgy kell lefutnia, mintha ez alatt az idő alatt semmilyen másik tranzakciót sem hajtanánk végre.

Tartósság (durability): az a feltétel, hogy ha egyszer egy tranzakció befejeződött, akkor már soha többé nem veszhet el a tranzakciónak az adatbázison kifejtett hatása.

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:

• Az egyes tranzakciók kezdete és vége. A tranzakció vége nem feltétlenül csak a COMMIT vagy a ROLLBACK utasítás lehet. A tranzakció akkor is véget ér, ha áramszünet van, vagy ha a felhasználó munkamenete lezárul, mert kilépett a programból. A tranzakció kezdetét egyes adatbázis-kezelő rendszereknél külön jelezni kell, más adatbázis-kezelő rendszerek pedig automatikusan elkezdenek egy tranzakciót, amikor a felhasználó bejelentkezik vagy lezár egy tranzakciót.

• Az adat aktuális változásai, ennek az információnak elégnek kell lennie a módosítások visszavonásához az egyes tranzakciókon belül. Általában egy ilyen naplóbejegyzés tartalmazza, hogy melyik tranzakció, mikor, melyik adatbáziselemet milyen értékről milyen értékre módosította. Az adatbáziselem itt például egy tábla sorában egy mező, vagy egy teljes adatlap lehet.

• A COMMIT és ROLLBACK utasítások az egyes tranzakciónál.

• Egyéb bejegyzések.

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

4. fejezet - Adat- és tároláskezelés

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

4. fejezet - Adat- és tároláskezelés

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.