HELIA 1 (14) Luento Transaktion / Tapahtuman hallinta... 2 Taustaa... 3 Tapahtuman käsite... 5 ACID-ominaisuudet... 7 Samanaikaisuuden hallinta... 8 Lukitukset... 9 Toipuminen... 10 Loki-tiedosto... 11 Tapahtuman suunnittelu... 13
HELIA 2 (14) Transaktion / Tapahtuman hallinta Transaction management 1. Estetään tietokannan samanaikaisesta käsittelystä aiheutuvat ongelmat 2. Varmistetaan tietokannan tietojen eheys mahdollisista virhetilanteista huolimatta SQL- liittymä Sovellusohjelma SQL- komentoja SQL- käsittelijä (SQL Processor) Tapahtuman käsittelijä (Transaction Manager) Tilan käsittelijä (Storage Manager) DATA & METADATA
HELIA 3 (14) Taustaa 1. Katoavat päivitykset Lost Update problem Esim. Pankkitilin kartuttaminen samanaikaisesti A Tilino Saldo B 101 202 10 000 220 330 20 000 20 000 20 000 Tilino Saldo + 2 000 101 202 10 000 22 000 220 330 22 000 + 3 000 Tilino Saldo 23 000 101 202 10 000 220 330 23 000
HELIA 4 (14) 2. Holtiton luku / Likaiset luvut Dirty Read problem Esim. Pankkitilin kartuttaminen samanaikaisesti A Tilino Saldo B 101 202 10 000 220 330 20 000 20 000 Tilino Saldo + 2 000 101 202 10 000 22 000 220 330 22 000 22 000 rollback Tilino Saldo 101 202 10 000 220 330 20 000 + 3 000 Tilino Saldo 25 000 101 202 10 000 220 330 25 000
HELIA 5 (14) Tapahtuman käsite Joukko tietokannan käsittelytoimenpiteitä, (kyselyjä, lisäyksiä, muutoksia, poistoja) jotka muodostavat loogisen kokonaisuuden BEGIN TRANSACTION... END TRANSACTION Esim... LENTO(lento_id, lahto, kohde, ) LAHTO(lento_id, pvm, paikkoja, vapaana, ) VARAUS(lento_id, pvm, asiakas, ) BEGIN TRANSACTION Update LAHTO Set VAPAANA = VAPAANA 1 Where LENTO_ID = $lento_id and PVM = $pvm; Insert into VARAUS Values($lento_id, $pvm, $asiakas); END TRANSACTION;
HELIA 6 (14) Ä Tapahtumaan kuuluvat toimenpiteet joko suoritetaan kokonaisuudessaan tai hylätään kokonaisuudessaan COMMIT TRANSACTION ROLLBACK TRANSACTION aloita tapahtuma vahvistus ONNISTUNUT VAHVISTETTU päätä tapahtuma AKTIIVINEN virhe peruutus PÄÄTTYNYT luku kirjoitus EPÄ- ONNISTUNUT PERUUTETTU
HELIA 7 (14) ACID-ominaisuudet Atomicy Consistency Isolation Durability Jakamattomuus / Atomisuus Kaikki tai ei mitään Tapahtumaan kuuluvat toimenpiteet joko suoritetaan kokonaisuudessaan tai hylätään kokonaisuudessaan Eheys / Oikeellisuus Tietokanta säilyy tapahtumassa ehyenä Päivityksen yhteydessä tietokanta siirtyy eheästä tilasta uuteen eheään tilaan Erillisyys / Eristyvyys Tapahtuma suoritetaan ikään kuin se olisi ainoa tapahtuma ko. ajanhetkellä. Ts. muut tapahtumat eivät saa vaikuttaa sen suoritukseen Tapahtuman tekemät muutokset tietokantaan näkyvät muille tapahtumille vasta kun muutokset on vahvistettu (ei ns. likaisia tietoja) Pysyvyys Kun tapahtuma on vahvistettu, tietojen on säilyttävä tietokannassa kaikista mahdollisista virhetilanteista huolimatta.
HELIA 8 (14) Samanaikaisuuden hallinta Concurrency Control Estetään tietokannan samanaikaisesta käsittelystä aiheutuvat ongelmat Ä Vastuu Eheys Erillisyys Tap. A Tap. B Luku Kirjoitus Luku Ei vaaraa Vaara (L) Kirjoitus Vaara (L) Vaara (K) Sarjallistuvuus Rinnakkaisten tapahtumien aiheuttama tietokannan muutos on sellainen, että sama tulos saataisiin aikaan suorittamalla tapahtumat peräkkäin jossain järjestyksessä.
HELIA 9 (14) Lukitukset Locking Samanaikaisen käytön rajoitus Tavallisin tapa huolehtia Eheydestä ja Erillisyydestä a) Luku-lukko - jaettu b) Kirjoitus-lukko eksklusiivinen Nykyisin tyypillisesti rivitasoisia (aiemmin taulutasoisia) Lukkiintumat Deadlock Tilanne, jossa yhtäaikaa suorituksessa olevien ohjelmien lukot estävät ohjelman toiminnan Tiedonhallintajärjestelmä havaitsee ja purkaa lukkiintumat (perumalla yhden tai useamman tapahtuman)
HELIA 10 (14) Toipuminen Recovery Tietokannan palauttaminen eheään tilaan virhetilanteen jälkeen Ä Vastuu Jakamattomuus Pysyvyys Esimerkkejä virhetilanteista Toiminnon peruutus Lukkiintumien purkaminen Käyttövirhe Ohjelmointivirhe Levyvirhe Järjestelmävirhe Fysikaaliset vaaratilanteet Tahallinen vahingoittaminen
HELIA 11 (14) Loki-tiedosto Log Käsittelytoimenpiteet kirjataan lokitiedostoon aloita tapahtuma VAHVISTETTU vahvistus AKTIIVINEN PÄÄTTYNYT peruutus luku kirjoitus PERUUTETTU i Trns ID Opera tion Object Before image After image Prev ptr 1 T1 Start 0 2 T1 Update Tili XX sdfjs lsdfks 1 3 T2 Start 0 4 T2 Insert Asiakas Y ddksl 3 5 T1 Insert Tapaht z lkjlkj 2 6 T2 Commit 4 7 T1 Commit 5
HELIA 12 (14) Ä Lokitiedoston perusteella DBMS voi palauttaa tietokannan eheää tilaan virhetilanteen jälkeen a) Peruutus (Undo) b) Uudelleensuoritus (Redo) T1 T2 T3 T4 aika järjestelmävirhe
HELIA 13 (14) Tapahtuman suunnittelu Ä Tapahtuman suunnittelu on tietokannan suunnittelijan ja ohjelmoijan vastuulla Ä Sovellusalueen tuntemus tärkeää, jotta rakentuu loogisia toimenpidekokonaisuuksia Ä Jos transaktiota ei aloiteta eksplisiittisesti (BEGIN TRANSACTION) sen alku riippuu tiedonhallintajärjestelmän käytännöstä: Solidissa oletusarvona AUTO-COMMIT! Oraclessa tapahtuma alkaa jokaisesta 1. sisäänkirjoittautumisesta, 2. edellisestä Commit/Rollback -toiminnosta 3. tietokannan rakenteen muutostoiminnosta (DDL) Ä Tietokantaan määritellyt eheyssäännöt vastaavat relaatiotietomallin eheyden säilymisestä tapahtumissa
HELIA 14 (14) Suosituksia Pidä päivitystapahtumat (insert, update, delete) pieninä, ts. vahvista (commit) tai peru (rollback) tämän tästä Lukutapahtumat voivat olla pitkiä