Tiedonhallinta I, syksy 1999, Harjoitus 8 (22.-25.11.)

Läsnäolo: 3 tehtävää

 
1. Tietokannan eheysrajoitteen mukaan tietoalkioilla X ja Y pitää olla
sama arvo. Tarkastellaan transaktiojoukon {T1, T2, T3} ajoitusta

T1: read-item(X,v); T1: v:=v+1; T1: write-item(X,v);  T2: read-item(X,w);  
T2: write-item(Y,w);  T2: commit;  T3: read-item(Y,p);  T1: abort;
T3: write-item(Z,p);  T3: commit.

Ovatko transaktiot oikeellisia? Mikä on kunkin transaktion
eristyneisyystaso? Mitä lokitietueita syntyy, kun tietokannassa on
aluksi X = Y = Z = 0? Säilyykö tietokannan eheys?

2. Näytä, miten ankara kaksivaiheinen lukitus estää edellisen tehtävän
ajoituksen syntymisen.

3. Millä ehdolla lukulukon korotus kirjoituslukoksi voi tulla
kysymykseen?

4.  Tietokannan hallintajärjestelmässä sovelletaan ankaraa
kaksivaiheista lukituskäytäntöä.  Lukittavat tietoalkiot ovat sivuja. 
Mitä lukkoja otetaan seuraavan transaktion suorituksessa, kun 
a) relaatioon EMPLOYEE ei ole hakemistoa attribuutilla dno, 
b) relaatioon EMPLOYEE on hajautushakemisto attribuutilla dno (joko
ensisijaisena saantipolkuna tai oheishakemistona)?
 
begin transaction;
update EMPLOYEE set salary = salary + 500
   where dno = 5;
commit transaction.  

c) Entä lukot päivitysoperaatiossa, joka korottaa kaikkien Jokisten
palkkaa, ja käytössä on sukunimen mukainen ISAM-hakemisto?

5.  Ovatko seuraavat ajoitukset mahdollisia ankarassa kaksivaiheisessa
lukituskäytännössä?

a) T1: write-item(X);  T2: write-item(Y);  T1: read-item(Y);
   T2: read-item(X);  T1: commit;  T2: commit.

b) T1: read-item(X); T2: read-item(X); T1: write-item(X); 
   T2: write-item(X); T1: commit;  T2: commit.

Mikäli ajoitus ei ole mahdollinen, millä tavalla ajoituksen syntyminen
estyy? Millaisen ajoituksen mukaisesti transaktiot voivat valmistua, so.
päästä sitoutumispisteeseensä?

6.  Tietokannan hallintajärjestelmä soveltaa lukituskäytäntöä, jossa
kaikille transaktioille taataan vähintään eristyneisyystaso 'read
uncommitted'.  Lukittavat tietoalkiot ovat sivuja.  Tarkastellaan
yritystietokantaan kohdistuvaa transaktiota T1:

set transaction isolation level L;
begin transaction;
select sum(salary) from employee;
commit transaction:

Mitä lukkoja transaktiossa otetaan ja milloin ne vapautetaan, kun 
a) L = 'repeatable read',   b) L = 'read committed'? 

Millä tavoin transaktion tuottama tulos tapauksessa (a) voi poiketa
siitä, mitä se on tapauksessa (b)? Oletetaan, että samanaikaisesti on
suorituksessa ainoastaan yksi toinen transaktio, T2.  Transaktio T2
päivittää kahden työntekijän palkkaa.