Helsingin yliopisto/tktl Tietokannan hallinta, kevät Harri Laine 1 D B. Transaktionhallinta. Transaktionhallinta. Transaktionhallinta

Samankaltaiset tiedostot
D B. Transaktionhallinta

Elvytys. R & G Chapter Tietokannan hallinta, kevät 2006, J. Li 1

5. Tapahtumien hallinta. Esim. pankkitilisovelluksen proseduuri tilisiirto(t1, t2, x), joka siirtää x mk tililtä t1 tilille t2:

Transaktionhallinta. R & G Chapter Tietokannan hallinta, kevät 2006, J. Li 1

Transaktionhallinta. Transaktionhallinta. Transaktionhallinta. R & G Chapter 17

HELIA 1 (14) Outi Virkki Tiedonhallinta

HAAGA-HELIA Heti-09 1 (14) ICT05: Tiedonhallinta ja Tietokannnat O.Virkki Transaktionkäsittely

Tietokantarakenteet ja -algoritmit 3. harjoitus

Tietohakemisto ja Transaktionkäsittely

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Lisätään avainarvo 6, joka mahtuu lehtitasolle:

IIO30220 Database Management / Tietokannan hallinta TAPAHTUMIEN HALLINTA JOUNI HUOTARI ( )

D B. Transaktionhallinta - samanaikaisuus. Transaktionhallinta - samanaikaisuus. Transaktionhallinta - samanaikaisuus

Helsingin yliopisto/tktl Tietokannan hallinta, kevät Harri Laine 1 D B. Transaktionhallinta - samanaikaisuus

Samanaikaisuuden hallinta. tietokantapalvelimessa. Tiedonhallintaa. Alkuper. versio: Jaakko Rantanen Pieniä korjauksia: Jouni Huotari 26.2.

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen

Lisätään avainarvo 1, joka mahtuu lehtitasolle:

Samanaikaisuuden hallinta. Optiot transaktionaalisissa työnkuluissa

Transaktioiden peruutus ja tietokannan elvytys häiriöstä

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Lokin ylläpito ja puskurinhallinta

Tietokantarakenteet ja -algoritmit 6. harjoitus

HELIA TIKO-05 SQL-TRANSAKTIOT 1 ( 12) ICT03D Tieto ja tiedon varastointi

CSE-A1200 Tietokannat

D B. Transaktionhallinta - samanaikaisuus

Tietokanta (database)

D B. Tietokannan hallinta kertaus

CS-A1150 Tietokannat CS-A1150 Tietokannat / 47

TIEDONHALLINTA - SYKSY Luento 12. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto

[c] What is the difference between a modified page and a dirty page? Mitä eroa on päivitetyllä sivulla ja likaisella sivulla?

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

Transaktiot - kertausta

R 2 [0] ei ole likainen luku, sillä avaimelle 0 on jo palautettu sen alkuperäinen arvo.

D B. Tiedostojen käsittely

Tietokannan hallintajärjestelmän (DBMS) palvelut ja rakenne

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Looginen tietokanta ja transaktiot

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

5.2 Samanaikaisuuden hallinta

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Sivupalvelin- ja yhteislevyjärjestelmät

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

TIETOKANTOJEN PERUSTEET MARKKU SUNI

2 Konekieli, aliohjelmat, keskeytykset

D B. Tietokannan hallinta - kurssin tavoite. Kurssilla opitaan periaatteet. Edellytyksenä osallistumiselle on Tietokantojen perusteiden hallinta

T Transaktionhallinta tietokantajärjestelmissä

Muita transaktioiden hallintamenetelmiä

Tiedonhallintajärjestelmän rakenne ja Suorituskyky

OPI-Maksut - Käyttötapaukset

Maiju Mykkänen Susanna Sällinen

Hajautettujen transaktioiden hallinta

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

Tiedostorakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

HELIA 1 (15) Outi Virkki Tiedonhallinta

KServer Etäohjaus Spesifikaatio asiakaspuolen toteutuksille

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Tietokantarakenteet ja -algoritmit Harjoitukset 1-12

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Visma Avendon asennusohje

Samanaikaisuuden hallinta Snapshot Isolationin avulla

Sisältö. Tosiaikajärjestelmät Luento 11: Tosiaikatietokannat. Abstrakti tietokantamalli. Tietoalkio ACID. Transaktion tilat. Abstrakti tietokantamalli

