Looginen tietokanta ja transaktiot

Samankaltaiset tiedostot
T Transaktionhallinta tietokantajärjestelmissä

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

Tietokantarakenteet ja -algoritmit 6. harjoitus

Transaktioiden eristyvyys

Tietokantarakenteet ja -algoritmit 3. harjoitus

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

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

Tietokannan eheysrajoitteet ja niiden määrittäminen SQL-kielellä

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

Transaktioiden peruutus ja tietokannan elvytys häiriöstä

HELIA 1 (17) Outi Virkki Tiedonhallinta

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

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen

Samanaikaisuuden hallinta. Optiot transaktionaalisissa työnkuluissa

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Lokin ylläpito ja puskurinhallinta

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

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

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

Tietokantakurssit / TKTL

SQL - STRUCTURED QUERY LANGUAGE

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

TIETOKANTOJEN PERUSTEET MARKKU SUNI

HAAGA-HELIA TIKO-05 1 (19) ICT23a Tietokannan suunnittelu ja toteutus O.Virkki

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Tietokantojen suunnittelu, relaatiokantojen perusteita

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CSE-A1200 Tietokannat

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

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

Relaatiomalli ja -tietokanta

HELIA 1 (14) Outi Virkki Tiedonhallinta

HELIA 1 (12) Outi Virkki Tiedonhallinta

Muita transaktioiden hallintamenetelmiä

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Relaatiomallin peruskäsitteet Harri Laine 1. Relaatiotietokannat DONOTP

Hajautettujen transaktioiden hallinta

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

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

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

HAAGA-HELIA heti09 1 (27) ICT05 Tiedonhallinta ja tietokannat O.Virkki Relaatiomalli

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

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

On autoja, henkilöitä, Henkilöllä on nimi Autolla on omistaja, joka on henkilö. Taulu AUTO(rekno, malli) Taulu HENKILO(nimi, )

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

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 relaatiomalli Harri Laine 1.

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Tietokannanhoitaja DBA (Database Administrator) ja tietokannan hallinta

HELIA 1 (19) Outi Virkki Tietokantasuunnittelu

HELIA TIKO-05 1 (22) ICT03D Tieto ja tiedon varastointi E.Räty, O.Virkki

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

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

Tietomallit. Näkökulmat tietoon. Näkökulmat tietoon. Mitä malleja olisi tarjolla? Abstraktiotasot tiedon käsittelyssä

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

D B. Transaktionhallinta

CSE-A1200 Tietokannat

Tietohakemisto ja Transaktionkäsittely

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

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

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 SQL:n perusteet. Harri Laine 1. SQL tietokantakieli. SQL tietokantakieli

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

Maiju Mykkänen Susanna Sällinen

Helsingin yliopisto/tktl Kyselykielet, s 2006 Relaatiokalkyylit. Harri Laine 1

Tietomallit. Näkökulmat tietoon. Näkökulmat tietoon. Näkökulmat tietoon. Abstraktiotasot tiedon käsittelyssä

Denormalisointia turvallisesti. Ougf syysseminaari Pörssitalo Helsinki Timo Raitalaakso

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

Tietokanta (database)

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

CS-A1150 Tietokannat CS-A1150 Tietokannat / 47

Sivupalvelin- ja yhteislevyjärjestelmät

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

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

Harjoitustehtävä 1. Harjoitustehtävän 1 ratkaisu. Harjoitustehtävä 1. Relaatioalgebra -liitokset (join) Liitos

SELECT-lauseen perusmuoto

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

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Ohjelmoinnin perusteet Y Python

CSE-A1200 Tietokannat

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

SQL-kielen perusteet. Tietokantojen perusteet

Tietokannat II -kurssin harjoitustyö

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Tietokannan eheysrajoitteet ja niiden määrittäminen SQL-kielellä

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 SQL-perusteet. Harri Laine 1. SQL tietokantakieli

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

Tosiaikajärjestelmät Luento 11: Tosiaikatietokannat

3. Taulujen määrittely ja muuttaminen

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

TIETOKANNANHOITAJA DBA (DATABASE ADMINISTRATOR) JA TIETOKANNAN HALLINTA

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

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

Transkriptio:

Looginen tietokanta ja transaktiot A. Silberschatz, H. F. Korth & S. Sudarshan: Database System Concepts. Fifth Edition. McGraw-Hill, 2006, sivut 22 23, luvun 1 (introduction) kohta kohta 1.9 (transaction management); sivut 75 120, luku 3 (SQL); sivut 134 137, luvun 4 (advanced SQL) kohta 4.4 (embedded SQL); sivut 609 615, luvun 15 (transactions) kohdat 15.1 (transaction concept) ja 15.2 (transaction state); sivut 783 786, luvun 20 (database-system architectures) kohta 20.1 (centralized and clientserver architectures). Transaktiopalvelin, s. 2. Looginen tietokanta, s. 4. Loogisen tietokannan eheys, s. 10. Transaktiot, s. 11. Transaktioiden tilat, s. 17. Oikeellinen transaktio, s. 23. Luku-kirjoitusmalli, s. 24. Avainvälimalli, s. 30. Peruutuspisteet ja osittaisperuutus, s. 34. Monirakeisuus, s. 38. 1

