COMPUTERWORLD
pod kapotou
Denφk transakcφ

Tak jako na ka₧dΘ sprßvnΘ lodi existuje lodnφ denφk, ka₧d² systΘm zpracovßnφ transakcφ (SZT) by m∞l pou₧φvat denφk transakcφ. Na rozdφl od lodi, kde se z denφku dajφ vyΦφst vÜechny d∙le₧itΘ udßlosti, vΦetn∞ chybn²ch rozhodnutφ vedoucφch nap°. k poÜkozenφ lodi, z denφku transakcφ nad databßzφ lze poÜkozenou databßzi ve v∞tÜin∞ p°φpad∙ dokonce rekonstruovat. Denφk transakcφ (nebo tΘ₧ ₧urnßl) tedy slou₧φ jako prost°edek k akcφm, kterΘ zajiÜ¥ujφ zotavenφ z chyb. Nelze ho samoz°ejm∞ pou₧φt pro vÜechny mo₧nΘ druhy chyb. ObvyklΘ jde o chyby typu spadnutφ systΘmu vedoucφ ke ztrßt∞ obsahu vnit°nφ pam∞ti. Stav transakce se v p°φpad∞ chyby systΘmu stane nedefinovan² a je nutnΘ po restartu systΘmu pou₧φt operaci ROLLBACK. Dßle m∙₧e b²t nutnΘ provΘst po restartu systΘmu znovu ty transakce, kterΘ byly ·plnΘ p°ed zapoΦetφm chyby systΘmu (Φas tf), ale kterΘ nebyly dokonΦeny fyzicky (nap°. nedoÜlo k odeslßnφ obsahu buffer∙ na disk).

Vyvolßnφ operace COMMIT nebo ROLLBACK zaklßdß tzv. synchronizaΦnφ body tj. hranice mezi dv∞ma po sob∞ nßsledujφcφmi transakcemi (dalÜφ a poslednφ operacφ zaklßdajφcφ synchronizaΦnφ bod je inicializace programu). V praxi ovÜem rozeznßvß SZT po₧adavky na znovuprovedenφ transakcφ pomocφ kontrolnφch bod∙ (checkpoints), kterΘ jsou pro dan² ·Φel vhodn∞jÜφ ne₧ synchronizaΦnφ body. V mechanismu synchronizaΦnφch bod∙ toti₧ krßtkΘ transakce Φekajφ na provedenφ delÜφch transakcφ.

Kontrolnφ body se vytvß°ejφ v jist²ch intervalech provßd∞nφ transakcφ automaticky - zahrnujφ odeslßnφ obsahu buffer∙ na disk a zßpis kontrolnφho zßznamu (checkpoint record) do ₧urnßlu. Tento zßznam m∙₧e nap°. obsahovat seznam vÜech transakcφ, kterΘ se v dob∞ kontrolnφho bodu provßd∞ly, tj. zapoΦaly a nebyly ukonΦeny (stav C, tj. potvrzenφ neboli provedenφ COMMIT). Kontrolnφ body jsou zvlßÜ¥ vhodnΘ, pracuje-li se s delÜφmi transakcemi.

KlφΦovΘ mφsto prßce s transakcemi je mezi stavem PC (ΦßsteΦnΘ potvrzenφ) a C. Abychom zajistili vstup do stavu C, je mo₧nΘ pou₧φt jednu ze dvou nejznßm∞jÜφch strategiφ: odklßdanß aktualizace a bezprost°ednφ aktualizace.

V prvnφm p°φpad∞ se neprovßdφ aktualizace databßze d°φve, pokud transakce nedosßhne stavu PC. V p°φpad∞ chyby p°ed tφmto okam₧ikem, nesmφ b²t databßze zm∞n∞na. P°φpadn∞ je nutnß operace REDO provßd∞jφcφ efekty operacφ pomocφ ₧urnßlu, kde jsou obsa₧eny vÜechny pot°ebnΘ informace

U bezprost°ednφch aktualizacφ je databßze aktualizovßna p°ed dosa₧enφm stavu PC. Zotavenφ databßze v p°φpad∞ chyby do stavu p°ed zapoΦetφm transakce (operace ROLLBACK) je pak mo₧nΘ ze ₧urnßlu, proto₧e ka₧dß zm∞na do n∞j byla p°ed aktualizacφ zahrnuta.