Tosiaikajärjestelmät Luento 11: Tosiaikatietokannat

Web-palveluiden transaktionaalinen koostaminen

Algoritmit 2. Luento 5 Ti Timo Männikkö

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Kortinhaltijat joilla on maksukeskeytys Maksuryhmään liitettyjen kortinhaltijoiden lukumäärä, joiden maksut ovat tilapäisesti keskeytetty.

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito

Tulosta yrityksesi tuloslaskelma ja tase myöhempää tarkastusta varten. Ota varmuuskopio tilanteesta ennen tilimuunnosta.

VARASTOINTI / INVENTOINTI

Ohjelmoinnin perusteet Y Python

12. Javan toistorakenteet 12.1

811120P Diskreetit rakenteet

Versionhallinta MIKSI?

HELIA 1 (14) Outi Virkki Tiedonhallinta

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Makrojen mystinen maailma lyhyt oppimäärä

Algoritmit 2. Luento 13 Ti Timo Männikkö

HELIA 1 (11) Outi Virkki Tiedonhallinta

12. Javan toistorakenteet 12.1

Tietojärjestelmä tuotantoympäristössä. Sovellusohjelmat Helsingin ammattikorkeakoulu Stadia / Tekniikka ja liikenne Vesa Ollikainen

Tietokantakurssit / TKTL

Versionhallinta MIKSI?

17 BUDJETOINTI. Asiakaskohtainen Budjetti Ylläpito-ohjelma. Dafo Versio 10 BUDJETOINTI. Käyttöohje. BudgCust Yleistä

11. Javan toistorakenteet 11.1

Luento 2: Tiedostot ja tiedon varastointi

MS-A0402 Diskreetin matematiikan perusteet

Transkriptio:

(transaction management) on keskeinen tekijä tietokannan samanaikaisen käytön ja virheistä toipumisen kannalta. Useat prosessit voivat käsitellä tietokantaa samanaikaisesti Jos tietokoneessa on vain yksi prosessori, samanaikaiset prosessit toimivat limittäin (interleaved) ja jakavat prosessorikapasiteettia. Jos koneessa on monta prosessoria, prosessit voivat toimia aidosti yhtä aikaa eri prosessoreilla (parallel). Jatkossa tarkastellaan limittäisyyteen perustuvaa samanaikaisuutta. Tietokantatransaktio on tietokantaa käsittelevä prosessin osa, jonka vaikutusten halutaan muodostavan yhden jakamattoman (atomisen) kokonaisuuden. voi sisältää hakuja, lisäyksiä, poistoja muutoksia Esim. pankkitilisovelluksen proseduuri tilisiirto(t1, t2, x), joka siirtää x mk tililtä t1 tilille t2: begin transaction update tili set saldo=saldo-x where tilinro=t1; update tili set saldo=saldo+x where tilinro=t2; insert into tilitapahtumat values (pvm, time, siirto, x, t1, t2,...); commit; end transaction; 1 2 Esimerkissä jakamattomuus merkitsee sitä, että kaikki 3 tietokantaoperaatiota suoritetaan eikä vain osaa niistä Miksei sitten suoritettaisi? Käsittelyssä voi sattua häiriöitä missä vaiheessa tahansa. Nämä voivat johtua ulkoisista syistä tai olla tkhj:n itse aiheuttamia, jotta se voisi jatkaa toimintaansa (esim. syntyy lukkiutuma, joka pitää purkaa) Voisi siis käydä siten, että tilin t1 sivu on kirjoitettu levylle ja tilin t2 sivu jää kirjoittamatta tällöin operaatio ei olisi jakamaton Tietokantatransaktioilta edellytetään 4 perusominaisuutta (ACID vaatimukset): Atomisuus (atomicity)= jakamattomuus: kaikki transaktion tietokantamuutokset suoritetaan tai ei mitään niistä. Eheyden säilyttäminen (consistency): transaktio siirtää tietokannan ehyestä tilasta toiseen ehyeen tilaan. Ehyt tila on tila, jossa tietokantaan liittyvät eheysehdot ovat voimassa. Tämän vaatimuksen toteutuminen on käyttäjän vastuulla. 3 4 Eristyvyys (isolation) Muut samanaikaiset transaktiot eivät sotke transaktion suoritusta. Transaktio suoritetaan ikään kuin muita samanaikaisia transaktioita ei olisikaan. Transaktion kannalta näyttää siltä, että kaikki muut transaktiot on suoritettu joko ennen sitä tai sen jälkeen. Pysyvyys (durability) Kun tkhj ilmoittaa käyttäjälle, että transaktio on menestyksekkäästi päätetty, sen tekemät muutokset tietokantaan jäävät voimaan (kunnes jokin toinen transaktio ne kumoaa). Mikään häiriö ei niitä hävitä. 5 Tarkastellaan tilisiirto (1234, 5678, 5000) tapahtuman operaatiota: 1. transaktion aloitus(pyyntö) begin 2. lukuoperaatioita tietohakemiston sivuihin 3. lukuoperaatioita tili-taulun tilinumeropohjaiseen indeksiin 4. luetaan puskuriin b se tili-taulun sivu p, jossa on tilin 1234 rivi --- ohjelmallisesti varsinainen tililtäotto ja siihen mahdollisesti liittyvät tarkistukset + lisätoimet --- 5. kirjoitetaan muutetun rivin sisältö sivulle p 6.-9. vastaavat operaatiot tilin 5678 sivulle (tilillepano) 10. lukuoperaatioita tietohakemistoon 11. luetaan tilitapahtuma-taulun viimeinen sivu (oletetaan, että rakenne on kasa) 12. lisätään tilitapahtuma tietue tilitapahtumasivulle 13. transaktion sitoutumispyyntö (commit). 6 Harri Laine 1