Transaktiopalvelin Useimmat relaatiotietokannan hallintajärjestelmät ovat ns. transaktiopalvelimia (transaction server) eli kyselypalvelimia (query server). Transaktiopalvelin tarjoaa liittymän, jonka välityksellä asiakassovellukset voivat lähettää palvelimelle tietokantaoperaatioiden (kyselyiden ja päivitysten) suorituspyyntöjä. Palvelin palauttaa asiakkaalle operaation tuloksen. Pyynnöt voidaan määrittää SQL-kielellä tai erityisellä sovellusohjelmointiliittymällä (esim. JDBC, ODBC tms). Transaktiopalvelinjärjestelmän toimintatapaa kutsutaan transaktionkuljetukseksi (transaction shipping) eli kyselynkuljetukseksi (query shipping) eli funktionkuljetukseksi (function shipping). 2

Palvelimessa toimii yksi tai useampi (yleensä monisäikeinen) palvelinprosessi (server process). Joissakin järjestelmissä käytetään omaa palvelinprosessia kunkin käyttäjän istunnolle (asiakassovelluprosessille). Yleisempi lienee käytäntö, jossa yksi palvelinprosessi palvelee useampaa käyttäjää niin, että kullekin käyttäjälle on osoitettu yksi palvelinprosessin säie (thread). Prosessin kaikki säikeet toimivat rinnakkain samassa virtuaalimuistitilassa. Sovellusprosessin yhteys palvelimeen luodaan sulautettuun SQLkieleen (embedded SQL) kuuluvalla lauseella connect to s, missä s on palvelimen tunniste (verkko-osoite). Lause luo sovellusprosessia palvelemaan uuden säikeen tai osoittaa tehtävään vapaana olevan säikeen. 3

Looginen tietokanta Looginen tietokanta (logical database) on loogisen tietokantamallin (useimmiten relaatiomallin tai oliomallin) mukainen kokoelma tietoalkioita. Tällä kurssilla käsittelemämme loogiset tietokannat ovat relaatiotietokantoja. Looginen tietokanta on siten kokoelma relaatioita (relation) eli tauluja (table), jotka ovat monikoiden (tuple) eli rivien (row) monijoukkoja. Monijoukko (multiset, bag) on (järjestämätön) joukko, jossa sama alkio voi esiintyä useita kertoja. Relaation monikot ovat kaikki saman kaavion mukaisia, so. samantyyppisiä. Relaatiokaavio (relation schema) r(z) sisältää kaavion nimen r ja attribuuttien nimi- ja tyyppimääritykset Z kaavioon asetettuine eheysrajoitteineen (avain- ja viite-eheys- ym. rajoitteet). 4

Tietokantasovellus näkee tietokannan loogisena tietokantana ja operoi siihen loogisen tietokannan operaatioita käyttäen. Relaatiotietokannan loogisia operaatioita ovat (mm.): (1) Uuden monikon t lisääminen relaatioon r. (2) Monikon t poistaminen relaatiosta r. (3) Relaation r monikon t attribuutin A arvon päivittäminen. (4) Relaation r ehdon C täyttävän monikon t lukeminen. (5) Uuden relaation r(z) luonti tietokantaan. Operaation syötteenä on relaatiokaavio. Operaatio on mahdollinen, mikäli tietokannassa ei ennestään ole r-nimistä relaatiota. Operaatio luo tyhjän relaation, johon sitten voi kohdistaa muita operaatioita. (6) Tyhjän relaation r hävittäminen tietokannasta. Operaation jälkeen r:ään voi kohdistaa ainoastaan operaation 5. 5

Loogisiin operaatioihin kuuluvat lisäksi transaktioiden hallinnassa tarvittavat operaatiot: aloituskirjaus, sitoutumispyyntö, keskeytyspyyntö ja peruutuksen päättymiskirjaus. Tarkasteltava loogisten operaatioiden joukko kiinnitetään myöhemmin tarkemmin transaktiomallin (avainvälimallin) määrittelyn yhteydessä. Loogiset operaatiot tuotetaan tietokannan hallintajärjestelmän tiedonkäsittelykielen (data manipulation language, DML) ja tiedonmäärittelykielen (data definition language, DDL) lauseilla. Useimmiten tiedonkäsittely- ja määrittelykielenä käytetään SQL:ää. Tiedonmäärittelykieleen kuuluviksi luetaan ne lauseet, jotka päivittävät tietokannan tietohakemistoa eli järjestelmäluetteloa (data dictionary, system catalog), kuten create table ja drop table. SQL-kielen lauseet tuottavat seuraavanlaisia loogisia operaatioita: 6

