Tietokantasovelluksen ohjelmoijan velvollisuutena on huolehtia sovellusohjelman tuottamien
transaktioiden loogisesta oikeellisuudesta: jokaisen sitoutuneen transaktion on säilytettävä loogisen tietokannan
eheys. Mikäli osa tietokannan eheysrajoitteista (tyypillisesti avain- ja viite-eheysrajoitteet) on määritelty tietokannan kaavioon,
on järjestelmän valvottava näiden eheysrajoitteiden voimassa pysymistä sovelluksen transaktioiden suorituksessa.
Mitä valvontatoimenpiteitä tarvitaan ja miten ne tulee sijoittaa transaktion varsinaisiin operaatioihin nähden? Tarkastele
erikseen avainrajoitteen ja viite-eheysrajoitteen valvontaa.
Pitääkö valvontatoimenpiteet sisällyttää sovelluksen transaktioon
vai sen ulkopuolelle erilliseksi, järjestelmän tuottamaksi transaktioksi? Mikäli valvontatoimenpide sijoitetaan sovelluksen
transaktion sisälle, niin mihin kohtaan siellä? Mitä on tehtävä, kun transaktio ei olekaan oikeellinen vaan rikkoo
eheysrajoitetta?
Tarkastele esimerkkinä taulua tyoskentely(sotu->henkilo,pnro->projekti, tunnit) ja transaktiota, joka tuotetaan seuraavasta ohjelman osasta.
begin;
insert into tyoskentely values (s1,p1,h1);
insert into tyoskentely values (s2, p2, h2);
insert into tyoskentely values (sn, pn, hn);
commit;
Oletetaan, että järjestelmän romahdettua lokitiedoston sisältö on seuraava:
99: [checkpoint]
100: [start, T1]
101: [start, T2]
102: [write, T1, A, 10, 20]
103: [write, T2, B, 11, 22]
104: [commit, T1]
105: [start, T3]
106: [write, T3, A, 20, 30]
107: [abort, T2]
108: [checkpoint]
109: [start, T4]
110: [write, T3, B, 11, 33]
111: [write, T3, A, 30, 40]
112: [write, T4, C, 15, 25]
113: [commit, T3]
114: [write, T4, C, 25, 35]
- Mitä operaatioita sisältyy tästä tilanteesta alkavaan elvytykseen? Oletetaan, että tietoalkion A
sisältävän sivun PageLSN = 106, tietoalkion B sisältävän sivun PageLSN = 110 ja tietoalkion C
sisältävän sivun PageLSN = 112.
- Entä jos rivi 113 (T3-commit) puuttuu?