Yleisesti kannan käsitttely muodostuu luku- ja kirjoitusoperaatioista read(x,v) lukee tietoalkion X muuttujaan v write(x,v) kirjoita tietoalkio X muuttujasta v read(x,v): Selvitä X:n sisältävän sivun osoite p Pyydä puskurienhallintaa lataamaan sivu p (lukee sivun, jos se ei ole jo jossain puskurissa). Puskurienhallinta naulitsee sivun puskuriin (fix) ja palauttaa puskurin osoitteen b Kopioi tietoalkio X puskurista b muuttujaan v Ilmoita puskurienhallinnalle sivun vapautuksesta (unfix) 7 8 write(x,v) Selvitä X:n sisältävän sivun osoite p Pyydä puskurienhallintaa lataamaan sivu p muutosta varten (lukee sivun, jos se ei ole jo puskurissa). Puskurienhallinta naulitsee sivun puskuriin (fix) ja palauttaa puskurin osoitteen b Kopioi tietoalkio X muuttujasta v puskuriin b Ilmoita puskurienhallinnalle sivun muuttamisesta ja vapautuksesta (unfix) Puskurienhallinta kirjoittaa aikanaan muuttuneet sivut levylle. Sekä lukuun että kirjoitukseen liittyy yllä kuvatun lisäksi samanaikaisuuden hallintaan liittyviä toimia (lukituksia) 9 Transaktion sisäisiä vaiheita hallitaan määrittelemällä transaktion tilasiirtymämalli ja seuraavat tilat: 1. alkutila: transaktio syntyy (generoidaan) - transaktiolle annetaan oma tunniste, jne. 2. aktiivinen: transaktio suorittaa varsinaisia operaatioitaan (read(), write() ) 3. osittain sitoutunut (partially committed): transaktion ohjelmakoodi on suoritettu ja se on pyytänyt sitoutumista (commit-operaatiolla) 10 4. sitoutunut (committed): tkhj on vahvistanut transaktion tietokantaan tekemät muutokset pysyviksi eli sitoutuminen on onnistunut Tietokannan muutokset eivät ole enää peruttavissa (ilman uutta transaktiota). Tiedot eivät kuitenkaan ole välttämättä levyllä asti (vahvistus on vain looginen ), kuitenkin vastaava lokitieto on tässä vaiheessa levyllä 5. epäonnistunut (failed): sitoutuminen on epäonnistunut (esim. samanaikaisuuden hallintaan liittyvien tarkistusten takia) tai transaktio itse on suorittanut keskeytysoperaation rollback (abort) 6. keskeytetty: epäonnistunut transaktio on peruutettu eli tietokanta on palautettu ennen transaktion aloitusta vallinneeseen tilaan 7. päättynyt (terminated): transaktion olemassaolo lakkaa 11 12 Harri Laine 2