(1) Monikon t lisäys relaatioon r: insert into r values (t) (2) Yksilöivän avaimen X arvolla x varustetun monikon poistaminen relaatiosta r: delete from r where X = x. (2) Ehdon C täyttävien monikoiden poistaminen relaatiosta r: delete from r where C (sarja monikoiden poisto-operaatioita). (3) Relaation r yksilöivän avaimen X arvolla x varustetun monikon attribuutin A arvon muuttaminen e:ksi: update r set A = e where X = x, missä e on mahdollisesti A:n tai muita r:n attribuutteja sisältävä lauseke. Mikäli e sisältää A:n tai muita r:n attribuutteja, lause tuottaa avaimen X arvolla x varustetun monikon (x, v) lukuoperaation ja sitä seuraavan päivitysoperaation, jossa arvo v muutetaan e:n arvoksi. Mikäli e ei sisällä r:n attribuutteja, lause tuottaa vain päivitysoperaation. 7

(3) Relaation r ehdon C täyttävien monikoiden attribuutin A arvon muuttaminen e:ksi: update r set A = e where C. Lause tuottaa sarjan monikoiden päivitysoperaatioita (mikäli e ei sisällä r:n attribuutteja) tai sarjan luku- ja päivitysoperaatioiden pareja (mikäli e sisältää r:n attribuutin). (4) Relaation r(z) ehdon C täyttävien monikoiden t projektiomonikoiden t[y ] lukeminen, kun Y Z, so. attribuuttijoukko Y on kaavion attribuuttijoukon Z osajoukko: select Y from r where C (sarja monikoiden lukuoperaatioita). (5) Relaation r(z) luonti: create table r(z), missä Z on kaavion attribuuttien ja eheysrajoitteiden määrittely SQL:llä. 8

(6) Relaation r hävittäminen tietokannasta: drop table r. Mikäli r on tyhjä, lause tuottaa yhden loogisen operaation: hävitä tyhjä relaatio r tietokannasta. Mikäli r on epätyhjä, sisältönään monikot t 1,...,t n, lause tuottaa operaatiosarjan: poista monikko t 1 relaatiosta r; poista monikko t 2 relaatiosta r;... poista monikko t n relaatiosta r; hävitä tyhjä relaatio r tietokannasta. 9

Loogisen tietokannan eheys Looginen tietokanta (tai oikeammin sen tila) on eheä (integral, consistent), jos se täyttää tietokannan kaavion sisältämät tyyppi- sekä rajoitemääritykset sekä muut tietokannalle asetetut eheysrajoitteet (integrity constraint). Relaatiotietokannassa kunkin relaation monikoiden attribuuttiarvojen tulee olla oikeaa tietotyyppiä ja relaation tulee toteuttaa kaavion avainrajoitteet (key constraint) eli (SQL:n) perusavainrajoitteet (primary key) ja yksilöivyysrajoitteet (unique). Relaatioiden välille määriteltyjen viite-eheysrajoitteiden (referential integrity constraint) eli (SQL:n) viiteavainrajoitteiden (foreign key) tulee niin ikään olla voimassa. SQL:llä tietokannan kaavioon määriteltävissä olevien eheysrajoitteiden lisäksi loogiseen tietokantaan liittyy yleensä sovellusaluekohtaisia rajoitteita, joiden tarkistaminen ja voimassa pysyttäminen on tietokantaa käyttävien sovellusten tehtävänä. 10

Transaktiot Loogisen tietokannan D transaktio eli tietokantatapahtuma (transaction) on D:hen kohdistuva loogisten tietokantaoperaatioiden sarja, jonka vaikutusten halutaan muodostavan yhden atomisen (so. jakamattoman) kokonaisuuden. Tietokantasovelluksen ohjelmoija merkitsee ohjelmaan transaktioiden rajat: transaktio alkaa aloituskirjauksella (begin) ja päättyy sitoutumispyyntöön (commit) tai keskeytys- ja peruutuspyyntöön (abort tai rollback). SQL:ssä ei eksplisiittistä transaktion aloitusoperaatiota ole, vaan uuden transaktion katsotaan alkavan ensimmäisestä tietokantaoperaatiosta, joka ei vielä kuulu mihinkään transaktioon. 11

