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.
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árA 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?
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
Elveszett módosítás
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
Munka inkonzisztens adatokkal
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
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.
After Image
Az új értéket tároljuk az eredeti helyen, ahol módosítok.
Eredeti helyen
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étreMű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 szegmensbeTová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)
Milyen feladatokat lát el?
Tranzakció "Rollback"
Röviden ha a felhasználó meggondolja magát és a módosításait vissza akarja állítani (Rollback-el).
Olvasási konzisztencia
A rendszer megőrzi a régi értékeket a tranzakció végéig, de a commit után is igyekszik megőrizniEgy tranzakció összes lekérdezéséhez, azaz egy tranzakción belül minden lekérdezés az adatbázis egy adott időpontbeli állapotát látjaA tranzakció ideje alatt más tranzakciók hatása nem érvényesülHa többszörösen módosulnak az adatok, akkor az olvasási konzisztencia is többszörös "pointer"-ek mentén találja meg az eredményeitNagy adatbázisokhoz; ahol kevés sort módosítanak/két tranzakció kis eséllyel módosítja ugyanazt a sort/rövid tranzakciók vannak (vagy a hosszú tranzakciók csak olvasnak)Forrás: http://rblst.info/wiki/zarak
aPé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ó helyreállítása
Jellemzői
Az Undo szegmenst egy különleges típusú táblának is tekinthetjük, mivel:adatokat tároladatfájlokból van, tehát ugyanúgy cache-elődikSelectálni nem lehetCélja: Commitot hamar kiszolgálni.
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 mindenadatbá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 enneka 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ányokbaMindezek miatt a cache-elés során nem veszítünk adatokatForrá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
Jellemzői
Bináris adatokVisszafejthetők belőle a felhasználók DML utasításaiKezdetben a memóriába íródik egy ciklikus pufferbe ( Redo Log Buffer)Legkésőbb a commitkor ki kell kerülnie lemezre --> Oracle esetében külön fáljtípus a lemezen, mégpedig Online Redo Log File
Önmagába mire nem elég?
Maximálisan nem véd meg az adatfájlok elveszítésétől
Csak az utolsó 10/20/30 perc adatait őrzi, majd felülíródik
Lemezhiba ellen nem véd meg önmagában
Archiválás
Archiválás: Online naplóállományok elvesztésének megakadályozását jelenti az Oracle-ben.
Időnkénti adatbázis fáljmentés
Típusai
Logikai napló
Fizikai napló
Bejegyzési napló
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 UPDATELehető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#CNCPT1313http://people.inf.elte.hu/sila/eduAB/zarolasok.txt
aJellemzői
Mérete
Az adatbázis-kezelő rendszer elzárhatjaA teljes adatbázist (Database Lock). (Ezt nemigen alkalmazzák, mert ez a párhuzamos feldolgozást lehetetlenné teszi.)A feldolgozandó adatokat tartalmazó adathordozó logikailag összetartozó részét (Tablespace Lock). Ezt általában a szolgáltató programok használják, amikor nagy adatmennyiségek újraszervezésének, betöltésének zavartalanságát, megszakítás mentes végrehajtását kívánják biztosítani.A feldolgozandó adatokat tartalmazó táblázatot (Table Lock).A feldolgozandó adatokat tartalmazó lapot (Page Lock).A feldolgozandó adatokat tartalmazó sort (rekordot) (Row Lock).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
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 elemeketA táblázat mutatja, hogy milyen zárak kompatibilisek egymással, melyek tehetők fel ugyanarra a rekordra egyidejűleg.+ : kompatibilisek-: inkompatibilisekForrá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
Osztott zár (Share vagy S zár): Bárki olvashatja a zárolt elemeket, de senki nem változtathatja meg őket. Bárki rátehet egy újabb S zárat, viszont senki más nem zárhatja el egy X zárral. Az eredeti S zár feltevője is csak akkor változtathatja meg a zár erősségét X-re, ha másnak nincs a rekordon S zárja.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
Kizárólagos zár (Exclusive vagy X zár): Más tranzakciók nem férhetnek hozzá az így zárolt elemekhez. Ugyanígy, ha X zár van már egy rekordon, akkor erre más semmiféle zárat nem rakhat, nem végezhet a rekordban semmiféle műveletet.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
Módosítási zár (Update vagy U zár): azt jelzi, hogy a rekordot valamikor később esetleg meg akarjuk változtatni. Erre példa egy módosítható kurzorral (SELECT … FOR UPDATE ) való beolvasás. Amíg a rekordot ténylegesen nem változtatjuk meg, addig bárki olvashatja, rátehet egy S zárat. De U vagy X zárat nem rakhat rá. A módosítás pillanatában az U zár átvált X zárbaForrá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
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
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.
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
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.
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.
Zárolási típusok
Automatikus
DML zárak
DDL zárak
Kézi