|
|
Transakce
O kdy₧ si to nikdo nep°eje, takΘ poΦφtaΦ podlΘhß chybßm. Tyto chyby mohou b²t hardwarovΘ (poruchy v sφti, zhroucenφ disku) i Φist∞ programßtorskΘ (chyba v operaΦnφm systΘmu, S╪BD, Φi u₧ivatelskΘm programu). Typick²m p°φpadem m∙₧e b²t situace, kdy se spustφ program m∞nφcφ data v databßzi. Dojde-li nap°. v pr∙b∞hu chodu programu k v²padku systΘmu, nenφ po restartu znßmo, kterß data byla v databßzi skuteΦn∞ zm∞n∞na a kterß data z∙stala ve vyrovnßvacφch pam∞tech v okam₧iku v²padku, tj., kterß data jsou ztracena. D∙sledkem takovΘho zpracovßnφ m∙₧e b²t nekonzistence databßze. ProblΘmu lze Φelit definovßnφm vhodnΘ programovΘ jednotky a vhodn²ch mechanism∙, kterΘ zabezpeΦφ, ₧e po skonΦenφ prßce programu z∙stane konzistence databßze zachovßna. V databßzov²ch pojmech to znamenß, ₧e v novΘm stavu databßze spl≥uje vÜechna integritnφ omezenφ definovanß ve schΘmatu databßze. Jednotka uveden²ch vlastnostφ se naz²vß transakce. Transakce zachovßvß konzistenci databßze, i kdy₧, nap°. v pr∙b∞hu provßd∞nφ transakce, m∙₧e b²t konzistence doΦasn∞ naruÜena (obrßzek 1). Transakce konΦφ v p°ijatelnΘm Φase. Program - transakce se tedy bu∩ provede °ßdn∞ cel² nebo se neprovede v∙bec. Uv∞domme si, ₧e okolo nßs se realizuje tisφce transakcφ ve stejnΘm slova smyslu. I takovß posloupnost akcφ jako je: < objednßvka zbo₧φ, jeho dodßvka, zaplacenφ, zjiÜt∞nφ zßvady, navrßcenφ zbo₧φ, navrßcenφ pen∞z> je takΘ transakcφ. Pouze databßzi p°edstavuje sv∞t objekt∙ a vztah∙ okolo nßs. Φas zaΦßtek Ti pr∙b∞h Ti konec Ti Ti databßze je databßze je databßze je v konzistentnφm doΦasn∞ v nekonzistentnφm v konzistentnφm stavu stavu stavu Obr.1 B∞h transakce Databßzovß praxe ovÜem vy₧aduje p°φstup vφce u₧ivatel∙, tj. paralelnφ zpracovßnφ transakcφ. Nenφ mo₧nΘ provßd∞t transakce za sebou, n²br₧ soub∞₧n∞ tak, ₧e operace provßd∞nΘ v transakcφch jsou navzßjem prolo₧eny. Docφlφ se tak v∞tÜφ pru₧nosti ve vyu₧itφ zdroj∙ (procesor, perifΘrie, ...) a tφm i zlepÜenφ celkovΘho provozu zpracovßnφ u₧ivatelsk²ch po₧adavk∙. Je vÜak t°eba docφlit transparence paralelnφho zpracovßnφ, tj. oΦekßvß se, ₧e databßze z∙stßvß konsistentnφ a ka₧dΘmu u₧ivateli zdß, jakoby pracoval se systΘmem sßm, bez jakΘkoliv interference s ostatnφmi u₧ivateli. TransakΦnφ zpracovßnφ je takΘ zßkladem ·sp∞ÜnΘho systΘmovΘho °eÜenφ zotavenφ z chyb. Atomicita vzhledem k chybßm (failure atomicity) znamenß udr₧et databßzi v konzistentnφm stavu, i kdy₧ se vyskytne chyba. DalÜφ zobecn∞nφ vede ke transakcφm v distribuovan²ch DBS, tj. v p°φpadech, kdy vφce u₧ivatel∙ p°istupuje souΦasn∞ k vφce databßzφm. Architekturu software pro transakΦnφ zpracovßnφ v DBS lze popsat pomocφ t°φ modul∙ (obrßzek 2). Komunikaci s databßzφ pomocφ po₧adavk∙ na Φtenφ a zßpis dat zajiÜ¥uje mana₧er dat. Zodpovφdß takΘ za zotavenφ z chyb systΘmu, tj. zajiÜ¥uje atomicitu vzhledem k chybßm. Za °φzenφ paralelnφho zpracovßnφ transakcφ je zodpov∞dn² modul, kter² se naz²vß rozvrhovaΦ (angl. scheduler). Jeho ·kolem je zajistit transparenci paralelnφho zpracovßnφ. Komunikaci mezi rozvrhovaΦem a aplikaΦnφm programem zajiÜ¥uje mana₧er transakcφ. Ten vyvolßvß transakci a posφlß po₧adavky na data mana₧eru dat prost°ednictvφm rozvrhovaΦe. Obecn∞ nemusφ b²t transakΦnφ zpracovßnφ nutn∞ souΦßstφ databßzovΘho software, m∙₧e pat°it pod operaΦnφ systΘm nebo b²t realizovßno samostatn²m softwarov²m modulem. SystΘmem pro zpracovßnφ transakcφ (SZT) je nap°. slavn² CICS (firma IBM) pro MVS, Φi modernφ softwarov² produkt ACMxp (firma DEC), kter² p°edstavuje portabilnφ transakΦnφ monitor podporujφcφ standardy pro otev°enΘ zpracovßnφ transakcφ. Standardizovan² transakΦnφ mana₧er mß b²t souΦßstφ NT4 a WIN96. aplikaΦnφ mana₧er rozvrhovaΦ mana₧er program transakcφ dat databßze
Obr. 2 Architektura transakΦnφho zpracovßnφ v DBS A nynφ trochu p°esn∞ji. Transakce je jistß posloupnost nebo specifikace posloupnosti akcφ, jako jsou Φtenφ, zßpis, v²poΦet, se kterou se zachßzφ jako s jednφm celkem (nap°. n∞kolik aktualizaΦnφch operacφ nebo dotaz v SQL). Uva₧ujme p°φklad, kdy chceme zm∞nit Φφslo Φtenß°e z hodnoty H38 na I45. Je z°ejmΘ, ₧e nelze zm∞nit pouze hodnotu v jednom °ßdku tabulky ╚TEN┴╪, ale takΘ vÜechny pot°ebnΘ °ßdky tabulek V▌P┘J╚KY a REZERVACE. Transakce, kterß byla v p°irozenΘm jazyce vyjßd°ena jednou v∞tou, tedy nenφ vyjßd°itelnß v S╪BD jednou databßzovou operacφ (nap°. operace UPDATE aplikovanß na jednu relaci), n²br₧ posloupnostφ takov²ch operacφ. Program implementujφcφ tuto transakci dokonce obecn∞ pro zm∞nu Φφsla libovolnΘho Φtenß°e m∙₧e vypadat nßsledovn∞: Begin_transaction Zm∞na_Φφsla_Φtenß°e (1) begin input(starΘ_Φφslo, novΘ_Φφslo); (2) read (temp, ╚TEN┴╪.╚_╚T = starΘ_Φφslo); (3) if temp = empty then begin (4) output(ôΦtenß° neexistujeö) (5) ABORT (6) end else begin modify1(╚TEN┴╪, starΘ_Φφslo, novΘ_Φφslo); (7) modify2(V▌P┘J╚KY, starΘ_Φφslo, novΘ_Φφslo); (8) modify3(REZERVACE, starΘ_Φφslo, novΘ_Φφslo); (9) end end_transaction (11) Operace read (°ßdek 3) a modify (°ßdky 7-9) mohou b²t implementovßny pomocφ hostitelskΘ verze SQL. Operace Begin_transaction (nebo START, BOT) a end_transaction (nebo EOT) oznaΦujφ poΦßtek a konce transakce. ╪ßdky 1 a 11 tedy slou₧φ jako zßvorky naznaΦujφcφ SZT, ₧e mno₧ina °ßdk∙ mezi nimi se chßpe p°i volßnφ programu jako atomickß. P°φkaz ABORT na °ßdku 6 znamenß ukonΦenφ transakce (je ekvivalentnφ p°φkazu EXIT) v p°φpad∞, ₧e neexistuje °ßdek v relaci ╚TEN┴╪ s klφΦem starΘ_Φφslo. Obecn∞ ABORT (Φi ROLLBACK) znamenß, ₧e b∞h transakce je zastaven a ₧e databßze musφ b²t uvedena do p∙vodnφho stavu (v danΘm p°φpad∞ ke zm∞nßm nedoÜlo, tak₧e k ₧ßdn²m akcφm nedochßzφ). P°φkaz m∙₧e b²t takΘ inicializovßn programem transakce, ale SZT, nap°. v p°φpad∞ chyby. VÜimn∞me si, ₧e v moment∞ opravy Φφsla Φtenß°e v relacφch ╚TEN┴╪ a V▌P┘J╚KY, a p°ed opravou v relaci REZERVACE, databßze nenφ v konzistentnφm stavu. S╪BD, kter² podporuje zpracovßnφ transakcφ, ovÜem nezaruΦuje, ₧e transakce bude v₧dy provedena do konce. V p°φpad∞, ₧e nap°. vypadne systΘm v pr∙b∞hu zpracovßnφ transakce, je nutnΘ, aby byl pomocφ S╪BD stav databßze obnoven na stav p°ed zapoΦetφm provßd∞nφ transakce. Aby se u₧ivateli transakce jevila jako jedna atomickß operace, jsou nutnΘ p°φkazy COMMIT a ROLLBACK. Prvnφ z nich signalizuje S╪BD ·sp∞Ünost provedenφ transakce (tj. je zajiÜt∞no, ₧e veÜkerΘ zm∞ny databßze se stanou persistentnφmi a mohou b²t zviditeln∞ny dalÜφm transakcφm), druh² signalizuje opak (tj. databßze musφ b²t reorganizovßna do p∙vodnφho stavu). V praxi nenφ nutnΘ vyvolßvat operaci COMMIT explicitn∞, staΦφ normßlnφ ukonΦenφ program∙ realizujφcφch transakci. V naÜem p°φklad∞ transakce slou₧φ jako implicitnφ p°φkaz COMMIT p°φkaz End_transaction. P°φkazu COMMIT °φkßme Φesky potvrzenφ. Po jeho provedenφ jsou tedy v²sledky transakce trvalΘ (tj. nevratnΘ nap°. operacφ UNDO) a viditelnΘ. P°φkaz ROLLBACK zajiÜ¥uje nßvrat do stavu databßze p°e zapoΦetφm transakce. K tomu je t°eba pou₧it tzv. ₧urnßlu (angl. log file) na n∞jakΘm stabilnφm pam∞¥ovΘm mΘdiu. Äurnßl je vlastn∞ dalÜφ databßze obsahujφcφ historii vÜech zm∞n u₧ivatelskΘ databßze v jistΘ ΦasovΘ period∞. N∞kterΘ transakce nem∞nφ stav databßze. Pat°φ k nim nap°. transakce read-only (dotazy). Ostatnφ transakce jsou aktualizaΦnφ. Transakce se m∙₧e dostat do jednoho z p∞ti stav∙:
Ve stavech AB nebo C °φkßme, ₧e transakce je ukonΦena. Ze stavu F vstupuje po provedenφ operace ROLLBACK (nebo UNDO) do stavu AB. V p°φpad∞ ΦßsteΦn∞ potvrzenΘho stavu se m∙₧e transakce dostat do stavu F, proto₧e nap°. dφky v²padku systΘmu nemusφ b²t vyrovnßvacφ pam∞ti odeslßny na disk. V p°φpad∞ stavu AB mßme dv∞ mo₧nosti - bu∩ restartujeme transakci, nebo ji ponechßme zruÜenou (nap°. do okam₧iku, kdy je opravena logickß chyba programu). JednotlivΘ stavy transakce lze zobrazit stavov²m diagramem na obrßzku 3.
Obr. 3 Stavy transakce Zatφm se zdß, ₧e na transakcφch nenφ nic p°φliÜ zajφmavΘho. V dalÜφch pokraΦovßnφch databßzovΘ abecedy vÜak uvidφme, ₧e vÜe se zeslo₧itφ, kdy₧ b∞₧φ najednou vφce transakcφ. Dokonce se dß °φci, ₧e °eÜenφ t∞chto problΘm∙ je v databßzφch primßrnφ a s rozvojem sφtφ p°edstavuje tΘma, kterΘ se stßle zkoumß. <seznam dφl∙ serißlu> <COMPUTERWORLD> |