Tarkastellaan relaatiota r(x,v ), missä attribuutti V on numeerinen. Millaisen transaktion tuottaa asiakassovellusohjelman osan update r set V = 2 V ; select sum(v ) from r; commit; suoritus, kun relaation r sisältönä suoritushetkellä on monikkojoukko {t 1,...,t n }? Asiakasprosessi lähettää palvelimelle yksitellen kunkin kolmen operaation (update, select, commit) suorituspyynnön jääden kunkin pyynnön jälkeen odottamaan vastausta. 12

update-operaation suorituspyyntö tuottaa palvelimella seuraavan operaatiojonon: aloita uusi transaktio T 1 ; lue relaation r ensimmäinen monikko t 1 ; päivitä t 1 :n V -attribuutin arvo v 1 kertomalla se kahdella. lue relaation r toinen monikko t 2 ; päivitä t 2 :n V -attribuutin arvo v 2 kertomalla se kahdella.... lue relaation r viimeinen monikko t n ; päivitä t n :n V -attribuutin arvo v n kertomalla se kahdella. Vastausviestinä on tieto update-operaation onnistumisesta. Koska SQL:n update r -lauseen tai select sum(v ) -kyselyn semantiikka ei kiinnitä r-monikoiden läpikäyntijärjestystä, palvelin valitsee tehokkuuden kannalta edullisimman, mikä arvattavasti on monikoiden fyysinen peräkkäisjärjestys r:n tiedostossa. 13

select-operaation suorituspyyntö tuottaa palvelimella seuraavan operaatiojonon: lue relaation r ensimmäinen monikko t 1 ; lue relaation r toinen monikko t 2 ;... lue relaation r viimeinen monikko t n. Palvelin palauttaa asiakasprosesille operaation onnistumisviestin lisäksi myös operaation tuloksen (lasketun summan). Vastauksena commit-pyyntöön palvelin suorittaa operaation commit T 1 ja palauttaa sitoutumisen onnistumisesta tiedon sovellusprosessille. 14

Transaktiolta vaadittava ominaisuus atomisuus (atomicity) tarkoittaa, että joko (1) kaikki transaktion aikaansaamat muutokset loogisen tietokannan tilaan toteutuvat tai (2) yksikään muutos ei jää voimaan loogiseen tietokantaan. Transaktio, joka on suorittanut loppuun commit-operaation, on sitoutunut (committed). Sitoutuneelta transaktiolta vaaditaan atomisuuden lisäksi ominaisuus pysyvyys (durability), mikä tarkoittaa, että sitoutuneen transaktion aikaansaamien muutosten on toteuduttuva ja jäätävä pysyvästi voimaan loogiseen tietokantaan, mahdollisista häiriöistä huolimatta. Sitoutuneen transaktion tekemät päivitykset voi kumota ainoastaan ohjelmoimalla sitä varten uusi transaktio (tai uusia transaktioita). 15

Esimerkkitransaktiomme T 1 päivittää relaation r kaikkien monikoiden V -attribuutin arvon kertomalla entisen arvon kahdella. Mikäli T 1 siis sitoutuu, so. commit T 1 -operaatio tulee loppuun suoritetuksi, r:n kaikkien monikoiden V -attribuutin päivityksen on jäätävä voimaan. Jos taas T 1 ei sitoudu esim. järjestelmähäiriön vuoksi, on r:n kaikkien monikoiden V -attribuutin arvojen jäätävä entiselleen, so. kahdella kertomatta. 16

Transaktioiden tilat Edellä määritelty transaktiokäsite sisältää vain sitoutuneen transaktion, so. transaktion, joka koostuu loogisten operaatioiden sarjasta BαC, missä B on transaktion aloituskirjaus (begin), α on jono normaaleja luku- ja päivitysoperaatioita ja C on transaktion sitoutumispyyntö (commit). Operaatiojono α muodostaa transaktion etenemisvaiheen (forwardrolling phase). Transaktiota suoritetaan kuitenkin operaatio kerrallaan, ja transaktio ei välttämättä koskaan pääty sitoutumiseen, vaan voi sen sijaan joko itse keskeyttää ja peruuttaa itsensä (SQL-lauseella rollback) tai keskeytyä transaktiosta riippumattomasta syystä (esim. järjestelmähäiriöstä), jolloin järjestelmä peruuttaa transaktion tietokannan elvytysvaiheessa. 17

Erotammekin neljä eri transaktiotyyppiä eli transaktion tilaa (transaction state): (1) etenevä transaktio, (2) sitoutunut transaktio, (3) peruuntuva transaktio ja (4) peruuntunut transaktio. Etenevä transaktio (forward-rolling transaction) koostuu operaatiosarjasta Bα, missä B on transaktion aloituskirjaus ja α jono etenemisvaiheen lukuja päivitysoperaatioita eli ns. etenemisoperaatioita (forward action). Etenevää transaktiota voidaan edistää normaaleilla luku- ja päivitysoperaatioilla sekä sitoutumis- tai keskeytyspyynnöllä. 18