Keskeytetty transaktio voidaan aloittaa uudelleen päättynyttä ei voida. Alla tilasiirtymäkaavio read, write alkutila uudelleenaloitus begin keskeytetty aktiivinen rollback pyyntö commit pyyntö epäonnistunut rollback toteutus osittain sitoutunut commit hylätty commit hyväksytty sitoutunut päättynyt 13 SQL:ssä transaktio päätetään normaalisti commit-lauseella. Samalla commit aloittaa uuden transaktion. Joissain ympäristöissä (esim. sulautettu SQL) voi käyttää myös begin transaction ja end transaction lauseita. Transaktion voi lopettaa myös rollback-lauseella. Rollback peruuttaa pääsääntöisesti koko transaktion. Osittainen peruutus saatavissa aikaan jatkoaloituskohdilla (savepoint) 14 commit; muutoksia 1 /* tallenna tilanne, nimeä kohta = p1 */ savepoint p1; muutoksia 2 /*peruuta transaktiossa pisteeseen p1, muutoksia 1 säilyy */ rollback to savepoint p1; 15 Samanaikaisten toimintojen salliminen ja häiriöiden vaikutusten eliminointi muodostavat monimutkaisen toiminnallisen kokonaisuuden. Pelisääntönä on karkeasti se, että samanaikaisuutta rajoitetaan vain niin paljon, ettei normaalitilanteessa jouduta usein korjaamaan samanaikaisuudesta aiheutuneita (tulossa olevia) vaurioita. Rajoituskeinoja: lukitaan tietoalkioita muilta lukoilla (lock); pitkä lukinta-aika rajoittaa hankalasti muiden transaktioiden etenemistä; voi syntyä lukkiutuma, jolloin mikään transaktio ei pääse etenemään optimistiset menetelmät: annetaan mennä; tarkistetaan; korjataan, jos tarpeen 16 Transaktioloki (transaction log): Transaktioloki on keskeinen transaktionhallinnan väline Kaikki transaktioiden suorittamat operaatiot kirjataan lokiin, johon mm. häiriöiden korjaus (tietokannan elvytys) perustuu. Loki (log) on peräkkäistiedosto, jonne viedään tapahtuman aloituskirjauksia (start,t) muutoskirjauksia (write,t,x,v,u): tapahtuma T on muuttanut tietoalkion x vanhan arvon v (alkukuva, before image) uudeksi arvoksi u (jälkikuva, after image) sitoutumiskirjauksia (commit,t): tapahtumaan T on sitouduttu keskeytyskirjauksia (abort,t): tapahtuma T on peruttu tarkistuspisteitä (checkpoint) [ lukukirjauksia (read,t,x) ei tarvita elvytyksessä] 17 18 Harri Laine 3

