Categorieën: Alle - adatbázis

door Kinga Tajti 7 jaren geleden

324

Tranzakcionálisan konzisztens működés, zárak és működés naplózása

Az adatbázisok kezelése során a tranzakciók kulcsfontosságú szerepet töltenek be, mivel ezek biztosítják a logikai munkaegységek megfelelő végrehajtását. A tranzakciók sorozata vagy teljes egészében megvalósul, vagy egyáltalán nem hajtódik végre, ezáltal segítve az adatbázis konzisztens állapotának fenntartását.

Tranzakcionálisan konzisztens működés, zárak és működés naplózása

Tranzakcionálisan konzisztens működés, zárak A működés naplózása

A gondolattérkép a 11. heti előadás diáiból, valamint az órán elhangzottakból készült. Ahol nincs forrás megjelölve, ott ezek az információk kerültek felhasználásra.

Zárak

Lock:


Olyan mechanizmus, amely megakadályozza, hogy a tranzakciók egy időben (konkurensen) ugyanahhoz az erőforráshoz hozzáférjenek.


A lock csak mások módosítását akadályozza meg, az adatok olvasását alap esetben nem, viszont nem is a lezárt új értékeket olvassa hanem a "Before Image"-et.


Automatikus sor szintű zárolást alkalmaz a rendszer. Az Oracle automatikusan sor szintű zárat helyez el az érintett sorokra

a következő utasítások esetén: INSERT, DELETE, UPDATE, SELECT ... FOR UPDATE

Lehetőség van manuális zárolásra is.

Az olvasásoknak soha nem kell várakozniuk az író utasítások miatt.

Az író utasításoknak soha nem kell várakozniuk az olvasó utasítások miatt.

Az író utasítások csak akkor várakoznak más író utasításra, ha ugyanazt a sort érinti a két utasítás.


Ha megakadályozott valaki mást a módosításban, akkor ez a másik tranzakció várakozni fog (lock-ra vár)

Kialakulhat úgynevezett "holtpont", ha két vagy több tranzakció egymásra vár.

A várakozás addig tart, amíg az első tranzakció be nem fejeződik. (Commit vagy Rollback)




Források:

https://docs.oracle.com/database/121/CNCPT/consist.htm#CNCPT1313

http://people.inf.elte.hu/sila/eduAB/zarolasok.txt

Zárolási típusok
Kézi
Automatikus

DDL zárak

DML zárak

Izolációs szintek

Az izolációs szint egy olyan tulajdonság, mely meghatározza, hogy az egyidejűleg futó adatbázis tranzakciók láthatják-e egymás változtatásait, illetve ha igen, akkor hogyan.

Read Commited

A Select által egyszer már olvasott sorokat más tranzakció módosíthatja. Olvasáskor csak a commitált tranzakciók által írt adat látszik. Tehát a Select kétszer egymás utáni futtatása különböző eredményt adhat. Az Oracle esetében ez az alapvető működési mód.

Repeatable Reads

A Select által egyszer már olvasott sorokat a többi tranzakció nem módosíthatja. Tehát ha a Select-et futtatom kétszer egymás után, akkor ugyanazt az eredményt kapom.


Repeatable Reads-en is tud az Oracle működni, csak ennek általában nagy ára van: ugyanis a Select is le akarja "lockolni" a táblát és ezt azért teszi, hogyha megismétlődne a Select, garantáltan ugyanazt az eredményt kapja.

De ekkor az egyidejű működés szinte teljesen megakadna.

Dirty Read

Definíció:

Egy tranzakció olyan adatot olvas, amelyet egy másik tranzakció írt, de még nem commitált. Tehát nem befejezett tranzakciók által írt adatot is olvashat.


Ez az esetek többségében megengedhetetlen az adatbázis világában, mivel előfordulhat olyan, hogy valaki módosítja az adatokat, de még nem commitált. Eközben az olvasó lekérdezi az adatokat, de a módosító közben rollback-el, így az olvasó hibás adatokat olvasott le.


forrás: https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/transaction-isolation-levels

Időtartama

A zár általában az utasítás kiadásakor lép életbe, és a Commit vagy Rollback végrehajtásakor szűnik meg.



Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január

Erőssége

A zár erőssége meghatározza, hogy más tranzakciók milyen módon használhatják a zárolt elemeket


A táblázat mutatja, hogy milyen zárak kompatibilisek egymással, melyek tehetők fel ugyanarra a rekordra egyidejűleg.

+ : kompatibilisek

-: inkompatibilisek


Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január

Módosítási zár


Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január

Kizárólagos zár


Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január

Osztott zár


Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január

Mérete

Az adatbázis-kezelő rendszer elzárhatja


A zár aktuális méretét az adatbázis-felügyelő vagy a felhasználó esetenként maga is meghatározhatja. Ezt a zárat az adatbázis-kezelő rendszer automatikusan ráteszi az adatbázisnak a használatba vett részére, illetve ha valamilyen okból nem tudja feltenni, akkor előjegyzésbe veszi a zárolási szándékot.


Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január

Naplózás

Naplózás ( Redo Logging)


A naplózás a lefagyások és a szabálytalan leállások ellen nyújt védelmet


"Ahhoz, hogy az eredeti állapotot vissza lehessen állítani, a rendszer minden

adatbázisbéli változtatásról naplót vezet. Ebben minden változtatáshoz feljegyzi, hogy mikor,

mi történt és hogy mit mire vagy hogyan módosítottak. A kiinduló állapot visszaállítása ennek

a naplónak az adatai alapján történik."


Lehetővé teszi, hogy az adatok a gyorsítótárból csak jóval később íródjanak ki a végleges adatok az adatállományokba