Transakce tedy je jak jednotkou prßce, tak jednotkou zotavenφ z chyb. Nap°. po provedenφ COMMIT musφ b²t zajiÜt∞no, ₧e veÜkerΘ zm∞ny byly skuteΦn∞ realizovßny (nap°. obsah buffer∙ byl p°esunut na disk). Tedy i ₧urnßl musφ b²t aktualizovßn p°ed vydßnφm signßlu COMMIT. Pro ob∞ strategie si budeme p°edstavovat ₧urnßl jako neuspo°ßdan² sekvenΦnφ soubor.

(1) Tvorba ₧urnßlu s odlo₧en²mi realizacemi zm∞n

B∞hem provßd∞nφ transakce T jsou vÜechny operace WRITE odlo₧eny do okam₧iku, ne₧ se transakce dostane do stavu PC. VÜechny zm∞ny jsou zapisovßny do ₧urnßlu, jeho₧ zßznamy obsahujφ trojice <T, jmΘno-atributu, novß-hodnota>

Na poΦßtku provßd∞nφ transakce T se do ₧urnßlu zapφÜe zßznam <T, START>, ve stavu PC <T, COMMIT>. Teprve potom dochßzφ k zßpisu zm∞n do databßze. Dojde-li k chyb∞ v Φase tf p°ed dosa₧enφm PC, staΦφ informaci v ₧urnßlu ignorovat a spustit RESTART (mo₧nost vzniku novΘ transakce). V p°φpad∞ chyby, kdy tf je za poΦßtkem stavu PC, jsou zßznamy ₧urnßlu k dispozici pro provedenφ operace REDO(T), kterß vyu₧ije zßznam∙ mezi <T,START> a <T,COMMIT>.

Z°ejm∞ i p°i procesu zotavenφ ale m∙₧e dojφt k chyb∞. Existenci ₧urnßlu a co nejv∞tÜφ jistotu pro mo₧nost rekonstrukce docφlφme nap°. vytvß°enφm kopiφ ₧urnßl∙ na magnetick²ch pßskßch Φi discφch. Jde op∞t o jistou transakci, o nφ₧ se vedou informace v ₧urnßlu. M∞lo by platit, ₧e dalÜφ provedenφ REDO by m∞lo vΘst ke stejnΘmu v²sledku, jako zotavenφ po prvnφm REDO (hovo°φ se o idempotenci operace REDO).

Uveden² postup zobrazen² na jednΘ transakci se snadno zobecnφ do vφceu₧ivatelskΘho prost°edφ, co₧ souvisφ obecn∞ s faktem, ₧e ka₧dß metoda zotavenφ z chyb je obvykle spjata s °φzenφm paralelismu. Platφ, ₧e Φφm vyÜÜφ je stupe≥ paralelismu, tφm obtφ₧n∞jÜφ je zotavenφ z chyb. Nap°. p°i pou₧itφ dvoufßzovΘho uzamykacφho protokolu jsou objekty uzamknuty a₧ do dosa₧enφ stavu C, teprve pak jsou uvoln∞ny. Nedochßzφ zde takΘ k dominovΘmu efektu, nenφ toti₧ po₧adovßn ROLLBACK transakcφ.

(2) Tvorba ₧urnßlu s bezprost°ednφ realizacφ zm∞n

Oproti (1) se provßd∞jφ vÜechny operace WRITE p°φmo a v ₧urnßlu se dr₧φ krom∞ zßznam∙ obsahujφcφch START Φi COMMIT Φtve°ice

<T, jmΘno-atributu, starß-hodnota, novß-hodnota>

Umφst∞nφ zßznamu do ₧urnßlu se musφ provΘst p°ed WRITE(X) a p°ed fyzickou zm∞nou databßze (provedenφ OUTPUT(X)). Uveden² protokol se takΘ n∞kdy naz²vß angl. protokol write-ahead.

V p°φpad∞ zhroucenφ systΘmu je mo₧nΘ pomocφ ₧urnßlu uvΘst databßzi po fyzicky nedod∞lan²ch transakcφch do p∙vodnφho konsistentnφho stavu. Zotavenφ z chyby se provßdφ krom∞ operace REDO(T) pomocφ operace UNDO(T), kterß nßvrat do stavu p°ed transakcφ umo₧≥uje.