Jokaisella lokikirjauksella on yksikäsitteinen tunnus (log sequence number, LSN) Lokin muutoskirjauksessa esiintyvä tietoalkio x voi olla periaatteessa mitä tahansa yksittäisestä merkistä koko sivuun. Tyypillisiä: Sivu loki kasvaa suureksi Relaation rivi lokitiedosto vie vähemmän tilaa kuin kokonaisten muutettujen sivujen kirjaus. Rivin tunnustiedot +tietoalkion tunnustiedot + tietoalkion arvo vielä vähän tilaa, mutta käsittely työläämpää Lokitiedostoa käsitellään kuten muitakin tiedostoja, ts. lokitietue viedään ensin puskurisivulle, sitten aikanaan esim. puskurisivun täyttyessä tai viimeistään transaktion sitoutuessa levylle. lokitietueet voidaan myös pakkokirjoittaa levylle (kirjoitetaan välittömästi) Häiriön sattuessa vain levyllä oleva lokin osa on varmuudella käytettävissä. Yleensä lokin käytettävyyttä varmistetaan vielä levyvirheiden varalta esimerkiksi useamman tiedoston vuorottelulla, ja varmistamalla levyllä oleva loki ajoittain nauhalle (tai toiselle levy-yksikölle)). 19 20 Samaan tapahtumaan liittyvät lokitietueet voidaan kytkeä ketjuksi: prevlsn prevlsn= osoitin edelliseen saman transaktion lokitietueeseen Puskurien sisällön viennissä levylle on erilaisia periaatteita: välitön päivitys (immediate update): sivut viedään levylle ennen niitä muuttaneiden tapahtumien sitoutumista viivästetty päivitys (deferred update): sivut viedään levylle vasta niitä muuttaneiden tapahtumien sitoutumisen jälkeen pakotettu (forced): tehdään heti vapaasti (no-force): tehdään viimeistään kun puskuritilaa tarvitaan muuhun käyttöön. Muut transaktiot voivat käyttää puskurissa olevaa muuttunutta tietoa, ilman levyhakuja 21 22 Kirjoitus puskurista levylle voi olla tarpeen puskurin vapauttamiseksi muuhun käyttöön Välitön päivitys voi sallia puskurin varastamisen (frame stealing), eli sivu viedään puskurista levylle ennen kuin muutokseen on sitouduttu ja puskuri annetaan toisen sivun käyttöön. Levylle viety data on likaista (dirty), muuttuen puhtaaksi vasta kun muutoksen aiheuttaneeseen tapahtumaan on sitouduttu. Likaisen datankin luku voidaan kontrolloidusti sallia. 23 Commit-pyynnön toteuttaminen aiheuttaa tkhj:ssa joukon samanaikaisiin transaktioihin liittyviä tarkistuksia. Sitoutuminen tehdään ns. sitoutumiskäytännön (commit protocol) mukaisesti: kirjoitetaan lokiin sitoutumismerkintä (commit, T) pakkokirjoitetaan loki levylle (kirjoitetaan levylle kaikki lokin sivut, jotka ovat toistaiseksi vasta puskureissa) vapautetaan transaktion T mahdollisesti varaamat resurssit (mm. samanaikaisia toimintoja säätelevät lukot transaktion käsittelemiin tietoalkioihin). kuitataan sitoutuminen tehdyksi Huom. Lokitietue viedään levylle aina ennen dataa. Tätä sanotaan WAL-käytännöksi (write-ahead-logging), ja sitä noudatetaan myös kirjoitettaessa tietosivuja levylle välittömän päivityksen menetelmällä. 24 Harri Laine 4

Rollback-pyynnön toteutus aiheuttaa tapahtuman tekemien muutosten peruutuksen Käydään läpi lokista löytyvät peruttavaan transaktioon liittyvät kirjoitusmerkinnät lopusta alkuun (siis ketjua pitkin) ja korvataan kukin tietoalkio alkukuvallaan. Kirjoitetaan lokiin keskeytysmerkintä (abort) Jos jokin toinen transaktio olisi lukenut sellaisen tietoalkion arvon, joka peruutuksessa korvautuu vanhalla arvolla, pitäisi myös tämä toinen transaktio perua (ns. cascading rollback, vyöryvä peruutus) käytännössä näin ei kuitenkaan käy, sillä tapahtumille hyväksytään vain sellaisia suoritusjärjestyksiä, joissa tämä vältetään. Tarkistuspiste (checkpoint) Tarkistuspisteessä viedään levylle asti kaikki puskureissa olevat tietokantasivujen päivitykset Tarkistuspiste sisältää seuraavat toiminnot: 1. estetään väliaikaisesti transaktioiden suoritus 2. pakkokirjoitetaan kaikki transaktioiden päivittämät sivut puskurista levylle 3. kirjoitetaan lokiin tarkistuspistekirjaus ja pakkokirjoitetaan loki levylle 4. sallitaan transaktioiden jatkaa suoritustaan 25 26 - elvytys Transaktioiden estäminen ja vaiheen 2 kesto voivat hidastaa normaalitoimintaa. Vaiheiden 2 ja (3, 4) järjestys voidaan vaihtaa, kun säilytetään edellinen loppuun suoritettu tarkistuspiste (viimeisenä virallisena), kunnes kaikki sivut ovat levyllä. Tarkistuspisteiden taajuus on tietokannan hoitajan päätettävissä. Järkevä taajuus riippuu tietokannan päivitystiheydestä ja häiriöalttiudesta: esim. 4 kertaa tunnissa tai kun tietty määrä transaktioita on sitoutunut edellisen tarkistuspisteen jälkeen. Transaktion jakautumattomuus tai pysyvyys voi vaarantua monen häiriötilanteen takia: Tietokonejärjestelmä romahtaa (system crash) laitteisto-, ohjelmisto- tai tietoliikennevirheen takia. Yleensä keskusmuistin (tietokantapuskurien) sisältöä menetetään. Yksittäisen transaktion suoritus keskeytyy ohjelman poikkeustilanteen (nollalla jako tms.) tai loogisen ohjelmavirheen takia. Käyttäjä voi myös keskeyttää kyselyn suorituksen väkivalloin. 27 28 - elvytys - elvytys Transaktion suoritus keskeytetään hallitusti esim. transaktion (proseduurin) koodissa suoritetaan jonkin ehdon seurauksena rollbackpyyntö. Jos ei esimerkiksi ei löydy transaktion tarvitsemaa syötettä tai se on virheellinen. Samanaikaisuuden hallinnan alijärjestelmä joutuu keskeyttämään transaktion, jotta muut transaktiot voisivat edetä (lukkiutuma tai jokin lievempi suoritusjärjestykseen liittyvä häiriö). Levyvirhe on turmellut levyn sisältöä. (harvinaista) Ulkopuolinen häiriötekijä (operointivirhe,, sähkökatko) keskeyttää transaktion. (harvinaista) Yllä olevien kohdalla elvytys voi sisältää edellisen varmuuskopion (ajanhetkeltä t) käyttöönoton Lokin avulla voidaan mahdollisesti suorittaa uudelleen (redo) hetken t ja häiriöajankohdan välillä suoritetut toiminnot Varmuuskopion ja lokin tulisi olla esim. nauhalla tallessa (levyvirhe ). 29 30 Harri Laine 5