Peruuntuva transaktio (backward-rolling transaction) koostuu operaatiosarjasta BαβAβ 1, missä B on transaktion aloituskirjaus, αβ jono etenemisvaiheen lukuja päivitysoperaatioita, A on transaktion keskeytyskirjaus (abort) ja β 1 on etenemisvaiheen operaatiojonon αβ loppuosan β peruutusjono. Operaatiojono β 1 muodostaa transaktion peruutusvaiheen (backward-rolling phase). Peruuntuva transaktio on peruuttanut loppuosan β etenemisvaiheen operaatioistaan; alkuosa α on vielä peruuttamatta. Etenemisvaiheen operaatiojonon β peruutusjono β 1 eli undo(β) koostuu β:n sisältämien päivitysoperaatioiden jonon o 1 o 2...o n operaatioiden o i käänteisoperaatioista o 1 i käänteisessä järjestyksessä o 1 n o 1 n 1...o 1 1. 19

Etenemisperaation o käänteisoperaatio (inverse action) eli peruutusoperaatio (backward action) o 1 eli undo(o) määritellään operaatiokohtaisesti: (1) undo(monikon t lisääminen r:ään) = monikon t poistaminen r:stä. (2) undo(monikon t poistaminen r:stä) = monikon t lisääminen r:ään. (3) undo(r:n monikon t attribuutin A arvon u päivittäminen v:ksi) = r:n monikon t attribuutin A arvon v päivittäminen u:ksi. (4) Lukuoperaatiolla ei ole käänteisoperaatiota (tai se määritellään tyhjäksi merkkijonoksi ε). (5) undo(relaation r(z) luonti tietokantaan) = tyhjän relaation r(z) hävittäminen tietokannasta. (6) undo(tyhjän relaation r(z) hävittäminen tietokannasta) = relaation r(z) luonti tietokantaan. 20

Toisin kuin etenevää transaktiota, peruuntuvaa transaktiota ei voida edistää mielivaltaisesti, vaan seuraavaksi suoritettava operaatio on aina tarkasti määrätty: seuraavaksi suoritetaan etenemisvaiheen viimeisen vielä peruuttamatta olevan päivitysoperaation käänteisoperaatio. Kun kaikki etenemisvaiheen päivitykset on peruutettu, kirjataan transaktio peruuntuneeksi. Peruuntunut transaktio eli peruutuksensa päättänyt transaktio (rolled-back transaction) koostuu operaatiosarjasta: BαAα 1 C, missä B on transaktion aloituskirjaus, α jono etenemisvaiheen luku- ja päivitysoperaatioita, A on transaktion keskeytyskirjaus, α 1 on etenemisvaiheen operaatiojonon α peruutusjono ja C on transaktion peruutuksen päättymiskirjaus (rolled-back). Peruuntunut transaktio on siis peruutusvaiheensa α 1 tuloksena peruuttanut etenemisvaiheensa α kokonaan. 21

Peruuntuneella transaktiolla ei ole mitään vaikutusta loogisen tietokannan tilaan. Fyysisen tietokannan tila ei sitä vastoin välttämättä palaudu peruutuksessa entiselleen. Sitoutunut tai peruuntunut transaktio on päättynyt (terminated). Päättynyttä transaktiota ei enää voi edistää millään operaatiolla. Etenevä tai peruuntuva transaktio on aktiivinen (active). Peruuntuva tai peruuntunut transaktio on keskeytynyt (aborted). 22

Oikeellinen transaktio Tietokantasovelluksen laatijan tehtävänä on huolehtia siitä, että jokainen sovellusprosessin tuottama sitoutunut transaktio T on loogisesti oikeellinen: T säilyttää eheän loogisen tietokannan eheänä, kun T ajetaan yksinään häiriöttömässä tilassa. Transaktiot on luonnollisesti voitava ohjelmoida ottamatta huomioon fyysisen tietokannan rakennetta, muita samanaikaisia transaktioita sekä järjestelmähäiriöitä. Tietokannan hallintajärjestelmän tehtävänä on taata sekä loogisen että fyysisen tietokannan eheyden säilyminen, vaikka suorituksessa on samanaikaisesti useita loogisesti oikeellisia transaktioita ja järjestelmähäiriöitä voi esiintyä. Peruuntunut transaktio on aina triviaalisti loogisesti oikeellinen, tehtiinpä sen etenemisvaiheessa mitä tahansa ja olivatpa tietokannan eheysrajoitteet millaisia hyvänsä: peruutusvaihe joka tapauksessa peruuttaa kaikki etenemisvaiheen päivitykset. Etenevän transaktion ei ole tarpeen olla oikeellinen. 23

