Tietokannan hallinta, syksy 2001, Harjoitus 5 (16.-19.10.)

Läsnäolo: 3 tehtävää        (**)-merkitty tehtävä lasketaan kahdeksi

1. Sisäkkäisten silmukoiden menetelmässä kannattaa ohjeen mukaan (luennot, s. 19) pienempi relaatioista käsitellä ulommassa silmukassa. Onko tämä ohje yleispätevä vai löytyykö vastaesimerkkejä?

2. a) Millaisesta operaatiosarjasta (tietokantaoperaatiot, muut) koostuu tyypillinen pankkiautomaattitransaktio (käteisrahan nosto)? Oletetaan, että tunnusluku tarkistetaan paikallisesti (ei tietokannasta), mutta tilitiedot ovat tietokannassa. Kuinka aliluvun 5.1. alussa mainitut häiriöt voivat vaikuttaa tässä tilanteessa?

b) Onko moniosaisen lentomatkan varauksessa tai lomamatkan (lento, hotelli, vuokra-auto) varauksissa joitakin erityisiä ongelmia tapahtumanhallinnan kannalta? (Mieti tapahtuman ACID-ominaisuuksia.)

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]
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.

4. a) 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?

b) Miksi elvytyksessä undo-operaatiot suoritetaan selaamalla lokia lopusta alkuun päin ja redo-operaatiot selaamalla alusta loppuun päin? Anna konkreettiset esimerkit tilanteista, jotka osoittavat näiden järjestysten merkityksen.

5. WAL-käytännön mukaan lokia kirjoitetaan levylle aina ennen dataa. Onko loki siis jopa varsinaista tietokantaa tärkeämpi? (Perustele.)

6. (**) Oletetaan, että lokiin on kirjoitettu myös lukutoimintoja kuvaavat read-tietueet kuten seuraavassa esimerkissä (lokin sisältö järjestelmän romahtaessa) :


100: [start, T3]
101: [read, T3, C]
102: [write, T3, B, 15, 12]
103: [start, T2]
104: [read, T2, B]
105: [write, T2, B, 12, 18]
106: [start, T1]
107: [read, T1, A]
108: [read, T1, D]
109: [write, T1, D, 20, 25]
110: [read, T2, D]
111: [write, T2, D, 25, 26]
112: [read, T3, A]

a) Mitä tiedetään lokin perusteella muuttujien alkuarvoista?
b) Lopputilanteessa ainakin T3 on kesken eli ei sitoutunut. Voivatko T1 ja T2 olla sitoutuneita? Millainen elvytys tässä tarvitaan?