Adatbzisrendszerek megvalstsa I Rendszerhibk Tranzakci Az adatbzismveletek vgrehajtsi
Adatbázisrendszerek megvalósítása I. Rendszerhibák
Tranzakció � Az adatbázis-műveletek végrehajtási egysége. � Egy vagy több DML utasítás tartalmaz. � Tulajdonságok � Atomosság (Atomicity): mindent vagy semmit elvű végrehajtás. � Konzisztencia (Consistency): konzisztens állapotból konzisztens állapotba vezet. � Elkülönítés (Isolation): Végrehajtásának úgy kell történnie, mintha egy időben csak az aktív tranzakció végrehajtása folyna. � Tartósság (Durability): Hatását meg kell, hogy őrizze az adatbázis.
Adatbázis-kezelő rendszer alkotórészei � Parancsforrások � Adatbázis-adminisztrátor � DDL utasítás � Felhasználó/alkalmazás � QL utasítás � DML utasítás
Tranzakciók végrehajtása Naplózó és helyreállító Atomosság Konkurencia-kezelő Konzisztencia Elkülönítés Tarósság
Memóriahierarchia Regiszter Gyorsítótár Központi memória Másodlagos tárolók (lemez) Fájlrendszer + virtuális memória Harmadlagos tárolók
Pufferkezelő feladata Regiszter Gyorsítótár Központi memória Másodlagos tárolók
Adatok áramlása Processzor Adatsín Központi memória Lemezvezérlő Lemezek
Tranzakciók feldolgozása 1. 2. 3. Naplózás Konkurenciavezérlés Holtpont feloldása
Hibák fajtái 1. Hibás adatbevitel 2. Készülékhibák 3. Katasztrofális hibák 4. Rendszerhibák
Hibás adatbevitel � Nehéz felismerni, mivel számos hiba jelentkezhet az adatbevitel során. � Formai hibák � Jelentésbeli � Az hibák adatbáziskezelő-rendszerek szoftverelemeket biztosítanak a hibás adatbevitel minimálisra csökkentése érdekében. � Megszorítások � Triggerek (kioldók)
Hibás adatbevitel kezelése Megszorítások � Olyan előírások, korlátozások, amelyekkel megadhatjuk az adatbázis tartalmára vonatkozó elvárásainkat. � Minden olyan esetben ellenőrzésre kerül, amely eredményeként az adatbázis tartalma úgy változhat, hogy az a megszorítást már nem elégítené ki. � Típusai � Oszlopmegszorítás � Táblamegszorítás (NOT NULL) (UNIQUE, PRIMARY KEY, FORIEGN KEY, CHECK)
Hibás adatbevitel kezelése Triggerek � Olyan tevékenységsort definiál, amely automatikusan megy végbe valamilyen előre meghatározott felhasználói vagy rendszeresemény bekövetkezésekor. � Egy trigger működését a következő események válthatják ki: � egy táblán vagy nézeten végrehajtott INSERT, DELETE vagy UPDATE utasítás; � egyes DDL utasítások; � szerverhibák; � felhasználói be- és kijelentkezés;
Triggerek használati esetei �A triggereket elsősorban az alábbi esetekben használjuk: � származtatott oszlopértékek generálása; � érvénytelen tranzakciók megelőzése; � védelem; � hivatkozási integritási megszorítások definiálása; � komplex üzleti szabályok kezelése; � eseménynaplózás; � követés; � táblastatisztikák gyűjtése; � adattöbbszörözés.
Triggerek típusai �A trigger lefutásának száma szerint � sor szintű és � utasítás szintű trigger; �A trigger lefutásának ideje szerint � BEFORE és � AFTER trigger; � INSTEAD OF trigger � Rendszertriggerek � Felhasználói események � Rendszeresemények
Készülékhibák �A lemezegység néhány bites (szektoros) meghibásodásától a lemez teljes olvashatatlanságáig terjedő hibák. �A hiba kezelése a hiba mértékétől függően történhet: � Ellenőrző � RAID összegek használatával módszerrel � Archiválással � Elosztott, online adatbázismásolatok
Lemezhibák 1. Ideiglenes meghibásodás: Egy szektor írása/olvasása sikertelen, de a művelet kellően sokszori megismétlése megoldja a korábban felmerült írási/olvasási problémát. 2. Írási hiba: Egy szektor tartalmának írása sikertelen és a szektor korábbi tartalmát sem lehet már visszaállítani. 3. Eszközhiba: Egy vagy több bit végleges meghibásodásának köszönhetően a teljes szektor olvashatatlanná válik. 4. Lemezhiba: A lemez teljes tartalma végérvényesen olvashatatlanná és írhatatlanná válik.
Ideiglenes meghibásodás �A lemezszektorokat redundáns bitekkel együtt szokás tárolni Segítségükkel megmondható, hogy a lemezművelet sikeres volt-e. �A lemezműveletek során státuszbiteket alkalmazunk: � Olvasási � Írási függvény esetén megmutatja, hogy sikerült-e az olvasás. függvény esetén megmutatja, hogy sikerült-e a szektor írása. � Státuszbit � Paritásbit előállítása ellenőrző összegek használata: használata
Paritásbitek képzés � Értéke 1, ha a bitsorozat páratlan számú 1 -es bitet tartalmaz. � Értéke 0, ha a bitsorozat páros számú I-es bitet tartalmaz. Egy bitsorozatnak és a hozzá tartozó paritásbitek között páros számú 1 es bit található meg. Ha n független bitet használunk ellenőrző összegként, akkor annak esélye, hogy nem veszünk észre egy hibát 1/2 n �A hibadetektálásra alkalmas, de annak kezelésére nem.
Stabil tárolása �A paritásbit nem segít a hiba elhárításában, csupán annak felismerését teszi lehetővé nagy valószínűséggel. � Szektorpárokat készítünk: X (szektor) XL (bal másolat), XR (jobb másolat). � Feltesszük, hogy az olvasási függvény mindig jó státuszbitet adjon vissza. � Annyi � Képes paritásbitet használunk, hogy minden kis hiba detektálható. kezelni az eszközhibát, valamint az írási hibát.
Stabil tárolás – írási elv 1. Írjuk X értéket a bal másolatba mindaddig míg a státuszbit helyes nem lesz. Sok sikertelen próbálkozás után feltesszük, hogy a szektor hibás, ekkor javító módszert használunk, például egy új szektorral helyettesítjük a bal másolatot. 2. Ismételjük meg az 1. pontot a jobb oldali másolatra.
Stabil tárolás – olvasási elv 1. X bal oldali másolatát olvassuk előre meghatározott számú alkalommal. Ha a státuszbit jó, akkor megvan X értéke, ellenkező esetben a próbálkozások számáig ismételjük az olvasást a másolatról 2. Ha nem tudjuk X bal oldali másolatát olvasni, akkor az 1. pontot ismételjük X jobb oldali másolatával.
Lemezhibák helyreállítása � Lemezek meghibásodási modellje � Az életciklus korai szakaszában sok lemezhiba jelentkezik. � Az életciklus későbbi szakaszaiban több tényező kölcsönös hatásaként növekszik a meghibásodás esélye. Redundáns tárolás segítségével kivédhető a lemezek meghibásodása. RAID (független lemezek redundáns tömbje)
RAID 0 � Nem ad redundáns tárolást.
RAID 1 � Az adatok olvasása párhuzamosan történik. � Az adatok sebességgel, történik. írása normál párhuzamosan
RAID 4.
RAID 5
RAID 6
A tranzakciók alaptevékenységei TRANZAKCIÓ MEMÓRIATERÜLETE ADATOK OLVASÁSA ADATOK ÍRÁSA TRANZAKCIÓS TERÜLET READ(X, t) PUFFERKEZELŐ MEMÓRIAPUFFER INPUT(X) LEMEZ WRITE(X, t) MEMÓRIAPUFFER OUTPUT(X) LEMEZ
A tranzakciók alaptevékenységei A T tranzakció feladati: A : = A * 2; B : = B * 2; Konzisztencia elvárás: A=B LEMEZ PUFFER P-B TRANZ. Tevékenység L-A L-B P-A t INPUT(A) 8 8 8 READ(A, t) 8 8 Tranzakció t : = t * 2; 8 8 8 16 Tranzakció WRITE(A, t); 8 8 16 16 Tranzakció INPUT(B) 8 8 16 8 READ(B, t) 8 8 16 8 8 Tranzakció t : = t * 2; 8 8 16 Tranzakció WRITE(B, t); 8 8 16 16 16 Tranzakció OUTPUT(A) 16 8 16 16 16 Tranzakció/ Pufferkezelő OUTPUT(B) 16 16 16 Tranzakció/ Pufferkezelő
Naplózás � Napló: naplóbejegyzések sorozata, amely a tranzakciók által végrehajtott műveletekről tartalmaz információkat. �A napló vezetése a naplókezelő feladata. � Típusai: � Semmisségi (redo) naplózás � Helyrehozó (undo) naplózás �A napló csak a bővítésre nyitott. � Egy-egy naplóbejegyzése egy-egy naplózandó eseményre vonatkozik. � Elsődlegesen a memóriában kerül tárolásra, cél, hogy minél hamarabb megtörténjen a lemezre írás
Semmisségi naplózás bejegyzései T>: a T tranzakció végrehajtásának kezdete � <START T>: a T tranzakció sikeresen befejezte a működését. A � <COMMIT tranzakció hatásai nem biztos, hogy a lemezen is bevezetésre kerültek. � <ABORT T>: a T tranzakció végrehajtását nem sikerült befejezni. A � <T, X, v>: módosítási bejegyzés. A T tranzakció, X adatbáziselem, módosítás előtti értéke v volt.
Semmisségi naplózás szabályai � Ha T tranzakció módosítja X adatbáziselemet, akkor <T, X, v> típusú naplóbejegyzést azt megelőzően kell lemezre írni, hogy X új érétkét lemezre írná a rendszer. � Ha a tranzakció hibamentesen befejeződött, akkor COMMIT naplóbejegyzést csak azt követően szabad a lemezre írni, hogy a tranzakció által módosított összes adatbáziselem már lemezre íródott, ezután viszont a lehető leggyorsabban. � FLUSH LOG: naplóbejegyzések lemezre írásának kikényszerítése.
Semmisségi naplózás A T tranzakció feladati: A : = A * 2; B : = B * 2; Konzisztencia elvárás: A=B LEMEZ PUFFER Tevékenység L-A L-B P-A INPUT(A) 8 8 8 P-B TRANZAKCIÓ t Napló Pufferkezelő <START T> READ(A, t) 8 8 Tranzakció t : = t * 2; 8 8 8 16 Tranzakció WRITE(A, t); 8 8 16 16 Tranzakció INPUT(B) 8 8 16 8 READ(B, t) 8 8 16 8 8 Tranzakció t : = t * 2; 8 8 16 Tranzakció WRITE(B, t); 8 8 16 16 16 Tranzakció OUTPUT(A) 16 8 16 16 16 Tranzakció / Pufferkezelő OUTPUT(B) 16 16 16 Tranzakció / Pufferkezelő <T, A, 8> Pufferkezelő <T, B, 8> <COMMIT T>
Helyreállítás semmisségi naplózásból 1. Naplóállomány olvasása az állomány végéről. 2. Tranzakciók felosztása sikeresen befejezett és nem komplett tranzakciókra. 3. Tranzakciók feldolgozása. 4. A szükséges <ABORT T> bejegyzések beszúrása 5. FLUSH LOG. A helyreállító lépések idempotensek.
Ellenőrző pontok képzése � Ellenőrzőpontok segítségével szeretnénk redukálni a helyreállítás során áttekintendő bejegyzések számát. � Típusai: � Egyszerű ellenőrzőpont � Rendszer működése közbeni ellenőrzőpont
Egyszerű ellenőrzőpontok képzése � Egyszerű ellenőrző pontok képzése 1. Új tranzakcióindítási kérések kiszolgálásának letiltása. 2. Aktív tranzakciók befejezésének és a naplóbejegyzés rögzítésének kivárása. 3. A napló lemezre való kiírása. 4. <CKPT> naplóbejegyzés képzése és kiírása a naplóba, majd újra FLUSHLOG. 5. Tranzakcióindítási kérések kiszolgálása.
Rendszer működése közbeni ellenőrzőpont � Az ellenőrzőpont képzés alatt új tranzakciók indulását ne kelljen szüneteltetni.
Helyrehozó naplózás � Segítségével az adatbáziselemek lemezre való azonnali visszaírása elkerülhető. � Helyreállítása esetén megismétli a korrekten befejezett tranzakciók hatásait.
Helyrehozó naplózás
- Slides: 39