Luku-kirjoitusmalli Transaktionhallinnan yksityiskohtaista tarkastelua varten on tarpeen kiinnittää se tietokanta- ja transaktiomalli, jonka mukaisista operaatioista transaktiot koostuvat. Oletamme yksinkertaisuuden vuoksi, että looginen tietokantamme koostuu yhdestä kaavion r(xv ) mukaisesta relaatiosta. Relaation monikot ovat pareja (x, v), missä x on monikon yksilöivä avainarvo ja v on monikon arvo (so. monikon muiden attribuuttien arvot). Transaktiot operoivat r:n monikoihin (x, v) aina avainarvon x perusteella. Yksikertaisimmassa transaktiomallissa, ns. luku-kirjoitusmallissa (read-write model) tietokannan r transaktio voi sisältää seuraavia operaatioita: 24

(1) B: transaktio alkaa (begins). (2) R[x, v]: lue avainarvolla x varustettu monikko (x, v). Syöteparametrina annetaan avainarvo x. Operaatio hakee r:stä monikon (x, v). Jos monikkoa ei löydy, operaatio epäonnistuu. Operaatiota voidaan merkitä lyhyemmin R[x]. (3) W[x, u, v]: kirjoita avainarvolla x varustettu monikko. Syöteparametrina annetaan avainarvo x ja arvo v. Operaatio korvaa relaatiossa r olevan, avainarvolla x varustetun monikon arvon u arvolla v. Jos monikkoa ei löydy, operaatio epäonnistuu. Operaatiota voidaan merkitä lyhyemmin W[x,v] tai W[x]. (4) C: etenevä transaktio sitoutuu (commits) tai keskeytynyt transaktio päättää peruutuksensa (completes its rollback). (5) A: transaktio keskeytyy (aborts). 25

Esim. operaatiojono BR[x,u]R[y,v]W[z,w,u + v] on etenevä transaktio, joka lukee avainarvoilla x ja y varustettujen monikoiden arvot u ja v ja sijoittaa summan u+v avainarvolla z varustetun monikon arvoksi, kun avainarvolla z varustetun monikon entinen arvo on w. Operaatiojono BR[x,u]R[y,v]W[z,w,u + v]c on sitoutunut transaktio. 26

Keskeytyneen transaktion peruutusvaiheessa suoritetaan etenemisvaiheen kirjoitusoperaatioiden käänteisoperaatiot (käänteisessä järjestyksessä). Operaation W[x,u,v] käänteisoperaatio W 1 [x,u,v] on W[x,v,u]. Operaatiojono BR[x,u]R[y,v]W[z,w,u + v]aw 1 [z,w,u + v] on peruuntuva keskeytynyt transaktio, joka on peruuttanut (ainoan) kirjoitusoperaationsa. Operaatiojono BR[x,u]R[y,v]W[z,w,u + v]aw 1 [z,w,u + v]c on peruutuksensa päättänyt keskeytynyt transaktio. 27

Luku-kirjoitusmallissa ei voi esittää monikoiden lisäyksiä eikä poistoja. Kun kirjallisuudessa tarkastellaan luku-kirjoitusmalliin perustuvaa transaktionhallintaa, operaatioiden kohteina ovat monikoiden sijasta tarkemmin määrittelemättömät abstraktit tietoalkiot. Jos tietoalkioiksi valitaan loogisen tietokannan monikkokokoelmat, esim. relaatiotietokannan relaatiot, on mahdollista mallintaa monikoiden lisäykset ja poistot kyseisen kokoelman (relaation) kirjoitusoperaatioina. Vastaavasti jos tietoalkioiksi valitaan fyysisen tietokannan sivut, joille relaatioiden monikoita sijoitetaan, on mahdollista mallintaa monikoiden lisäykset ja poistot kyseisen sivun kirjoitusoperaatioina. 28

Kummassakin tapauksessa transaktionhallinta on varsin karkearakeista: lokiin on kirjattava kokonaisen relaation tai sivun muutoskirjauksia, ja samanaikaisuuden hallinnan synkroinointiyksikkönä, lukittavana kokonaisuutena, on kokonainen relaatio tai sivu. Nykyaikaisissa tietokannan hallintajärjestelmissä lokikirjaukset ja lukittavat kokonaisuudet ovat hienojakoisimmillaan yksittäisiä monikoita, jolloin transaktion T 1 päivittämää sivua voi toinen transaktio T 2 päivittää T 1 :n ollessa vielä aktiivisena. Transaktion T 2 aiheuttaman rakennemuutoksen seurauksena transaktion T 1 sivulla p päivittämä monikko voi siirtyä toiselle sivulle p transaktion T 1 ollessa vielä aktiivinen. 29

