Transit - ktsii
Tranzakció (angol tranzakció) - a szekvenciális műveletek csoportja, amely logikai egység az adatokkal való munka során.
A tranzakciók egyike az összes adatbázis alapvető fogalmának. A tranzakció lényege, hogy több lépést kapcsoljon egy művelethez, mindent vagy semmit. A lépések közötti belső köztes állapotok nem láthatók más versengő tranzakciók esetén, és ha a tranzakció végrehajtása során hiba történik, amely megakadályozza a tranzakciót, akkor az adatbázisban nem történik változás.
Képzeljen el egy rendszert a könyvek megrendeléséről a webhelyen. A könyvrendelési folyamat eltávolítja a könyvből kiválasztott könyvet, és bevezeti a bevásárlókosárba, és a könyv költsége a hitelkártyájáról le van írva. Mindkét műveletet sikeresen be kell fejezni, vagy egyik sem történhet. Ha a könyvelés a raktárból érkezik, a fizetést nem szabad leírtatni a hitelkártyáról. Egy ilyen forgatókönyv megvalósítható tranzakciók segítségével.
A tranzakciók leggyakoribb használata az, amikor megadja és frissíti az adatokat az adatbázisban. Tranzakciók is végrehajthatók, ha üzenetet írnak egy üzenetsorra, vagy amikor adatokat írnak egy fájlra vagy rendszerbejegyzésre.
Számos művelet lehet egyetlen tranzakció része.
Vannak különböző tranzakciós modellek, amelyeket különböző tulajdonságok alapján lehet besorolni, beleértve a tranzakció struktúráját, az ügyleten belüli párhuzamosságot, időtartamot stb. Leggyakrabban jelent a hagyományos tranzakció, amelyre jellemző a négy klasszikus tulajdonságok: atomicitás, következetesség, elszigeteltség, tartósság (erő) - sav (Atomicity, összhang, Isolation, tartósság). Néha a hagyományos tranzakciókat ACID tranzakcióknak hívják. A fent említett tulajdonságok a következők.
Az atomicitás (Atomicitás) tulajdonsága abban a tényben fejeződik ki, hogy az ügyletet teljes egészében kell végrehajtani, vagy egyáltalán nem.
A Következet tulajdonság biztosítja, hogy a tranzakciók előrehaladtával az adatok egy következetes állapotból egy másikba mozognak - a tranzakció nem pusztítja el az adatok kölcsönös konzisztenciáját.
Az Isolation tulajdonság azt jelenti, hogy az adatbázis eléréséhez versengő tranzakciók fizikailag egymás után vannak feldolgozva, elkülönítve egymástól, de a felhasználók számára úgy néz ki, mintha párhuzamosan futnának.
A tartósság tulajdonsága a következőképpen értelmezhető: ha a tranzakció sikeresen befejeződött, akkor az általa előállított adatok változása semmilyen körülmények között (akár későbbi hibák esetén sem) elvész.
Ha minden operátor sikeres lesz, és szoftver vagy hardverhiba nem fordul elő a tranzakció során, akkor a tranzakciót elkövették.
A tranzakciókövetés olyan művelet, amely lehetővé teszi az adatbázis számára, hogy az ügylet során végrehajtott módosításokat írja az adatbázisba. A tranzakció rögzítéséig visszavonható ezek a változtatások, visszaállíthatja az adatbázist az ügylet állapotába. A tranzakció rögzítése azt jelenti, hogy az összes tranzakciós eredmény állandóvá válik. Ezek a tranzakciók csak az aktuális tranzakció lezárása után válnak láthatóvá. Addig a tranzakció által érintett összes adat "látható" lesz a felhasználó számára az aktuális tranzakció elején.
Ha valami történt a tranzakció végrehajtása során, ami lehetetlenné teszi, hogy azt rendesen lehessen végrehajtani, akkor az adatbázist vissza kell állítani eredeti állapotába. Az ügylet visszagörgetése olyan művelet, amely biztosítja, hogy az SQL utasítások által az aktuális függőben lévő tranzakció testében végrehajtott adatok módosítása megszakad.
Minden tranzakciót végző operátor végzi el a munkájának részét, de az egész munka teljes egészének teljesítéséhez minden üzemeltetőnek feltétlenül fel kell függesztenie a feladatot. Az ügyfelek csoportosítása egy tranzakcióban azt mondja a DBMS-nek, hogy a teljes csoportot egyetlen egységként kell végrehajtani, és ezt a végrehajtást automatikusan támogatni kell.
Az ANSI / ISO SQL szabvány egy tranzakciós modellt és a COMMIT és ROLLBACK utasítások funkcióit határozza meg. A szabvány meghatározza, hogy a tranzakció a felhasználó által kezdeményezett vagy a programban található első SQL utasítással kezdődik. Minden későbbi SQL utasítás a tranzakciós szervet alkotja. Az ügylet négy lehetséges módon ér véget (1.
a COMMIT nyilatkozat sikeres tranzakciót jelez; felhasználása folyamatosan változtatja meg az adatbázisban az aktuális tranzakciót;
a ROLLBACK utasítás megszakítja a tranzakciót, elvetve az adatbázisban végrehajtott változtatásokat a tranzakció során; egy új tranzakció azonnal elindul a ROLLBACK használata után;
a tranzakció sikeres befejezéséhez a tranzakció sikeres befejezését jelenti (mintha a COMMIT nyilatkozatot használnák);
a hibás programkiszolgálás megszünteti a tranzakciót (mintha a ROLLBACK utasítás lenne).
Vannak más tranzakciós modellek (például a Sybase-ban elfogadva). Az SQL Sybase dialektus négy tranzakció-feldolgozó operátort tartalmaz:
a BEGIN TRANSACTION utasítás jelzi a tranzakció megkezdését;
a COMMIT TRANSACTION nyilatkozat sikeres tranzakciót jelez; annak jelentése megfelel az ANSI / ISO modell COMMIT üzemeltetőjének, de használatát követően nem kezdődik új tranzakció;
a SAVE TRANSACTION utasítás beállítja a mentési pontot a tranzakció testében - vagyis az ügyintéző használatakor elmentett adatbázisállapotot tárolja. A mentési pontok meg vannak nevezve, amelyek lehetővé teszik, hogy több mentési pontot állítsanak be a tranzakcióba; A mentési pont nevét a SAVE TRANSACTION utasítás adja meg.
a ROLLBACK TRANSACTION operátor két funkciót hajt végre. Ha a mentési pont neve szerepel a nyilatkozatban, akkor az adatbázis állapota elérte a SAVE TRANSACTION utasítás végrehajtásának időpontját. Ha az operátor nem adja meg az elmentési pont nevét, akkor a változtatások a tranzakció elindulásáig visszafordulnak (lásd 2. ábra).
Veszteségek akkor jelentkeznek, amikor két vagy több program ugyanazokat az adatokat olvassa le az adatbázisból, módosítja őket, majd megpróbálja az eredményt ugyanabban a helyiségben egyszerre írni. Természetesen az egyetlen program által végrehajtott változtatások menthetők az adatbázisban. - minden egyéb változás el fog veszni.
Hiányzó változások. Ez a helyzet akkor fordulhat elő, ha két tranzakció egyidejűleg ugyanazt a rekordot módosítja az adatbázisban. Például két szolgáltató dolgozik a megrendelések elfogadásánál, az első operátor 30 megrendelést fogadott el. Amikor megkérdezte a raktárba, ott regisztráltak 40 monitorok, és megerősítést kapott az ügyfél számlázása és tervezett eladását 30 monitorok 40 Vele együtt fut a második szereplő, aki megrendelést 20 például monitorok (is nagyon jó modell és olcsón), és viszont a raktár állapotát kérve és az eredeti 40-es számot megkapta, sikeresen megrendel megrendelőjét. A megrendelés befejezése után végrehajtja a Frissítés (UPDATE) parancsot, amely a kedvenc monitorjainak egyenlegét a raktárban rögzíti. De aztán végül, kedves búcsúznak az ügyfele, és biztosítja neki gyors szállítás a megrendelt monitorok véglegesítése érdekében az első állítás, valamint végrehajtja a parancsot Update és üzletek 10 fennmaradó ugyanazon a monitoron az adott pillanatban. Mindegyik elégedett a munkájával, de tudjuk, mi történt. Mindenekelőtt 50 monitorot értékesítettek a 40 létezőből, és 10 másik monitor még mindig a raktárban van. Az adatbázis jelenleg összeegyeztethetetlen állapotban van, és a cégnek komoly problémái vannak. A második operátor által végrehajtott változtatásokat figyelmen kívül hagyta a megrendelés végrehajtási programja, amellyel az első üzemeltető dolgozott. Hasonló helyzetet mutat az 1. ábrán. 11.5.
Nyilvánvaló, hogy a tranzakció feldolgozásának bizonyos fajtája szükséges, ami lehetővé teszi a fent leírt problémák és hasonlók kiküszöbölését. Ilyen fegyelem létezik és a következő szabályokon alapul:
(1) A tranzakció során a felhasználó (vagy program) csak "meglátja" az adatbázis jóváhagyott állapotát. A felhasználó (vagy program) soha nem férhet hozzá a másik felhasználó (program) műveletei eredményeként kapott adatokhoz nem kötött változásokhoz;
(2) Ha két tranzakciót (A és B) párhuzamosan hajtanak végre, akkor a DBMS azt feltételezi, hogy az eredmény megegyezik: - Az A tranzakciót először végrehajtották, a B tranzakciót utána végrehajtották; - a B ügylet először végrehajtásra kerül, az A tranzakció mögötte kerül végrehajtásra.
Ez a fegyelem tranzakciós sorszámozásként ismert. Valójában biztosítja, hogy az adatbázisba lépő minden felhasználó (program) együttműködjön vele, mintha nincs más felhasználó (program), amely ugyanazon adatokhoz egyidejűleg férhet hozzá. Ennek a fegyelemnek a gyakorlati megvalósításához a legtöbb kereskedelmi DBMS-ek záró mechanizmust használnak.
Hogy tisztázza a hatásmechanizmus zárak használni ábra3 A terv három adatbázis táblák (Check Branch termék ..) lehet hozzáférni a végrehajtása során két ügylet - az A és B Ha A művelet végrehajtásakor a tranzakció eléri a táblákat be- és Branch . A DBMS blokkolja a táblázat egy töredékét (amit a töredék fogalmaz meg - ez alább látható), amíg a tranzakciót el nem végzik vagy lemondják. A B tranzakciót párhuzamosan hajtja végre, és blokkolja a táblázatot végrehajtásának pillanatában. Ha kísérletet teszünk eléréséhez zár asztal, a tranzakció-feldolgozás felfüggesztésre kerül, és csak az után folytatható a tranzakció A kitölti és elengedi az asztalt zárva általa során a tranzakció B.