SQL-transaktiot Opettajan opas



Samankaltaiset tiedostot
SQL Transaktiot Opettajan opas

HAAGA-HELIA Heti-09 1 (14) ICT05: Tiedonhallinta ja Tietokannnat O.Virkki Transaktionkäsittely

HELIA 1 (14) Outi Virkki Tiedonhallinta

HELIA TIKO-05 SQL-TRANSAKTIOT 1 ( 12) ICT03D Tieto ja tiedon varastointi

Samanaikaisuuden hallinta. tietokantapalvelimessa. Tiedonhallintaa. Alkuper. versio: Jaakko Rantanen Pieniä korjauksia: Jouni Huotari 26.2.

DBTechNet. DBTech VET. SQL Transactions. Teoriaa ja käytännönharjoituksia. Suomeksi

IIO30220 Database Management / Tietokannan hallinta TAPAHTUMIEN HALLINTA JOUNI HUOTARI ( )

Tietohakemisto ja Transaktionkäsittely

SQL-transaktioiden käytännön teoriaa ja harjoituksia

Samanaikaisuuden hallinta MySQLtietokannanhallintajärjestelmässä. Vesa Tähkävuori

Tietokannanhoitaja DBA (Database Administrator) ja tietokannan hallinta

TIEDONHALLINTA - SYKSY Luento 12. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

CIMO Osallisuus-työpaja

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

RDBMS - Yhteyskäytännöt

Europassi on monipuolinen työkalu osaamisen osoittamiseen

DS-tunnusten haku - verkkoneuvonta Yleisiä huomioita DS kohta kohdalta

Sovellusarkkitehtuurit

Uusia kokeellisia töitä opiskelijoiden tutkimustaitojen kehittämiseen

D B. Transaktionhallinta - samanaikaisuus. Transaktionhallinta - samanaikaisuus. Transaktionhallinta - samanaikaisuus

Helsingin yliopisto/tktl Tietokannan hallinta, kevät Harri Laine 1 D B. Transaktionhallinta - samanaikaisuus

Tietokannan hallintajärjestelmän (DBMS) palvelut ja rakenne

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Java ja tietokannan käsittely (JDBC)

TIETOKANNANHOITAJA DBA (DATABASE ADMINISTRATOR) JA TIETOKANNAN HALLINTA

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

DebianDB pikaopas DBTechNet / M. Laiho sivu 1

käännös käännösvaiheessa tarkasettaan linkitys

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Millainen on onnistunut ICT-projekti?

Tips for teachers and expected results

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Kotitalousalan opettajankoulutuksen suunnittelu

D B. Transaktionhallinta - samanaikaisuus

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

RIVER projekti. Idea projektin takana

You can check above like this: Start->Control Panel->Programs->find if Microsoft Lync or Microsoft Lync Attendeed is listed

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

5.2 Samanaikaisuuden hallinta

Web Services tietokantaohjelmoinnin perusteet

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta

Tilannevedoseristyvyydessä esiintyvät eristyvyysanomaliat

Samanaikaisuuden hallinta Snapshot Isolationin avulla

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

TIETOKANTOJEN PERUSTEET MARKKU SUNI

IIO10200 TIETOKANTAOHJELMOINTI (4 OP) OPINTOJAKSON ESITTELY JOUNI HUOTARI

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Lisensointikuulumisia - Kustannustehokkuus Oracle lisensoinnissa

CSE-A1200 Tietokannat

IIO10200 Tietokantaohjelmointi (4 op)

Tiedonhallintajärjestelmän rakenne ja Suorituskyky

EXEC SQL BEGIN DECLARE SECTION

Rinnakkaisohjelmistot. Liisa Marttinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Kevät 2004

SQL - STRUCTURED QUERY LANGUAGE

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.3.0

Opiskelijat valtaan! TOPIC MASTER menetelmä lukion englannin opetuksessa. Tuija Kae, englannin kielen lehtori Sotungin lukio ja etälukio

7.4 Variability management

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0

Lab SBS3.FARM_Hyper-V - Navigating a SharePoint site

Efficiency change over time

VATSAHAPPO JA NÄRÄSTYSLÄÄKKEET

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus

Transaktionhallinta. R & G Chapter Tietokannan hallinta, kevät 2006, J. Li 1

Tietokantakurssit / TKTL

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

Hankkeen toiminnot työsuunnitelman laatiminen

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Attribuuttipohjainen käyttövaltuuksien hallinta Case Dreamspark Premium

