TIEDONHALLINTA - SYKSY 2011 Kurssikoodi: Saapumisryhmä: Luento 12 TU00AA48-2002 TU10S1E Hannu Markkanen 28.-29.11.2011 9/10/12 Helsinki Metropolia University of Applied Sciences 1
Tietokantapahtumien hallinta
Tietokantatapahtuma (transaction) Tietokantatapahtumalla tarkoitetaan toimenpidesarjaa, jolla käyttäjä tai sovellusohjelma lukee tai muuttaa tietokannan sisältöä yksittäinen SQL-komento, kuten INSERT tai UPDATE joukko sovellusohjelman suorittamia peräkkäisiä SQL-komentoja Toisin sanoen, tapahtuma on yksi tai useampi yhteenkuuluva ryhmä SQL-komentoja, jotka on suoritettava yhtenä kokonaisuutena Jos jotain tapahtumaan kuuluvista komennoista ei voida suorittaa onnistuneesti loppuun, yhtään muistakaan ei suoriteta Hannu Markkanen Metropolia Ammattikorkeakoulu 3
Tapahtumanhallinta (transaction management) Tietokantojen tapahtumanhallinnan avulla ehkäistään tietojen lisäämiseen, muuttamiseen ja poistamiseen liittyviä ongelmia Monen käyttäjän lukiessa ja kirjoittaessa samaa tietoyksikköä, saavat joku/jotkut käyttäjistä väistämättä käyttöönsä virheellistä tietoa ellei sitä estetä jotenkin Tapahtumanhallinta on eräs tärkeimmistä vaatimuksista yritystason sovelluskehityksessä Moni liiketoiminta, kuten pankit ja sähköinen kaupankäynti, on täysin riippuvaista luotettavasta tapahtumanhallinnasta TKHJ:ssa tapahtumien hallintaa hoitaa nk. tapahtuman käsittelijä (transaction manager), joka valvoo samanaikaisia operaatioita varaa ja vapauttaa tietoyksikköjä huolehtii operaatioiden päättymisestä ja mahdollisesta peruutuksesta
Samanaikaiset tapahtumat SQL-standardi määrittelee neljä samanaikaisiin tapahtumiin liittyvää ongelmaa: 1. Lost Update: Tapahtuman päivitys katoaa, koska toinen ylikirjoittaa sen: Aika Käyttäjä A: Nosto tililtä Tilin saldo Käyttäjä B: Talletus tilille T1 10000 T2 T3 Lue saldo: 10000 Lue saldo: 10000 10000 + 2000 T4 10000-3000 12000 T5 7000 2. Dirty Read: Tapahtuma A lukee tiedon, joka on päivitetty osana saman aikaista tapahtumaa B, jonka B kuitenkin peruuttaa. 3. Non-Repeatable Read (ei-toistettava luku): Tapahtuma B poistaa tai muuttaa rivejä, jotka kuuluivat saman aikaisen tapahtuman A tulosjoukkoon. 4. Phantom (kasvava lukujoukko): Tapahtuma B lisää rivejä, jotka kuuluisivat saman aikaisen tapahtuman A tulosjoukkoon. Hannu Markkanen Metropolia Ammattikorkeakoulu 5
Samanaikaisuuden hallinta Samanaikaisuuden hallinnan tavoitteena on estää yhtäaikaisten tietokantaoperaatioiden haitallinen vuorovaikutus SQL-92 standardin versiosta lähtien on määritelty neljä nk. eristävyystasoa, joiden avulla voidaan hallita samanaikaisten tapahtumien aiheuttamia ongelmia 1. READ UNCOMMITTED: katoava päivitys estetty 2. READ COMMITTED: + likainen luku estetty 3. REPEATABLE READ: + ei toistettava luku 4. SERIALIZABLE: täysin turvallinen Esimerkki eristävyystason asettavasta SQL-komennosta: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE Tiukempi eristyvyystaso huonontaa suorituskykyä, joten sopiva taso valitaan tapauskohtaisesti Hannu Markkanen Metropolia Ammattikorkeakoulu 6
Esimerkki: usean operaation tapahtuma Tililtä nosto -tapahtuma voi muodostua seuraavista kahdesta vaiheesta: 1. Päivitetään tilin saldo 2. Lisätään tilitapahtuma 1. UPDATE tili SET saldo= saldo 1000 WHERE tilinro = 123789; 2. INSERT INTO tili_tapahtuma(tilinro, aika, summa) VALUES(123789, 2011-11-27 12:14:07, -1000.00) Ylläolevat kaksi vaihetta täytyy sitoa yhdeksi tapahtumaksi, jossa suoritetaan molemmat vaiheet tai ei kumpaakaan Lisäksi molempien taulujen ko. rivit on lukittava tapahtuman ajaksi Hannu Markkanen Metropolia Ammattikorkeakoulu 7
Tapahtumanhallinta SQL:ssä SQL:ssä tapahtumia hallitaan COMMIT- ja ROLLBACK-komennoilla: Jos kaikkien tapahtumaan kuuluvien komentojen suoritus sujuu ongelmitta, tapahtuma vahvistetaan COMMIT-komentoa käyttäen COMMITT-komento tallentaa kaikkien tapahtumaan kuuluvien komentojen aiheuttamat muutokset pysyvästi tietokantaan Jos jotakin menee vikaan tapahtuman aikana, se keskeytetään käyttäen ROLLBACK-komentoa ROLLBACK palauttaa tietokannan ennen tapahtuman alkua olleeseen tilaan Jos tapahtuma on vahvistettu (COMMIT), niin sitä ei enää voida palauttaa (ROLLBACK) lähtötilanteessa olleeseen tilaan Tapahtuman aloitus tehdään eri TKHJ-tuotteissa eri tavoin: MySQL: START TRANSACTION tai BEGIN SQL server: BEGIN TRANSACTION Oracle: automaattinen Hannu Markkanen Metropolia Ammattikorkeakoulu 8
Esimerkki: transaktio MySQL:ssä BEGIN; UPDATE tili SET saldo= saldo 1000 WHERE tilinro = 123789; INSERT INTO tili_tapahtuma(tilinro, aika, summa) VALUES(123789, 2011-11-27 12:14:07, -1000.00); COMMIT; Tapahtumien hallintaan liittyviä SQL-käskyjä käytetään pääasiassa sovellusohjelmissa ja tietokannan proseduureissa Transaktioon liittyvät käskyt eivät toimi oikein phpmyadminissa, vaikka niitä voikin käyttää Hannu Markkanen Metropolia Ammattikorkeakoulu 9
Tapahtumanhallinta hajautetuissa tietojärjestelmissä Yritystason tietojärjestelmät ovat tyypillisesti hajautettuja järjestelmiä sekä tiedon varastoinnin että liiketoimintalogiikan toteuttavien sovellusten osalta Tällaisten sovellusten täytyy ylläpitää datan eheyttä (sovelluksen liiketoimintasääntöjen määritteleminä) ottaen huomioon: hajautettu pääsy monesta ohjelmistokomponentista yhteen dataresurssiin pääsy hajautettuihin resursseihin yhdestä ohjelmistokomponentista Usein on välttämätöntä, että hajautettuihin resursseihin kohdistuvat operaatiot pitää käsitellä sovelluksessa yhtenä työyksikkönä Työyksikössä kaikki osallistuvat operaatiot pitää saattaa yhdessä onnistuneiksi tai epäonnistuneiksi eli tapahtumanhallintaan liittyvää logiikkaa joudutaan sisällyttämään (myös) sovellusohjelmaan
Tapahtumanhallinnan ACID ominaisuudet Oikeaoppisella tapahtumanhallinnalla tulisi olla seuraavat neljä ominaisuutta: Atomisuus (Atomicity) Tapahtumiin kuuluvat operaatiot (niiden aiheuttamat päivitykset) tietokantaan tehdään kokonaisuudessaan tai ei ollenkaan Eheys (Consistency) Tietokannan tulee säilyä ehyessä tilassa tapahtuman jälkeen (tapahtuma ei riko eheyssääntöjä) Eristys (Isolation) Tapahtuman tekemät muutokset eivät näy muille ennen kuin tapahtuma on vahvistettu Pysyvyys (Durability) Kun tapahtuma on suoritettu loppuun, sen tallentama tieto ei saa hävitä tai muuttua myöhemmän häiriön vuoksi
Tietokannan metatieto
Systeemihakemisto (tietohakemisto) TKHJ:n täytyy pitää kirjaa kaikista tietokantaobjekteista (taulut, sarakkeet, indeksit, näkymät jne.) Tätä tietoa kutsutaan metatiedoksi (tietoa tiedosta) TKHJ tallentaa metatieto sitä varten tarkoitettuihin tauluihin - joihin voi (tietenkin) tehdä SQL-kyselyjä Systeemihakemisto on tärkeä tietolähde tietokannan suunnittelijoille, ohjelmoijille ja ylläpitäjille Vaikka SQL-92 standardi määrittelee systeemihakemistoon talletettavat tiedot ( information schema ), kaikissa tietokantatuotteissa on kuitenkin omat rakenteensa Hannu Markkanen Metropolia Ammattikorkeakoulu 13
Systeemihakemisto: esimerkkejä MySQL:stä Systeemihakemisto sisältö näkyy phpmyadminin vasemmassa navigointipalkissa (linkki information_schema ) INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA.COLUMNS INFORMATION_SCHEMA. TABLE_CONSTRAINTS INFORMATION_SCHEMA. KEY_COLUMN_USAGE INFORMATION_SCHEMA.VIEWS INFORMATION_SCHEMA. TABLE_PRIVILEGES Taulujen määrittelyt Sarakkeiden määrittelyt Eheyssääntöjen esittely Pää- ja viite-eheyssäännöissä käytettävät sarakkeet ja järjestys Näkymät Taulujen käyttöoikeudet Hannu Markkanen Metropolia Ammattikorkeakoulu 14