Obrßzek 1 ukazuje jednotlivΘ mo₧nΘ p°φpady transakcφ k Φasu tf (Φas chyby systΘmu) a Φasu tc (poslednφ zßpis kontrolnφho zßznamu a odeslßnφ obsahu buffer∙ na disk).

  • transakce T1 byla ukonΦena p°ed Φasem tc,
  • transakce T3 zaΦala p°ed Φasem tc a byla ukonΦena po Φase tc a p°ed Φasem tf,
  • transakce T2 zaΦala takΘ p°ed okam₧ikem tc, ale nebyla ukonΦena v Φase tf,
  • transakce T4 zaΦala za okam₧ikem tc a byla ukonΦena p°ed okam₧ikem tf,
  • transakce T5 zaΦala za okam₧ikem tc, ale nebyla ukonΦena v okam₧iku tf.

 

 

 

 

 

 

Φas

T1


T2

T3

T4


T5

kontrolnφ bod Φas chyby

Φas tc systΘmu tf

Obr. 1 Transakce v okam₧iku chyby systΘmu

Uva₧ujme na chvφli strategii (2) zotavenφ z chyb. V p°φpad∞ restartu systΘmu, musφ b²t databßze po transakcφch T2 a T5 uvedena do p∙vodnφho stavu (operace UNDO). Transakce T3 a T4 musφ b²t provedeny znova (operace typu REDO). Transakce T1 se po restartu neuva₧uje v∙bec, proto₧e jejφ operace byly fyzicky v Φase tc ji₧ realizovßny. Po restartu systΘmu se SZT v transakcφch zorientuje podle nßsledujφcφ procedury:

1. Vytvo°φ se dva seznamy transakcφ zvanΘ UNDO a REDO. Do seznamu UNDO se ulo₧φ vÜechny transakce z kontrolnφho zßznamu. Seznam REDO bude prßzdn².

2. ZaΦne prohledßvßnφ ₧urnßlu od okam₧iku tc sm∞rem dop°edu.

3. Narazφ-li se na zaΦßtek dalÜφ transakce T, p°idß se T do seznamu UNDO.

4. Je-li v ₧urnßlu nalezen COMMIT pro transakci T, odstranφ se T ze seznamu UNDO a p°evede se do seznamu REDO.

5. Na konci ₧urnßlu obdr₧φme seznamy UNDO a REDO (kterΘ pro obrßzek 1 obsahujφ transakce T2 a T5, resp. T3 a T4).

Nynφ je mo₧nΘ p°ejφt k zotavenφ po chyb∞.

6. SZT zpracovßvß zp∞tn²m chodem v ₧urnßlu transakce z UNDO seznamu a potom, chodem vp°ed, transakce z REDO seznamu. Po ukonΦenφ procedury je teprve mo₧nΘ pokraΦovat v normßlnφ prßci systΘmu.

Pro strategii (1) zotavenφ z chyb samoz°ejm∞ operace UNDO nejsou pou₧ity. V p°φpad∞ na obrßzku 1 by se pro transakce T2 a T5 pouze odstranila jistß Φßst zßznam∙ ze ₧urnßlu.

Zotavenφ po chyb∞ mΘdiφ znamenß obvykle natßhnutφ celΘ databßze ze zßlo₧nφ kopie (BACKUP) a pak pou₧itφ ₧urnßlu k znovuprovedenφ vÜech ukonΦen²ch transakcφ od toho okam₧iku, kdy jeÜt∞ ₧urnßl poskytuje pot°ebnΘ informace. Nenφ t°eba d∞lat ₧ßdnΘ akce UNDO pro transakce provßd∞nΘ v Φase tf, proto₧e vÜechny odpovφdajφcφ zm∞ny v databßzi byly tak jako tak ztraceny. Zßlo₧nφ kopie se vytvß°ejφ na levn∞jÜφ mΘdium, nap°. jednou za den na magnetickou pßsku v minimßln∞ jednΘ kopii.

V p°φpad∞ katastrofy se pou₧ije poslednφ kopie databßze, transakce mezi provßd∞nΘ po vzniku tΘto kopie jsou ztraceny. Zßlohuje se tedy i ₧urnßl. Je podstatn∞ menÜφ ne₧ kopie databßze a m∙₧e b²t zßlohovßn Φast∞ji.



<seznam dφl∙ serißlu>   <COMPUTERWORLD>