Denormalisointia turvallisesti. Ougf syysseminaari Pörssitalo Helsinki Timo Raitalaakso

BDD (behavior-driven development) suunnittelumenetelmän käyttö open source projektissa, case: SpecFlow/.NET.

Asynkroninen ohjelmointi.net 4.5 versiolla

HELIA 1 (15) Outi Virkki Tiedonhallinta

API:Hack Tournee 2014

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

Windows Phone. Module Descriptions. Opiframe Oy puh Espoo

Ohjelmoinnin perusteet Y Python

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

HYÖDYNNÄ SUBSCRIPTION-ETUSI

Tikon Ostolaskujenkäsittely versio SP1

Excel-taulukkoon X- ja Y-sarakkeisiin tallennettujen koordinaattien muuntaminen paikkatietokohteiksi

SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito

Samanaikaisuuden hallinta. Optiot transaktionaalisissa työnkuluissa

FinFamily Installation and importing data ( ) FinFamily Asennus / Installation

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Hankkeiden vaikuttavuus: Työkaluja hankesuunnittelun tueksi

Maiju Mykkänen Susanna Sällinen

LINUX-HARJOITUS, MYSQL

SQL SERVER 2012 PARALLEL DATA WAREHOUSE APPLIANCE

CS-A1150 Tietokannat CS-A1150 Tietokannat / 47

Skannaaminen RightFaxiin. Pääkäyttäjän opas

Yhteistyö ja kommunikointi komission kanssa. Sinustako koordinaattori? Elina Holmberg EUTI, Tekes

Transkriptio:

SQL-transaktiot Opettajan opas sivu 1 www.dbtechnet.org DBTech VET SQL-transaktiot Opettajan opas Tekijät Martti Laiho ja Dimitris Dervos, käännös: Martti Laiho Vastuurajaukset DBTech VET Teachers projekti on rahoitettu Euroopan komission tuella. Tästä julkaisusta (tiedotteesta) vastaa ainoastaan sen laatija, eikä komissio ole vastuussa siihen sisältyvien tietojen mahdollisesta käytöstä. Julkaisussa mainittujen tuotteiden tavaramerkit ovat kyseisten tuotteiden valmistajien omia. The DBTech VET teachers project has been funded with support from the European Commission. This publication [communication] reflects the views only of the authors, and the Commission cannot be held responsible for any use that may be made of the information contained therein. Trademarks of products mentioned are trademarks of the product vendors. Tavoitteet Luotettavan tietokannan käytön tulee rakentua huolella suunnitelluista SQL-transaktioista ja nolla-toleranssilla tietovirheille. Luotettavien ja suojattujen sovellusten kehittämisessä tarvittavat tiedot ja taidot ovat kriittisiä työuraansa valmistautuville ja aloitteleville sovelluskehittäjille. Sen sijaan epäluotettavat sovellukset voivat aiheuttaa katastrofeja ja haitata työuria. Ammatillinen kasvaminen alkaa oikealla koulutuksella ja tässä opettajat ovat avainasemassa tulevien ammattilaisten valmentajina. Peruskursseilla opettajien haasteena on opiskelijoiden mielenkiinnon ja motivaation herättäminen, peruskäsitteiden, yleiskuvan ja haasteellisuuksien oikea esittäminen, tunnistaen oikea taso asioiden esittämiseksi opiskelijoille. Kohderyhmät Tämän oppaan kohderyhmään kuuluvat ammatillisten oppilaitosten ja ammattikorkeakoulujen opettajat ja ohjaajat. Esitiedot Ennen materiaalin opetuskäyttöä opettajien suositellaan (a) ottaneen osaa DBTech VET Teacher training kurssille tai workshoppiin, (b) harjoitelleen DebianDB tietokantalaboratorion henkilökohtaista käyttöä ja (c) kokeilleen ainakin niiden tietokantatuotteiden osalta kurssin tehtäväsarjojen käyttöä, mieluummin heidän suositellaan tutustuneen ainakin kahteen tietokantatuotteeseen, jotka soveltavat eri samanaikaisuushallintaa: yhteen lukituspohjaiseen (MGL) järjestelmään (esim. DB2 tai SQL server) ja yhteen moniversiointipohjaiseen (MVCC) järjestelmään (esim. MySQL/InnoDB tai Oracle).

