av Kinga Tajti för 7 årar sedan
316
Mer av detta
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.
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
DDL zárak
DML zárak
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.
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.
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.
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
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
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
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 ( 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
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.
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?
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.
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).
Az új értéket tároljuk az eredeti helyen, ahol módosítok.
Eredeti helyen
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 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
"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