Avainvälimalli Avainvälimalliksi (key-range model) kutsumassamme transaktiomallissa lukuoperaatiot ovat selausoperaatioita, joissa haetaan relaatiosta r avainarvojen suuruusjärjestyksessä ensimmäinen monikko tietyltä avainväliltä (key range). Mallin päivitysoperaatiot ovat monikoiden lisäyksiä ja poistoja. Monikoiden avainarvojen joukon oletetaan olevan täydellisesti järjestetty; järjestystä merkitään ja sen käänteisrelaatiota ; vastaavia epärefleksiivisiä järjestysrelaatioita merkintään tuttuun tapaan < ja >. Pienintä avainarvoa merkitään ja suurinta. Oletamme, etteivät nämä esiinny tietokannan missään monikossa. Avainvälimalli on riittävä kuvaamaan tärkeimmät periaatteet, joita käytetään ns. fysiologisessa (fyysis-loogisessa) lokiperustaisessa elvytyksessä sekä monikkotason samanaikaisuuden hallinnassa (yksilöivän avaimen avainvälilukinta). Mallissa voidaan myös luontevasti esittää samanaikaisista avainväliselauksista ja yksittäisten monikoiden lisäyksistä ja poistoista johtuvat eristyneisyysanomaliat (mm. haamuilmiö). 30

Avainvälimallissa tietokannan r transaktio voi sisältää seuraavia operaatioita: (1) B: transaktio alkaa (begins). (2) R[x, z, v]: lue ensimmäinen hakuehdon täyttävä monikko (retrieve first tuple) (x, v). Syöteparametrina annetaan avainarvo z, z <. Operaatio hakee sen monikon (x,v), jonka avainarvo x on pienin ehdot x z ja (x,v) r täyttävä. Jos tällaista ei ole, palautetaan (,0). Operaatiota voidaan merkitä lyhyemmin R[x, z], R[x,v] tai R[x]. (3) R[x,>z,v]: lue seuraava monikko (retrieve next tuple) (x,v). Syöteparametrina annetaan avainarvo z, z <. Operaatio hakee sen monikon (x,v), jonka avainarvo x on pienin ehdot x > z ja (x,v) r täyttävä. Jos tällaista ei ole, palautetaan (, 0). Operaatiota voidaan merkitä lyhyemmin R[x,>z], R[x,v] tai R[x]. 31

(4) I[x, v]: lisää monikko (insert tuple) (x, v). Syöteparametrina annetaan avainarvo x ja arvo v. Operaatio lisää monikon (x,v) relaatioon r. Mikäli r sisältää ennestään avainarvolla x varustetun monikon, operaatio epäonnistuu. Operaatiota voidaan merkitä lyhyemmin I[x]. (5) D[x, v]: poista monikko (delete tuple) (x, v). Syöteparametrina annetaan avainarvo x. Operaatio etsii relaatiosta r avainarvolla x varustetun monikon (x, v) ja poistaa sen. Jos monikkoa ei löydy, operaatio epäonnistuu. Operaatiota voidaan merkitä lyhyemmin D[x]. (6) C: etenevä transaktio sitoutuu (commits) tai keskeytynyt transaktio päättää peruutuksensa (completes its rollback). (7) A: transaktio keskeytyy (aborts). 32

Luku-, lisäys- ja poisto-operaatioille o[ x] määritellään käänteisoperaatio o 1 [ x] seuraavasti: R 1 [x,v] = ε, missä ε tarkoittaa tyhjää operaatiojonoa. I 1 [x,v] = D[x,v]. D 1 [x,v] = I[x,v]. Esim. peruuntunut transaktio BR[x 1, x,v 1 ]R[x 2,>x 1,v 2 ]R[x 3,>x 2,v 3 ]D[x,v]I[x,v 1 + v 2 + v 3 ] AI 1 [x,v 1 + v 2 + v 3 ]D 1 [x,v]c = BR[x 1, x,v 1 ]R[x 2,>x 1,v 2 ]R[x 3,>x 2,v 3 ]D[x,v]I[x,v 1 + v 2 + v 3 ] AD[x,v 1 + v 2 + v 3 ]I[x,v]C lukee kolmen peräkkäisillä avainarvoilla varustetun monikon arvon, korvaa avainarvolla x varustetun monikon arvon luettujen monikoiden arvojen summalla, keskeytyy, peruuttaa päivityksensä ja päättää peruutuksensa. 33

Peruutuspisteet ja osittaisperuutus SQL:n transaktiomallissa on mahdollista ns. osittaisperuutus (partial rollback), jolla peruutetaan osa etenevän transaktion tekemistä päivityksistä peruuttamatta koko transaktiota. Osittaisperuutuksen jälkeen transaktio on edelleen etenevässä tilassa ja voi siis suorittaa uusia etenemisvaiheen operaatioita. Osittaisperuutuksessa peruutettava etenemisvaiheen osa määrätään määrittelemällä transaktion sisälle peruutuspisteitä (savepoint) SQL:n lauseella set savepoint P, missä P on peruutuspisteelle annettava nimi. SQL:n lauseella rollback to savepoint P palataan peruutuspisteeseen P, so. perutaan kaikki pisteen P jälkeen suoritetut (vielä perumatta olevat) etenemisvaiheen päivitykset. 34