SQL-transaktiot Opettajan opas sivu 2 Kurssimateriaalit Kurssisuunnitelma SQL Transactions Opettajan opas (this document) SQL Transactions Theory and hands-on exercises ( SQL Transactions handbook FI, käännettynä suomeksi) SQL Transactions Intro Powerpoint-esityssarja (englanniksi) Basics of SQL Transactions PDF-esitys transaktiopalveluista (englanniksi) DBTechLab DebianDB -virtuaalikone, jossa tarvittavat tietokantapalvelimet (engl.) Quick Start to DebianDB (PDF-pikaopas DebianDB:n käytöstä, englanniksi) Samanaikaisuusongelmien monivalintakysymyssarja (DBTech EXT, englanniksi) Arviointilomakkeita (web forms/questionnaires ) Pedagogiikka Aiheen opetusvaiheet tulisi aloittaa orientoivalla tuokiolla hyödyntäen huolella valittuja esityssarjoja ja demonstroiden valitun DBMS-tuotteen osalta aihetta DBTechLab virtuaalilaboratoriossa. Orientoivan istunnon tulisi olla mahdollisimman lyhyt (n 15.. 60 minuttia), minkä jälkeen opiskelijoilla tulee olla tilaisuus omatoimiseen hands-on harjoitteluun omassa DBTechLab-asennuksessaan. Vaihtoehtoisesti harjoituksia voidaan tehdä yhdessä, samassa tahdissa opettajan mallin mukaan. Kurssin pedagogiikka perustuu hands-on kokeiluihin, joissa opiskelijat voivat verifioida transaktiokäsittelyn ongelmia ja ratkaisuja seuraavin oppimisaskelin: Orientaatio/teoria kokeilut uusia ongelmia tarve lisätiedoille ^ -------------------------------------------------------------------------------- Mahdollisuuden käyttää nykyaikaisia tietokantatuotteita, joiden osaamista ja käyttötaitoja työelämässä arvostetaan, voidaan odottaa kasvattavan opiskelijoiden motivaatioita ja tarvetta investoida aikaa ja vaivannäköä osallistua tälle harjoituskurssille. Vaikka SQL-standardi tarjoaa yleisen mallin tietokantajärjestelmien SQL-toteutuksille, järjestelmät käyttäytyvät kukin tavallaan. Tärkeimpiä oppimistavoitteita on että opiskelijat oppivat kokeilemaan kurssille valittuja järjestelmiä ja todentamaan niiden käyttäytymistavat ja todelliset palvelut käytännössä. Tämä koskee erityisesti sovelluskehityksessä tarvittavaa transaktio-ohjelmointia. Opetusohjeita Sinun tulee tuntea itse asiat, joita opetat, ja olla valmis vastaamaan opiskelijoiden vaativampiinkin kysymyksiin. Älä yritä opettaa kaikkia asioita, jos aika ei riitä. Älä kiirehdi liikaa! Varmista, että opiskelijat ymmärtävät COMMIT ja ROLLBACK-komentojen palvelut. Keskity niihin aiheisiin, jotka on merkattu lihavoidulla tekstillä. Muista, että opiskelijat osaavat lukea myös itse!

SQL-transaktiot Opettajan opas sivu 3 Aiheet ja oppimistavoitteet SQL-transaktiot kurssimodulin aiheet ja oppimistavoitteet noudattavat ACM:n ja IEEE:n Computer Science Curricula 2013 opetussuunnitelman undergraduate-tason valinnaista kurssimodulimääritystä Information Management / Transaction Processing http://ai.stanford.edu/users/sahami/cs2013//strawman-draft/cs2013-strawman.pdf, sivu 91 IM/TransactionProcessing [elective] Topics: Transactions Failure and recovery Concurrency control Learning Objectives: 1. Create a transaction by embedding SQL into an application program. 2. Explain the concept of implicit commits. 3. Describe the issues specific to efficient transaction execution. 4. Explain when and why rollback is needed and how logging assures proper rollback. 5. Explain the effect of different isolation levels on the concurrency control mechanisms. 6. Choose the proper isolation level for implementing a specified transaction protocol. Kuvio 1 CS2013 Information Management (IM) / Transaction Processing Kuviossa 1 listatut CS2013:n oppimistavoitteet eurooppalaiseen VET-opetukseen sovellettuna ovat toteutettavissa seuraavasti: 1. Upotetun SQL:n (embedded SQL, ESQL) asemesta esittelemme liitteessä 2 Java/JDBC esimerkkiä käyttäen miten transaktiokäsittely tapahtuu ohjelmallisesti. Tarkoitus on, että opettaja esittelee ja demonstroi esimerkin tarkemmin. 2. Implisittisen COMMIT:in osalta oletamme, että CS2013:ssa tarkoitetaan AUTOCOMMIT moodia. DBTech VET kurssimoduulissa esitellään myös toinen implisiittisen COMMIT:in tapaus: DDL-komento aiheuttaa aina implisiittisen COMMIT:in esimerkiksi Oraclessa ja MySQL/InnoDB:ssä. 3. Transaktiopalvelun toteutus kuvattu liitteen 3 Big Picture kuvassa ja sitä tarkentavassa BasicsOfSqlTransactions.pdf-tiedoston kuvasarjassa, jota opettajan tulee selittää opiskelijoille. Kirjan luku 3 puolestaan antaa ohjeita tehokkaaseen transaktioohjelmointiin. 4. ROLLBACK komento on selitetty kirjan luvussa 1 ja sen harjoituksissa. Transaktiolokin avulla toteuttuva toipumispalvelu on selitetty luvussa 3 ja edellä mainitun PDF-tiedoston kuvasarjassa. 5. Kirjan luku 2 kuvaa tyypilliset samanaikaisen käsittelyn ongelmat, SQL-standardin määrittämät eristyvyystasot (isolation levels) näiden ratkaisuina ja tietokantatuotteiden samanaikaisuuden hallinnan perustoteutukset: monitasoinen lukitus (MGL) ja moniversiointi (MVCC). 6. Samanaikaisuusongelmien järjestelmäriippuvia ratkaisuja harjoitellaan kirjan järjestelmäkohtaisesti sovitetuilla harjoituskokoelmilla ja niiden hands-on kokeiluilla. Huom: transaction protocol CS2013:n 6. oppimistavoitteessa ei ole tarkka käsite.