- elvytys - elvytys Lokiin perustuvan elvytyksen periaatteet: peruutetaan (undo) ne muutokset, joita keskeytyneet transaktiot ovat tehneet levyille suoritetaan uudelleen (redo) sellaisten sitoutuneiden transaktioiden suorittamat tietokantapäivitykset, joita ei häiriön sattuessa ollut ehditty kirjoittaa levylle (vaan vasta puskurissa olevaan sivuun) Normaalitilanteessa undo- ja redo-toimet kohdistuvat siihen tietokannan tilaan, joka oli häiriön sattuessa voimassa (ei aikaisempaan varmuuskopioon). Lokin (ja mahdollisesti muiden tietojen) avulla etsitään, mitä pitää tehdä. Varmuuskopioita tarvitaan aika harvoin... 31 Elvytys voi tapahtua eri tavoin riippuen siitä, mitä on tehty valmiiksi häiriön sattuessa ei ole tehty mitään tieto viety levylle muutos kirjattu vain puskuriin 32 - elvytys - elvytys Loki sitoutumisessa: Transaktio T on sitoutunut silloin ja vain silloin, kun lokista löytyy sille sitoutumismerkintä (commit, T) Levyllä olevien lokitietueiden perusteella selviää, mitkä transaktiot olivat häiriön sattumishetkellä sitoutuneita ja mitkä kesken mitä on kirjoitettu (+ vanha arvo): write-tietue Yleinen lokiin perustuva elvytysalgoritmi: 1. Luetaan lokia levyltä ja muodostetaan kaksi transaktiolistaa: Keskeneräiset = transaktiot, joille on lokissa aloituskirjaus (start), mutta ei sitoutumiskirjausta (commit) eikä viimeistä tarkistuspistettä edeltävää keskeytyskirjausta (abort) keskeytyskirjaus ennen tarkistuspistettä: muutosten peruutukset on merkitty puskuriin ja huomattu tarkistuspisteessä 33 Sitoutuneet = transaktiot, joille on lokissa sitoutumiskirjaus viimeisen tarkistuspisteen jälkeen 34 - elvytys - elvytys 2. Perutaan Keskeneräiset-listan transaktioiden kirjoitusoperaatiot selaamalla lokia lopusta alkuun päin: jokaista löytyvää muutoskirjausta (write,t,x,vanha,uusi) kohti suoritetaan operaatio write(x, vanha) (palautetaan tietoalkion x alkukuva voimaan) 3. Uusitaan Sitoutuneet-listan transaktioiden kirjoitusoperaatiot selaamalla lokia alusta loppuun päin: jokaista löytyvää muutoskirjausta (write,t,x,vanha,uusi) kohti suoritetaan operaatio write(x, uusi) (saatetaan siis tietoalkion jälkikuva uudelleen voimaan) 35 Esimerkki. Olkoon levyllä oleva lokin sisältö häiriötilanteessa seuraava 1: (start, T1) 2: (start, T2) 3: (write, T1, x1, AAA, BBB ) 4: (commit, T1) 5: (write, T2, X1, BBB, CCC ) 6: (checkpoint) 7: (write, T2, x2, 0000, 1111 ) 8: (start, T3) 9: (commit, T2) 10: (write, T3, x1, CCC, DDD ) 11: (write, T3, x2, 1111, 2222 ) Elvytysalijärjestelmä lukee lokia levyltä ja muodostaa listat Kesk = <T3>, Sit = <T2> peruu transaktion T3 operaatiot suorittamalla: write(x2, 1111 ) (11) write(x1, CCC ) (10) suorittaa uudelleen transaktion T2 operaatiot write(x1, CCC ) (5) write(x2, 1111 ) (7) 36 Harri Laine 6