Osittaisperuutukset voivat olla sisäkkäisiä: insert into r values (x 1,v 1 ); set savepoint P 1 ; insert into r values (x 2,v 2 ); set savepoint P 2 ; insert into r values (x 3,v 3 ); rollback to savepoint P 2 ; insert into r values (x 4,v 4 ); rollback to savepoint P 1 ; insert into r values (x 5,v 5 ); commit. Lause rollback to savepoint P 2 poistaa relaatiosta r siihen lisätyn monikon (x 3,v 3 ). Lause rollback to savepoint P 1 poistaa relaatiosta r siihen lisätyt monikot (x 4,v 4 ) ja (x 2,v 2 ). Transaktion lopputuloksena relaatiossa r on siis monikot (x 1,v 1 ) ja (x 5,v 5 ). 35

Lisätään transaktiomalliimme (avainvälimalliin) osittaisperuutukset. Tätä varten transaktiomalliin lisätään seuraavat operaatiot: (6) S[P]: aseta peruutuspiste (set savepoint) P. (7) A[P]: aloita osittaisperuutus pisteeseen (begin partial rollback to savepoint) P. (8) C[P]: päätä osittaisperuutus pisteeseen (complete the partial rollback to savepoint) P. Määritellään myös: S 1 [P] = ε. 36

Transaktion etenemisvaihe voi nyt olla mitä tahansa seuraavista muodoista: (1) Jono α operaatioita R, I, D ja S. (2) Muotoa αs[p]βa[p]β 1 C[P]γ oleva operaatiojono, missä α, β ja γ ovat muotoa (1) tai (2). (3) Muotoa αs[p]βδa[p]δ 1 oleva operaatiojono, missä α, β ja δ ovat muotoa (1) tai (2). Tapauksessa (2) osajono S[P]βA[P]β 1 C[P] esittää päätettyä peruutusta pisteeseen P. Tapauksessa (3) osajono S[P]βδA[P]δ 1 ilmaisee, että transaktio on parhaillaan peruuttamassa pisteeseen P. Operaatiojonon α peruutusjono (undo string) α 1 eli undo(α) määritellään nyt sen mukaan, minkä muotoinen se on: Muotoa (1) olevalle jonolle α peruutusjono α 1 määritellään kuten aiemmin. Muotoa (2) olevan jonon peruutusjono on γ 1 α 1. Muotoa (3) olevan jonon peruutusjono on β 1 C[P]α 1. 37

Monirakeisuus Lisätään tietokanta- ja transaktiomalliin monirakeisuutta (multiple granularity) niin, että monikoita voidaan ryhmitellä relaatioiksi ja relaatioita tietokannoiksi. Tietokantajärjestelmän s tietokannat muodostavat tunnisteidensa mukaan täydellisesti järjestetyn joukon (b 1,w 1 ),...,(b m,w m ), missä b i on tietokannan yksilöivä tunniste ja w i sisältää tietokannan omistajan tunnisteen yms. tietoa. Kunkin tietokannan b i relaatiot muodostavat tunnisteidensa mukaan täydellisesti järjestetyn joukon (r 1,R 1 ),...,(r ni,r ni ), missä r i on relaation yksilöivä tunniste ja R i on relaation kaavio (= X i V i ). 38

Tietokannan b relaation r yksilöi pari (b, r) ja relaation r monikon (x,v) yksilöi kolmikko (b,r,x). Monikkokohtaiset operaatiot ovat nyt: R[b,r,x,θz,v]: tietokannan b relaation r monikon (x,v) lukeminen. I[b,r,x,v]: monikon (x,v) lisääminen tietokannan b relaatioon r. D[b,r,x,v]: monikon (x,v) poistaminen tietokannan b relaatiosta r. 39

Uusia operaatioita ovat: R[b,θb,w ]: järjestelmän tietokantojen b tunniste- ja omistajatietojen selailu. I[b, w]: uuden tietokannan b luonti; vastaa SQL:n create database -operaatiota. D[b,w]: (tyhjän) tietokannan b hävittäminen; vastaa SQL:n destroy database -operaatiota. R[b,r,θr,R ]: tietokannan b relaatioiden r kaavioiden selailu. I[b, r, R]: uuden relaation r(r) luonti tietokantaan b; vastaa SQL:n operaatiota create table r(r). D[b, r, R]: (tyhjän) relaation r poistaminen tietokannasta b; vastaa SQL:n operaatiota drop table r. 40