<<Elöző fejezet | Tartalom | Következő fejezet>> |
6. Többfelsználós környezet és adatbiztonság
6.1. Tranzakciók
6.2. ACID szabályok
6.3. Adatvesztés elleni védelem
6. Többfelhasználós környezet és adatbiztonság
A többfelhasználós környezetben az egyes felhasználók által végrehajtott módosítások könnyen inkonzisztens adatbázis tartalmat eredményezhetnének. Ennek elkerülésére az adatbáziskezelők tranzakciókat használnak.
Az adatbázisokban tárolt adatok elvesztése óriási károkat okozhatnak, ezért az adatbiztonság nagyon fontos terület, melyet nagyon röviden áttekintünk.
Az eddigiek során nem foglalkoztunk azzal, hogy ha több konkurens felhasználó csatlakozik az adatbázishoz, akkor számos problémával kell megküzdenünk. Mit csinál egy adatbáziskezelő, ha több felhasználó akarja módosítani ugyanazon rekordok tartalmát? Ennél gyakran még összetettebb a dolog, a felhasználók által végrehajtott módosítások egy sorozata (több önálló SQL utasítás) után alakul ki újra egy konzisztens állapot az adatbázisban. Hogyan lehet kezelni azt, hogy a módosítást végrehajtó felhasználó kivételével mindenki az adatbázis konzisztens állapotát lássa? Erre ad megoldást a tranzakcók kezelése a relációs adatbáziskezelőkben. Egy tranzakció mindig egy konzisztens adatbázis állapotból indul ki és a módosítások egy olyan sorozatát tartalmazza, melyek végén ismét egy konzisztens adatbázis tartalom áll elő. A relációs adatbázis kezelők párhuzamosan több tranzakciót is képesek kezelni.
Nézzünk egy egyszerű példát, mely tranzakciók nélkül nehezen lenne kezelhető. Ugyanabban a bankban vezetett két bankszámla között szeretnénk utalást végezni.Az "A" számláról tegyünk át 50 fabatkányi összeget a "B" számlára. Még ha egy adatbázis táblában tároljuk a két számla egyenlegét, akkor sem lehet a feladatot egyetlen SQL utasítással megoldani. Az alábbi hat elemi lépésre bonthatjuk fel a feladatot:
Ha a fenti műveletsor a 3-6 utasítások között valamilyen ok miatt megszakad, akkor az adatbázis inkonzisztens állapotba kerül. Ha a 3-6 lépések között egy másik tranzakció is az "A" számla tartalmát szeretné módosítani, akkor egy inkonzisztens állapoton fog dolgozni.
A tranzakciók kezdetét a BEGIN SQL utasítással jelöljük meg. Ezután a tranzakció lezárásáig végrehajtott DML utasítások a tranzakció részét képezik. Vigyázat a DDL utasítások végrehajtása előtt és után az adatbáziskezelő lezárja az aktuális tranzakciót az adatok tárolásával! A tranzakció kétféleképpen zárható le. A COMMIT SQL utasítás véglelgesíti az adatbázisban a módosításokat, ezután minden felhasználó a COMMIT utáni konzisztens képet látja. A ROLLBACK SQL utasítással a tranzakció össze módosítását visszavonhatjuk, a felhasználók továbbra is a tranzakció indítása előtti konzisztens adatbázis képet látják. A relációs adatbázis kezelők nem biztosítanak lehetőséget a tranzakciók egymásba ágyazására. Amennyiben a tranzakcióba bevont műveleteket csak egy bizonyos pontig szeretnénk visszavonni, akkor a SAVEPOINT és a ROLLBACK TO utasításokat használhatjuk. A SAVEPOINT utasítással névvel elnevezhetünk egy pontot a tranzakcióban, a ROLLBACK TO utasítással a megadott nevű pontig vonhatjuk vissza a tranzakciót. Az adatbáziskezelők azon funkcióit, melyek a többfelhasználós környezetben biztosítják minden felhasználó számára a konzisztens adatbázis képet az ACID rövidítéssel jellemzik (Atomicity, Cosistency, Isolation, Durability - Atomikusság, Konzisztencia, Elszigeteltség, Állandóság).
6.3. Adatvesztés elleni védelem
6.1 ábra Adatvesztés elleni védelem
Az adatbáziskezelő a tranzakció közben végrehajtott változásokra vonatkozó adatokat a tranzakció log(ok)ba írják ki. A log fájlt célszerű egy másik háttértárolóra tenni mint az adatbázis fájlokat, hogy az esetleges diszk hibák esetén ne veszítsuk el mindkettő tartalmát. Ezután módosítja a tranzakció a memóriába betöltött adatbázis rekordokat. Az adatbáziskezelő a tranzakcióktól független logika alapján menti ki a memóriából az adatokat (jellemzően késleltetetten). Az adatbázis adminisztrátor rendszeres időnként mentéseket (backup) készít az adatbázisfájlok tartalmáról.
Nézzük meg milyen hibák esetén milyen helyreállítási stratégiát alkalmazhatunk.
Az adatbiztonságot tovább növelhetjük a háttértárak RAID rendszerbe szervezésével illetve redundáns adatbázis szerverek működtetésével.
<<Elöző fejezet | Tartalom | Minta adatok>> |