- elvytys - elvytys Edellä kuvatussa algoritmissa tehdään uusinnan yhteydessä turhia kirjoituksia: ennen tarkistuspistettä suoritettua kirjoitusoperaatiota ei tarvitse uusia (esimerkissä rivi 5), sillä se on tarkistuspisteessä hoidettu levylle. tarkistuspisteen jälkeen tehtyä kirjoitusoperaatiota, jonka tulos on ehtinyt levylle ennen häiriötilannetta, ei tarvitse uusia Tilanne saadaan selville tallentamalla datasivun tunnustietueeseen viimeisen sivulle tehtyä päivitystä vastaavan lokitietueen tunnus (kenttä pagelsn) Myös perumiskirjoitus (undo) voi olla turha, sillä sellaisia kirjoituksia, joiden tulos ei ole ehtinyt levylle, ei tarvitse perua uusimis-/perumiskirjoituksen tarve selviää vertaamalla lokitietueen tunnusta (LSN) ja datasivulla olevaan viimeisimmän päivittäjän tunnusta (pagelsn kenttää): undo tarvitaan, jos LSN <= pagelsn (eli jos muutos on ehtinyt levylle) redo tarvitaan, jos LSN > pagelsn (eli muutos ei ole vielä ehtinyt levylle) 37 Jos pagelsn(x1) = 10, pagelsn(x2) = 7, niin vain write(x1, CCC ) tarvitaan 1: (start, T1) 2: (start, T2) 3: (write, T1, x1, AAA, BBB ) 4: (commit, T1) 5: (write, T2, X1, BBB, CCC ) 6: (checkpoint) 7: (write, T2, x2, 0000, 1111 ) 8: (start, T3) 9: (commit, T2) 10: (write, T3, x1, CCC, DDD ) 11: (write, T3, x2, 1111, 2222 ) Elvytysalijärjestelmä lukee lokia levyltä ja muodostaa listat Kesk = <T3>, Sit = <T2> peruu transaktion T3 operaatiot suorittamalla: {write(x2, 1111 ) (!11<=7)} write(x1, CCC ) (10=10) suorittaa uudelleen transaktion T2 operaatiot {write(x1, CCC ) (!5>10)} {write(x2, 1111 ) (!7>7)} 38 - elvytys Häiriö voi sattua myös kesken elvytyksen Tällöin oleellista on, että elvytysprosessin peräkkäiset suoritukset tuottavat saman tuloksen Edellä kuvattu elvytys ei kirjaa lokiin mitään, joten siinä lähdetään uudelleen liikkeelle samasta lähtötilanteesta, pagelsn kentät sivuilla ovat voineet muuttua, jos sivu on viety levylle, mutta lopputulos on sama. Käytännössä kirjataan peruutusten yhteydessä lokiin yleensä myös kompesaatiomerkintöjä, joista näkee mitä peruutuksia on tehty. Näitä ei kuitenkaan tarvita elvytyksessä. Elvytyksestä on erilaisia muunnelmia riippuen siitä minkälaista puskurien levykirjoituspolitiikkaa käytetään. 39 Harri Laine 7