Helsingin yliopisto/TKTL
Tietokannan hallinta, muunto 2003, Harjoitus 5, 17.-18.6

  1. 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;
    
  2. 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?

  3. Tietokannan eheysrajoitteen mukaan tietoalkioilla X ja Y pitää olla sama arvo. Tarkastellaan transaktiojoukon {T1, T2, T3} ajoitusta
    T1: read(X,v);
    T1: v:=v+1;
    T1: write(X,v);
    T2: read(X,w);
    T2: write(Y,w);
    T2: commit;
    T3: read(Y,p);
    T1: abort;
    T3: write(Z,p);
    T3:commit;
    1. Ovatko transaktiot eheyden säilyttäviä (oikeelisia)?
    2. Mitä eristyneisyysongelmia ajoituksessa esiintyy?
    3. Mitä lokitietueita syntyy, kun tietokannassa on aluksi X = Y = Z = 0?
    4. Säilyykö tietokannan eheys?
    5. Kuinka ankara 2PL estää esimerkkiajoituksen syntymisen?
  4. Tietokannan hallintajärjestelmässä sovelletaan ankaraa kaksivaiheista lukituskäytäntöä. Lukittavat tietoalkiot ovat sivuja. Mitä lukkoja ja missä vaiheessa käsittelyä otetaan transaktion
      begin transaction
        update TYÖNTEKIJÄ set PALKKA = PALKKA + 500 where TT_NRO=301123
      commit transaction. 
    suorituksessa kun taulu on toteutettu ISAM rakenteena?

  5. Vuorovaikutteisessa tietokantasovelluksessa tietokannan päivitys tapahtuu usein seuraavasti. Asiakassovellus lukee tietokannasta joukon rivejä sovelluksen työtilaan. Rivit näytetään käyttäjälle, joka mahdollisesti editoi työtilassa olevia rivejä. Lopuksi muuttuneet rivit kirjoitetaan takaisin tauluun. Miten operaatiot kannattaisi jakaa transaktioiksi. Millaista eristyvyystasoa ja lukitusta tällaisessa käsittelyssä kannattaisi käyttää?

  6. Lupaudu täyttämään kurssikyselylomake osoitteessa: http://ilmo.cs.helsinki.fi/kurssit/servlet/Valinta