Helsingin yliopisto/TKTL
Tietokannan hallinta, k 2003, Harjoitus 5, 28.4.-2.5.

  1. Nostat pankkiautomaatilla tililtäsi 140 euroa. Mitä tietokantaan liittyviä toimintoja tililtänostoon sisältyy? Mitkä toiminnot yhdessä muodostavat transaktion? Millaisissa tilanteissa transaktio pitää peruuttaa? Voitko välttyä tilanteelta, jossa tilisi vähennys nostetulla summalla jää sitoutuneena voimaan, vaikkei automaatti rahoja antanutkaan?

  2. 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;
    
  3. 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] 
     
    1. 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.
    2. Entä jos rivi 113 (T3-commit) puuttuu?

  4. Millaista sitoutumiskäytäntöä pitäisi noudattaa, jos halutaan, ettei elvytyksessä tarvitsisi koskaan uusia (redo) transaktioiden operaatioita? Mitä huonoja puolia tällaisella käytännöllä olisi?

  5. Lokikirjauksia syntyy transaktionkäsittelyn kuluessa runsaasti. Mistä kohtaa loki voidaan katkaista ja hävittää tarpeettomiksi käyneet kirjaukset? <