Mindezek miatt a cache-elés során nem veszítünk adatokat


Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január

Típusai
Bejegyzési napló
Fizikai napló
Logikai napló
Önmagába mire nem elég?
Lemezhiba ellen nem véd meg önmagában

Időnkénti adatbázis fáljmentés

Archiválás

Archiválás: Online naplóállományok elvesztésének megakadályozását jelenti az Oracle-ben.

Csak az utolsó 10/20/30 perc adatait őrzi, majd felülíródik
Maximálisan nem véd meg az adatfájlok elveszítésétől

Tranzakciók

Tranzakció ( Logikal Unit of Work)

A párhuzamos munkák legfontosabb eleme, az adatbázis használatával kapcsolatban logikai munkaegységnek nevezzük. Ez olyan egymást követő adatbázis-műveletek sorozata, melyek vagy teljes egészükben mind megvalósulnak, vagy egy elemük sem hajtódik végre, illetve nem véglegesítődik. A tranzakció az adatbázist az egyik konzisztens állapotából átviszi egy másik konzisztens állapotába.


Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január


A felhasználók nem csak olvasnak, hanem adatot is módosítanak az adatbázisban, viszont a tranzakciók során bármikor jóváhagyhatják (Commit) , de vissza is vonthatják modosításukat (Rollback)


Mik a problémák és hogyan is oldja meg ezeket az Oracle?

Megoldás: Régi és új értékek egyaránt tárolása

Az adatbáziskezelő egyaránt tárolja a módosított adatokat (After Image) és a régi adatokat is (Before Image).


Amíg a tranzakció véget nem ér, addig mások nem látják az új értékeket, lekérdezéskor a régi értékeket látják.

Before Image

A régi értékeket az adatbázison belül egy speciális szegmensben tároljuk az Oracle esetében Undo szegmensnek nevezzük

Undo szegmens

Az Undo szegmensben tároljuk azokat a régi adatokat, amelyeket megváltoztattunk, de még nem vagy még mostanában commitáltunk.

Nem végtelen sokáig tudjuk itt tárolni a régi adatokat, csak ideig-óráig.


A rendszergazda szabhatja meg mekkora Undo szegmenst hoz létre


Működésének rövid magyarázata:


Tegyük fel hogy az 5-ös értéket 10-re cserélem. Mielőtt ez az 5-ös érték eltűnne a processz átmenekíti egy másik helyre --> Undo szegmensbe

Továbbá szükség van egy "jelre" (pointer-re), ami oda mutat a régi helyre, ha esetleg szükség lenne a régi értékre meg tudja találni a helyét illetve, ha meggondolom magam akkor a régi értéket vissza kell ide másolnom (Rollback művelet)

Jellemzői

Az Undo szegmenst egy különleges típusú táblának is tekinthetjük, mivel:


Célja: Commitot hamar kiszolgálni.

Milyen feladatokat lát el?

Tranzakció helyreállítása

Olvasási konzisztencia







Forrás: http://rblst.info/wiki/zarak

Példák

Tegyük fel, hogy Jancsi az adattöltő, Juliska pedig az olvasó.


1)

Jancsi 8:00 órakkor Update-el, de fél 9ig nem commitál. Juliska 8:15-kor kiad egy selectet, akkora Jancsi már módosította ezt a sort, de még nem commitált ezért Juliska a régi a még nem módosított értéket látja.


2)

Ugyanezen koncepció alapján Jancsi reggel 8:00-kor megkezdte, 8:10-kor módosította a sort, de csak 8:20-kor commitált. Juliska 8:15-kor kezdett olvasni a commit pillanata előtt. Mire a módosított sorhoz ér 8:30 lett, Jancsi addigra már commitált, de ekkor is a régi értéket fogja az olvasó látni, mivel az számít hogy a select utasítás kiadásának pillanatában mi van, nem az, hogy később mi lesz.


Tranzakció "Rollback"

Röviden ha a felhasználó meggondolja magát és a módosításait vissza akarja állítani (Rollback-el).

After Image

Az új értéket tároljuk az eredeti helyen, ahol módosítok.

Eredeti helyen

Problémák párhuzamos feldolgozásnál

Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január

Patthelyzet

"A párhuzamos feldolgozásban a legnagyobb veszélyt a patthelyzetek jelentik. Ezek akkor alakulhatnak ki, ha egyidejűleg futó tranzakciók kizárólagosan is lefoglalhatnak erőforrásokat, általában adatbázis lapokat vagy rekordokat. Ilyenkor két vagy több tranzakció vár olyan erőforrásokra, amelyeket egyikük kizárólagos módon zárolt, de nem tud felszabadítani, mert ő maga is vár olyan erőforrásra, melyet egy másik tart zárva."


Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január

Munka inkonzisztens adatokkal
Nem véglegesített adatok feldolgozása

"Az adatbázis-kezelő rendszer lehetővé teszi egy tranzakción belül a módosított adatok eredeti állapotának a visszaállítását.

Ezért előfordulhatna, hogy két párhuzamosan futó tranzakció közül a második az első által már módosított, de még nem véglegesített rekordokkal dolgozik. Eközben az első valamilyen okból a módosítást egy ROLLBACK-kel visszavonja, érvényteleníti. Ezáltal a második tranzakció hibás, érvénytelen adatokkal dolgozott."


Forrás: Baksa-Haskó Gabriella, Quittner Pál: Adatbázisok, adatbáziskezelő rendszerek, Budapest, Debreceni Egyetem Agrártudományi Centrum Agrárgazdasági és Vidékfejlesztési Kar, 2007. január

Elveszett módosítás