SQL-transaktiot Opettajan opas sivu 4 Seuraavaa lainausta CS2013:n edeltäjän CC2008:n luvusta 3.1 Recent Trends voidaan soveltaa myös tietokantatransaktioihin ja tietokantakäsittelyn teknologioihin: The growing relevance of concurrency The development of multi-core processors has been a significant recent architectural development. To exploit this fully, software needs to exhibit concurrent behavior; this places greater emphasis on the principles, techniques and technologies of concurrency. Some have expressed the view that all major future processor developments will include concurrent features, and with even greater emphasis on the concurrency elements. Such a view implies the increased emphasis on currency will not be a passing fashion but rather it represents a fundamental shift towards greater attention to concurrency matters. (http://www.acm.org/education/curricula/computerscience2008.pdf) SQL-transaktioiden perustason kurssimodulin opiskelijoiden oppimistavoitteena on CC2008:n Bloomin taksonomiamukaelmaa soveltaen taso 2 ( ymmärtäminen ) ja osittain taso 3 ( soveltaminen ), katso CC2008 lukku 4.1.1.

SQL-transaktiot Opettajan opas sivu 5 Kurssimodulin aihelista (ohjaajan ohjeet) Osa 1 SQL-transaktioista (SQL Transaction a Logical Unit of Work, LUW) Osa1 esittelee transaktiot yhden käyttäjän ympäristössä ilman kilpailua samanaikaisten transaktioiden kanssa. Vihje: Esittely voi edetä kirjan numerojärjestyksessä tai esittelyn voi aloittaa DBTechLab (DebianDB) virtuaalikoneen esittelyllä ja kokeiluilla. Ks 1.6 1.1 Johdantoa - transaktioiden tarpeellisuudesta (Problems and need for transactions, motivation) Ongelmia: Tiedon hukkaamista Virheellistä tietoa kantaan Vääristynyttä tietoa kannasta sovelluksiin 1.2 SQL-ympäristön Client/Server käsitteistöä Huom: Opiskelijoiden tulee tuntea englanninkieliset termit, koska näitä käytetään tuotteiden käsikirjoissa ja kirjallisuudessa. SQL standardin käsitteistöä: SQL-palvelin (SQL-server), SQL-sovellus (SQL-client), SQL-istunto (SQL-session), diagnostiikkakäsittely Sovellus (client-side): ajuri (driver), dialogi (dialogue): SQL-komento (SQL command, sisältäen yhden tai useamman SQL-lauseen, SQL statement ) on palvelupyyntö (request), tulos (result) ja diagnostiikka-tietoja käsittelyn tuloksista Palvelin (server-side): säikeet (threads), puskurialueet (caches): puskuriallas (bufferpool) ym. 1.3 SQL-transaktioista ja transaktioiden rajoista (Introduction to SQL Transactions) Transaktio loogisena työyksikkönä (logical unit of work), tietojen palautusyksikkönä (unit of recovery), tietojen eheyden/ristiriidattomuuden yksikkönä (unit of consistency). Transaktiot sovellusten luotettavan tietojenkäsittelyn rakennuspalikoina, jotka siirtävät tietokannan ehyestä tilasta uuteen ehyeen tilaan (ko. transaktion suhteen). Implisiittinen tai eksplisiittinen transaktion aloitus, tietokantatuotteesta riippuen. AUTOCOMMIT -moodi: Autocommit => jokainen komento committoituu automaattisesti => ei rollbackpalvelua, ei I/O:n optimointia puskureiden avulla. Eksplisiittinen transaktio voidaan aloittaa myös AUTOCOMMIT-moodissa. Transaktionaalinen moodi: Transaktiot alkavat implisiittisesti. Sovelluksen tulee testata SQL-komennon onnistuminen tai epäonnistuminen aina välittömästi komennon suorituksen jälkeen!

SQL-transaktiot Opettajan opas sivu 6 SQL-komennon suoritus voi olla onnistunut tietokantapalvelimen kannalta, vaikka se ei olisi sitä sovelluksen kannalta. Esimerkiksi UPDATE-komento on SQLmielessä onnistunut vaikka se ei löytäisi yhtään käsiteltävää riviä. Sovelluksen kannalta onnistunut transaktio päätetään COMMIT-komennolla, kun taas sovelluksen epäonnistunut transaktio tulee päättää ROLLBACK-komennolla. Huom: Jotkut tuotteet generoivat implisiittisen COMMIT-operaation jokaisen DDLkomennon (CREATE, ALTER tai DROP) jälkeen. Useimmat tuotteet purkavat deadlock-tilanteen valitsemalla yhden transaktion uhriksi ja tekevät tälle automaatisesti ROLLBACK-operaation (tätä käsitellään myöhemmin). ROLLBACK-palvelun toteutus on hyvä selittää liitteen 3 kuva 3.1 pohjalta ja esittäen PDF-kuvasarja Basics of SQL Transactions. Selitä tässä vaiheessa seuraavat ACID-periaatteen komponentit: (A) atomisuus (atomicity) perustuen ROLLBACK-operaatioon, (C) eheys (consistency) perustuen rajoitepalveluihin (CONSTRAINTS 1 ) ja sovelluksen vastuulla olevaan testattuun transaktiologiikkaan, (D) säilyvyys (durability) jonka takaa onnistunut COMMIT-komento (ja DBA:n vastuulla olevat tietokannan ja transaktiolokien varmistusjärjestelyt. Eristyvyys (isolation) käsitellään osassa 2. 1.5 SQL-diagnostiikan tutkiminen (Diagnosing SQL errors/exceptions) Selitetään SQLcode ja SQLSTATE ilmaisimien keskeiset arvot ja käyttö sekä GET DIAGNOSTICS komentojen käyttö. [Esimerkkejä näiden käytöstä SQL-kielellä on SQL Stored Routines dokumentissa ja Java/JDBC:n osalta liitteessä 2] 1.6 Hands-on -harjoitukset Virtuaalikoneen DBTechLab (DebianDB) esittely Virtuaalikoneen lataus OVA-tiedostosta VirtualBox-asennukseen. Quick Start Guide to DebianDB dokumentin esittely ja seuraavista järjestelmistä valittujen käytön ohjattu kokeilu: MySQL/InnoDB, Oracle XE, DB2 Express-C, PostgreSQL, tai Pyrrho. Kirjan harjoituksissa käytetään MySQL/InnoDB -järjestelmää, mutta hands-onharjoituksissa voidaan käyttää mitä tahansa asennetuista järjestelmistä. Näille sovitetut skriptit löytyvät virtuaalikoneesta hakemistosta /home/student/transactions. 1 SQL-DDL:n perusrajoitteiden PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK, [NOT] NULL lisäksi joissakin tuotteissa on eksoottisia lisärajoitteita esim ASSERTION. Näiden lisäksi kaikissa järjestelmissä on business-sääntöjen ohjelmointiin käytettävissä triggerit, mutta tämä aihe on ehkä liian vaikea peruskurssille. Triggereitä esitellään DBTech VET projektin aineiston ulkopuolisessa dokumentissa SQL Stored Routines.

SQL-transaktiot Opettajan opas sivu 7 Näiden lisäksi liitteessä 1 on esitetty vastaavat harjoitukset Microsoftin SQL Server järjestelmälle sovitettuna. Harjoitukset 1.1-1.7: Autocommit -moodi / Transaktionaalinen moodi Automaattinen Rollback virhetilanteissa vain joissakin järjestelmissä Tietokannan toipuminen kesken jääneen transaktion tapauksessa Tietokannan toipuminen viimeiseen COMMIToituun transaktioon asti. Osa 2 Samanaikaiset transaktiot (Transactions in the Multi-User Environment) Yhden käyttäjän ympäristössä oikein toimivaksi testattu ohjelma ei välttämättä toimikaan ongelmitta transaktioiden kilpailutilanteissa monen käyttäjän ympäristössä => on siis opittava ymmärtämään transaktioiden samanaikaisuusongelmia ja miten ne voidaan välttää => tulee tuntea eristyvyystasot (isolation levels) => tulee ymmärtää miten järjestelmät toteuttavat eristyvyystasot samanaikaisuuden hallintamekanismeillaan (concurrency control mechanisms) 2.1 Samanaikaisuusongelmia (Concurrency Problems) Kirjoitusongelmat (Write anomalies): 2.1.1 Hukattu päivitys (Lost Update) - mahdollinen tiedostopohjaisissa järjestelmissä ei ole mahdollinen tietokantajärjestelmissä transaktion aikana. Sokea päällekirjoitus (Blind Overwriting) - Transaction päätyttyä kilpailevat jonottaneet transaktiot voivat tietoja tarkastamatta hukata päällekirjoittaen transaktion kirjoittamia tietoja (ratkaisu tähän on sensitiivinen päivitys tai optimistinen lukinta (ks RVV-tekniikka) Kokeilu: 2.1 Lukuongelmat (Read anomalies): 2.1.2 Likainen luku (Dirty Read) 2.1.3 Toistamattoman lukujoukon ongelma (Non-Repeatable Read) 2.1.3 Havaitsemattomien rivien ongelma (Phantom [Read] 2 ) 2.2 ACID-periaate transaktion ideaalina Tämä on orientointimielessä oiva transaktion ideaali opetuskäyttöön. Kuitenkin sen I-komponentti (isolation, eristyvyys) on moniselitteinen ja haasteellinen toteuttaa erilaisten eristyvyyskäsitteiden vuoksi. Useimpia tietokantajärjestelmiä mainostetaan ACID-yhteensopiviksi, mutta tämä ei pidä paikkaansa järjestelmissä, joissa on mahdollista käyttää jotakin REPEATABLE READ eristyvyyttä heikompaa eristyvyyttä (eli lähes kaikissa). Alkuperäisen eristyvyyskäsitteen toteuttaa järjestelmistämme vain Pyrrho, missä kunkin transaktion tekemät muutokset kirjataan kantaan vasta COMMIT-vaiheessa. 2 Huomaa erot: Phantom ongelma tarkoittaa rivejä, jotka voivat jäädä samanaikaisuussyistä huomaamatta. Phantom-rivien ilmestyminen tietokantaan estetään tarpeeksi laajoilla lukulukoilla. Phantom Read ongelma sallii Phantom-rivien ilmaantumisen kantaan transaktion aikana, mutta kannasta haluttaisiin nähdä vain transaktion alkuhetken tilanne. Ratkaisu tähän MVCC-tekniikan mahdollistama snapshot.

SQL-transaktiot Opettajan opas sivu 8 2.3 Eristyvyystasot (Isolation Levels) Seuraavat SQL-standardin määrittämät eristyvyystasot tarjoavat suojaa vain lukuongelmiin: Read Uncommitted (ei suojaa lukemista keskeneräisiltä tiedoilta) Read Committed (tyypillinen tietokantatuotteiden oletuseristyvyys) Repeatable Read Serializable (SQL standardin määrittämä oletuseristyvyys) Nämä on selitetty kirjan taulukoissa 2.1 ja 2.2. Standardin ajatusmallina on seuraavassa osaluvussa kuvattava luku- ja kirjoituslukkoja käyttävä MGL-lukitus. Useat järjestelmät käyttävät lukemiseen moniversiointia (MVCC), mikä muuttaa eristyvyystasojen semantiikan toisenlaiseksi: käytössä on tällöin vain seuraavat eristyvyystasot: Latest Committed (tälle käytetään yleensä nimeä Read Committed) Snapshot (esim. Oracle käyttää tälle nimeä Serializable) Huom: eristyvyystasot eivät vaikuta kirjoitusoperaatioihin! 2.4 Samanaikaisuuden hallintamekanismit (Concurrency Control Mechanisms) 2.4.1 Lukituspohjainen samanaikaisuuden hallinta (Multi-Granular Locking, MGL) käyttää implisiittisiä lukkoja: S-lukko (lukulukko, Shared) tarvitaan lukemista varten, paitsi jos eristyvyystaso on Read Uncommitted. Suojaa luettavat kilpailevien transaktioiden muutoksilta. Lukkojen vapautuminen riippuu eristyvyystasosta, mutta viimeistään transaktion lopussa. X-lukko (kirjoituslukko, exclusive) tarvitaan kirjoittamisia varten. Vapautuu vasta transaktion lopussa. Muita: intent locks + index/predicate locks + schema locks Jotkut järjestelmät, esim Oracle, DB2 ja MySQL, mahdollistavat myös eksplisiittiset taulutason lukinnat LOCK TABLE lauseilla. Oracle tarjoaa myös eksplisiittisen rivitason X-lukinnan SELECT-lauseen FOR UPDATE määreellä. Ristikkäin sattuvat lukitukset johtavat deadlock-tilanteeseen, jota on kuvattu kirjan kuvassa 2.7. 2.4.2 Moniversiointi (MVCC) välttää lukulukkojen käytön ja siis lukulukkojen odotuksen mahdollistaen seuraavat eristyvyystasot: Latest Committed (Currently Committed, Read Committed Snapshot) näyttää kannasta luettavan rivin viimeisimmän COMMITtoidun version. Snapshot - näyttää kannasta vain transaktion alkuhetkellä vallitsevan tilanteen. Ei estä phantom-rivejä, mutta ei siis näytä niitä.

SQL-transaktiot Opettajan opas sivu 9 Huom: MVCC ei eliminoi kirjoituslukkojen tarvetta! Ristikkäiset kirjotuslukot voivat johtaa deadlock-tilanteeseeen esim. UPDATE-UPDATE -skenaariossa! 2.4.3 Optimistinen samanaikaisuuden hallinta (OCC) Kaikki kirjoitusoperaatiot tehdään transaktion yksityiseen puskuriin. Transaktio näkee kannasta tilanteen, jossa yksityinen puskuri olisi jo synkronoitu kantaan. Todellisuudessa muutokset puskurista synkronoidaan kantaan vasta COMMITkomennolla ja samoja tietoja päivittäneistä transaktioista voittaa se, joka ensiksi ehtii COMMIToimaan, muille tehdään ROLLBACK, mikä tarkoittaa että puskuroidut muutokset hylätään. Tätä tekniikkaa käyttää laboratoriossamme vain Pyrrho DBMS. 2.4.4 Kooste taulukossa 2.4. 2.5 Samanaikaisuuden Hands-on -harjoitukset Harjoitus 2.1 Hukatun päivityksen ongelma Harjoitus 2.2 SELECT-UPDATE -skenaariot a) ja b) Harjoitus 2.3 UPDATE UPDATE skenaariot ristikkäisjärjestyksessä => deadlock Harjoitus 2.4 Likaisen lukemisen ongelma (Dirty Read problem) Harjoitus 2.5 Toistamattoman lukujoukon ongelma (Non-Repeatable Read) Harjoitus 2.6 Insert-Phantom ongelma Harjoitus 2.7 SNAPSHOT-kokeilu insert/update phantomin ja ghoast rivien tapauksessa 3 Suosituksia transaktio-ohjelmointiin Ei hidastavia dialogeja käyttäjän kanssa transaktion aikana Transaktioiden tulee olla lyhyitä Tarkoituksenmukainen eristyvyystaso asetetaan aina transaktion alussa, vaikka vain kirjoitusoperaatioita taustalla voi silti olla lukuoperaatioita Jokaisen SQL-komennon/lauseen jälkeen tutkittava suorituksen onnistuminen Sovelluskehittäjän on syytä tuntea käytetty DBMS tuote, sillä nämä käyttäytyvät erilailla toisistaan ja standardista poiketen On myös tunnettava käytetyn järjestelmän oma SQL-murre Yritä noudattaa ISO/SQL standardia, mikäli mahdollista. Liite 1 Osien 1 ja 2 harjoitukset sovitettuina Microsoft SQL Server Express järjestelmälle tulolistauksineen, joita voi verrata kokeiltavien järjestemien vastaaviin tuloksiin. Liite 2 Lyhyt johdanto transaktio-ohjelmointiin käyttäen Java-kieltä ja JDBC API:a. Esimerkkinä käytetään yksinkertaista pankkisiirto-ohjelmaa, josta näkyy malleja seuraaviin: try catch rakenteet SQLException-tapausten käsittelyyn Connection-olion käyttö tietokantayhteyden hallinnassa

SQL-transaktiot Opettajan opas sivu 10 Retry -malli (retry wrapper) kutsuen kokonaisluvun palauttavaa metodia, johon transaktio on ohjelmoitu. Jokainen transaktio aloitetaan asettamalla Autocommit moodi OFF-tilaan. SQL-lauseet välitetään JDBC API:ssa Connection-olion metodien parametrina Parametroitujen SQL-lauseiden esivalmistelu (Preparing) + parameteriarvojen asettelu suoritusta varrten. Tämä estää SQL injection hakkeroinnin parantaen tietoturvaa ja suoritustehoa. Tietojen päivitys ja tulosten lukeminen kannasta COMMIT ja ROLLBACK eivät ole käytettävissä komentoina vaan Connection-olion metodeina. JDBC API yhtenäistää eri tavoin käyttäytyvien järjestelmien tietokantakäsittelyä, mutta kaikkea ei voi yhdenmukaistaa ja siksi sovelluskehittäjän on tunnettava käytettävän järjestelmän käyttäytyminen. Liite 3 Liitteen kuva A3.1 esittelee tietokantapalvelin toiminnan kokonaisuutena ( Big Picture ) ja siinä transaktiolokin käytön. Transaktioloki ja sen varmistettu ja arkistoitu historia on tietokannan tärkein tiedosto(joukko) sisältäen viimeisimmät COMMIToidut transaktiot, vaikkei niitä vielä olisi ehditty kirjoittaa tietokantatiedostoihin. Liite esittelee transaktiolokin yleisperiaatteen ja CHECKPOINT-operatioiden toiminnan sekä transaktiolokin ja sen CHECKPOINT-tietueiden käytön tietokannan toipumisessa (roll-forward/rollback recovery) järjestelmän ongelmatilanteissa. [Valinaisia aiheita] Kursorikäsittely (Cursor Processing) on keskeinen keino käsitellä kyselyiden tulosjoukkoja käytettäessä upotetun SQL:n APIa (Embedded SQL) perinteisillä ( tietuekerrallaan ) 3GL-kielillä (C, C++, COBOL, Fortran,.. ) ja myös talletetuilla SQLproseduureilla (ks SQL Stored Routines dokumentti). Olio-orientoituneiden kielten API:t (JDBC API ja ADO.NET) kuorruttavat alemman tason kursorikäsittelyn Resultset/Recordset-olioiden käsittelyksi näiden metodeilla. Aiheet, joita ei ole tarkoitus käsitellä peruskurssilla vaan paremminkin syventävillä (advanced) kursseilla: Savepoint ohjelmointi, mitä harvemmin tarvitaan. Lukitusten tekniikka, timeout-käsittelyt, lock escalation, jne. Sisäkkäiset transaktiot (Nested transactions), näitä ei ole toteutettu laboratoriomme järjestelmissä Hajautetut transaktiot (Distributed transactions) Talletetut SQL-rutiinit (SQL Stored Routines) transaktiokontekstissa Lisätietoja näistä löytyy web-hakemiston www.dbtechnet.org/papers/ tiedostoista SQL_StoredRoutines.pdf SQL_ConcurrencyTechnologies.pdf RVV_Paper.pdf DistributedTransactions.pdf (ehkä joskus vuonna 2015?)

SQL-transaktiot Opettajan opas sivu 11 Sarjallistuvuusteoria, 2PL, jne sopivat HE-opiskelijoiden orientoiviin tietokantakäsittelyn opintoihin ja tutkimusohjelmiin, mutta ei VET-opiskelijoille, joille nämä aiheet veisivät turhaan vähäistä käytettävissä olevaa aikaa, ilman että aiheista olisi opiskelijoille konkreettista hyötyä nykyaikaisten DBMS-järjestelmien käytössä. Arviointi Opiskelijoille on laadittu DBTech VET lab:n arviointilomake, jota täytetään nimettömin ilman vettä se vaikuttaisi opintopisteisiin Kurssimoduulin saavutettujen oppimistavoitteiden (learning outcomes achieved) arviointia varten on laadittu monivalintakyselysarja, jota opettaja voi käyttää tasokartoitukseen tai yhtenä opiskelijoiden arvosanaperusteena. Tarkoitus on, että opettaja raportoi näistä yleisellä tasolla projektin paikalliselle DBTech VET/DBTechNet -koordinaattorille laboratorion, ohjesituksen ja lomakkeiden hienosäätöä varten.