LC238D Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, uke 45 Transaksjoner og flerbrukerproblematikk.

Slides:



Advertisements
Liknende presentasjoner
GoOnline XP publisering Hvordan komme i gang med GoOnline XP. Denne presentasjonen tar deg steg for steg gjennom oppsett av nettsted med bruk av GoOnline.
Advertisements

Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
HVA ER ?.
Hans Olav Norheim
Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Avhengigheter og installering
v/Tormod Engebu, IKAVA KDRS 13. november 2013
LC238D Datamodellering og databaser Else Lervik, september 2012 Forelesning 6, Uke 39 Objektorientering i ER-modeller.
En innføring i spillet: Lag En Setning
Slik kommer du til «Personverninnstillinger»: Logg inn på Facebook.
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Au2Pc med kortleser TPpay. Hurtigbruksanvisning.
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Java database persistence framework.  SELECT by FROM postnr AS p WHERE ( SELECT DISTINCT postnr FROM addr AS a WHERE user.adrId = a.Id ) = p.postnr;
LC238D Datamodellering og databaser Introduksjon til fagfeltet Else Lervik, august 2012Forelesning 1, uke 34 Datafilerside.
Kontrollstrukturer (Kapittel 3)
Avansert SQL og problemløsning
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Databaser Verktøybok om Access med innslag av Frontpage: Snarveien til Access.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Regelmessighet (Repeterende aktivitet) Hvor finner jeg Regelmessighet?
Microsoft Office2010 ved UiO Fellesmøte IT-ansvarlige januar 2011.
IS-102 Klassedefinisjoner
Databasehåndtering med MySQL
Eksempel AOA (Activity On Arc)
23. januar 2004TDT4285 Planl&drift IT-syst1 Tjeneroppgraderinger TDT4285 Planlegging og drift av IT-systemer Anders Christensen, IDI.
SQL The questing beast Sir Thomas Mallory. Codds krav 5.Krav om omfattende språk for datahåndtering Det må finnes et relasjonelt språk som støtter datadefinisjon,
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, uke 44 Å programmere databasetjeneren – JavaDB.
Relasjonsmodellen, del II
Normalisering Framstillingen avviker noe fra læreboka,
LC238D Datamodellering og databaser Else Lervik, september 2012 Forelesning 6, Uke 39 Objektorientering i ER-modeller.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Siste forelesning ER/EER-modellering
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
LC238D Datamodellering og databaser Else Lervik, september 2011 Forelesning 6, Uke 38 Objektorientering i ER-modeller.
Sqlite Et lite eksempel på en SQL- database. SQL kan startes på ulike måter Kommandolinjeversjon or Windows –Programmet må innstalleres Hentes fra
Apache POI.
SQLHiA Transaksjoner. SQLHiA TransaksjonDefinisjon En transaksjon er en serie av en eller flere SQL-statement som til sammen danner en logisk enhet. Med.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
Structured Query Language Kræsj-kurs
Eksempel på SQL ”SQL-setninger” har en struktur som likner på ”naturlig språk”, med ”verb, subjekter og adjektiver”. SQL-setningene begynner alltid med.
Hvordan kan foreldre bruke de vangligste funksjonene i Itslearning.com
VOD. VOD- Vegobjektdialog Åpne eksisterende vegobjekt Nytt vegobjekt.
Linq To SQL Fagdag 20. November DataContext  DataContexten er mappingen mot databasen –Generer objekter for alle entiteter (tabeller), med properties.
RSS og Alerts JDD 21. mai Ting jeg skal si litt om RSS Alerts (TOC) Hvordan fungerer disse funksjonene? Hva kan de brukes til?
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
De 222 mest brukte ordene i det norske språket..
Se ellers læreboka, kap , side
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Opplæring: Pålogging Prosedyre for logge på og av, låse og åpne PC’er DatoVersjonForfatterGodkjent avEndringer utført André S. MathiesenTore.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
HUMIT1731 Hypermedier Introduksjon til XSL Transformation (XSLT)
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 10 Exceptions Handtering av exceptions Ein exception er eit objekt som representerer ein feil eller eit unntak Exceptions blir kasta av.
November 2015 AF/SSD FS og studentbetaling ved UiO Rutinen for semesteravgift og privatistgebyr Avdeling for fagstøtte / Seksjon for studieadministrative.
Registrering av testresultater fra mobiltelefon
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Oversikt Access Hva en bør beherske så langt. Tabeller Felt Typer (heltall, desimaltall, tekst, Boolean) Primary Key.
TDT4105 Informasjonsteknologi, grunnkurs
MBN, USSD og stjerne/firkant koder 15.mai Kåre Aunan
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

LC238D Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, uke 45 Transaksjoner og flerbrukerproblematikk Transaksjonerside 2-4 Låseteknikkerside 5 Isolasjonsnivåerside 6-7 Flerbrukerproblemer i fbm utførelse av transaksjonerside 8-12 Gjenoppretting av en databaseside 13 Læreboka, kapittel 8.2, side

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 2 Transaksjoner •En transaksjon er en logisk enhet med arbeid (ett sett med database- operasjoner) som må utføres i sin helhet. Eksempler: –overføre penger fra en konto til en annen –eksempler JSF-forelesning 9: •registrere en boktittel og 1.eksemplar av tittelen (insert + insert) •registrere nytt eksemplar med nr 1 større enn hittil brukte (select + insert) •Dersom alt gikk bra, bekreftes transaksjonen (commit), hvis ikke rulles den tilbake (rollback) •Egenskaper ved transaksjoner (ACID) –En transaksjon er atomisk. Enten utføres hele transaksjonen, eller ingenting. –Transaksjonen må føre databasen fra en stabil tilstand til en annen stabil tilstand. Datakonsistens må sikres. –Dataene som berøres av en transaksjon må isoleres, slik at ikke andre transaksjoner kan arbeide med de samme dataene. Forskjellige nivåer av isolering. –Etter at en transaksjon er avsluttet, skal endringene lagres permanent og bli synlige for andre brukere. (”durability”). •Samtidige transaksjoner må utføres som om de ble utført i serie, dvs. etter hverandre. –Det betyr at transaksjonene av og til vil måtte vente på hverandre •Transaksjoner er enheten både ved utførelse og ved gjenoppretting (recovery).

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 3 Transaksjoner og AUTOCOMMIT •AUTOCOMMIT er en tilstand som kan slås av og på •AUTOCOMMIT er en egenskap som den enkelte klient har i forhold til sin databasetilknytning •AUTOCOMMIT på betyr at –oppdateringer av databasen (INSERT/DELETE/UPDATE) skjer umiddelbart etter hver enkelt SQL-setning. Ikke mulig å angre ved å bruke ROLLBACK •JDBC –AUTOCOMMIIT på er standard try { forbindelse.setAutoCommit(false); // slå av autocommit før transaksjoner... mer enn én UPDATE/INSERT/DELETE-setning) utføres... forbindelse.commit() } catch (SQLException e) { rullTilbake(); // vi angrer det som måtte være gjort (forbindelse.rollback())... skriv eventuelle meldinger... } finally { // utføres alltid (unntatt hvis System.exit() påtreffes før)... lukk databaseressurser... slåPåAutoCommit(); // forbindelse.setAutoCommit(true); } –Stol ikke på at det ene (commit) eller det andre (rollback) skjer dersom man ikke avslutter på ryddig måte •JavaDB-klienten ij –AUTOCOMMIT på er standard •Oracle-klientene SQL*Plus og SQLpal –AUTOCOMMIT av er standard –Kommando: set autocommit on/off;

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 4 Transaksjoners start og slutt •Vanlig at hver enkelt SQL-setning utgjør en transaksjon. –Det vil for de fleste DBMS si at bryteren AUTOCOMMIT er på •Hvis vi vil at en transaksjon skal bestå av flere setninger, må vi definere start og slutt av transaksjonen •Transaksjonen starter –vanligvis (Oracle, JavaDB m.fl.) •sørg for at AUTOCOMMIT er slått av •kjør deretter setningene som utgjør transaksjonen –noen DBMS har egen syntaks for dette, f.eks. BEGIN TRANSACTION •Transaksjonen slutter ved første –COMMIT eller ROLLBACK –husk å sette tilbake AUTOCOMMIT

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 5 Låseteknikker •Låsing begrenser andre transaksjoners tilgang til dataene. •Granulariteten, dvs hvor stor del av databasen som låses: –Verdi, rad, tabell eller hele databasen – kalles ”objekt” nedenfor –Låsing på radnivå er standard i Oracle og JavaDB. •To typer lås –Delt lås (shared lock) - leselås: •Brukes kun ved lesing og godtar at flere transaksjoner leser de samme dataene. •Flere transaksjoner kan ha delt lås på de samme objektene. •Dersom en transaksjon holder delt lås på et objekt, kan andre transaksjoner lese, men ikke endre dataene. –Eksklusiv lås (exclusive lock) – skrivelås: •Kan settes av kun én transaksjon av gangen. •Forutsetter at det ikke er andre låser på objektet, heller ikke delte låser. •Andre transaksjoner har ikke tilgang til dataene i det hele tatt. •To-fase-låsing –Garanterer korrekt utførelse av transaksjoner –Fase 1, utvidelsesfasen: Låser settes etter hvert som de trengs i transaksjonen. –Fase 2, avviklingsfasen (COMMIT/ROLLBACK): Alle låsene åpnes på en gang. •Vranglås kan oppstå hvis to transaksjoner blir stående å vente på hverandre. Løses ved –timeout. En av transaksjonene ofres (tilbakerulles) –at alle låser settes ved begynnelsen av transaksjonen. Ueffektivt. –avanserte løsninger prøver å oppdage mulige vranglåser på forhånd

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 6 Ulike isolasjonsnivåer •Jmf prinsippet om Isolasjon: Dataene som berøres av en transaksjon må isoleres, slik at ikke andre transaksjoner kan arbeide med de samme dataene. •Fullstendig isolasjon (Isolasjonsnivå SERIALIZABLE) –SELECT setter delt lås –UPDATE setter eksklusiv lås •I praksis er dette et for strengt krav •Ulike nivåer defineres ut fra i hvor stor grad de bryter kravet til fullstendig isolasjon (SERIALIZABLE) –Ikke-overgitte data (“Dirty Read”) •Transaksjon B kan se data som transaksjon A har endret, men ikke bekreftet (committed). Det vil si at dataene kan bli rullet tilbake. (“dirty read”) –Ikke-repeterende lesing av data •B leser en verdi som A senere endrer. Hvis B leser verdien på nytt i samme transaksjon, men nå ser den endringen A foretok, har vi et eksempel på ”ikke-repeterende lesing” –Fantomlesing •B leser et sett med rader begrenset av et WHERE-uttrykk •A legger inn data som passer inn i intervallet gitt av WHERE-uttrykket •B leser på nytt, men ser nå også de dataene A la inn (data som tidligere ikke fantes, fantomdata)

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 7 Isolasjonsnivåer, forts. Nivå (ANSI SQL)Dirty readNonrepeatable ReadPhantom Read READ UNCOMMITTEDtillatt READ COMMITTEDikke tillatttillatt REPEATABLE READikke tillatt tillatt SERIALIZABLEikke tillatt •En implementasjon av et isolasjonsnivå kan være strengere enn dette •Vanlig isolasjonsnivå er READ COMMITTED. Det vil si at select aldri låser data. Data låses kun når insert, delete, update påtreffes. For å få til låsing med select, må du sette isolasjonsnivået til SERIALIZABLE.

Datamodellering og databaser Else Lervik, november 2012 side 8 •Vedlagte Java-program kan brukes til å finne ut hvilke nivåer et DBMS støtter. –Oracle støtter READ COMMITTED (standard) og SERIALIZABLE. –Java DB støtter alle nivåene, men READ COMMITTED er standard. – •Dersom du trenger å bruke et høyt isolasjonsnivå i en transaksjon, husk å sette tilbake til standard etter bruk. •JDBC, interface java.sql.Connection •int getTransactionIsolation() •void setTransactionIsolation(int level) Isolasjonsnivåer og DBMS-støtte

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 9 Flerbrukerproblemer som kan oppstå ved transaksjonsutføring •Problemene kan klassifiseres i tre grupper –Tapt oppdatering, dvs. at en oppdatering blir skrevet over av en annen oppdatering –Ikke-bekreftede data, dvs. at en transaksjon får se data fra en annen transaksjon før disse er bekreftet –Inkonsistent uthenting av data, dvs. at en transaksjon leser data som er delvis oppdatert av en annen transaksjon •Som oftest løses problemene ved at dataene som oppdateres reserveres (”låses”) for den transaksjonen som først begynte å arbeide med dem. •Forsøker i det lengste å unngå å sette isolasjonsnivå SERIALIZABLE •Husk også å vurdere om ”optimistisk utførelse” kan løse problemet –Eksempel: JSF-forelesning 8: registrere nytt eksemplar med nr 1 større enn hittil brukte (select + insert) •Select max() •Insert into (maksnr + 1) •Hvis sqlexception (primærnøkkelfeil), prøv på nytt et begrenset antall ganger

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 10 Utprøving av flerbrukerproblematikken •Testdata DROP TABLE konto; CREATE TABLE konto( kontonr INTEGER PRIMARY KEY, saldo INTEGER NOT NULL); INSERT INTO konto(kontonr, saldo) VALUES(1, 35); INSERT INTO konto(kontonr, saldo) VALUES(2, 120); INSERT INTO konto(kontonr, saldo) VALUES(3, 100); INSERT INTO konto(kontonr, saldo) VALUES(4, 35); INSERT INTO konto(kontonr, saldo) VALUES(5, 100); INSERT INTO konto(kontonr, saldo) VALUES(6, 30);

•Åpne to forekomster av en JavaDB-klient og prøv ut •Kan ikke kjøre klientene i NetBeans, må bruke kommandobasert grensesnitt •Oppsett av miljøvariabler, se •Start databasetjeneren –Enten i NetBeans –Eller fra kommandolinjen med skriptet \bin\startNetworkServer.bat •I siste tilfelle bør du huske å stoppe tjeneren med kommandoen \bin\stopNetworkServer.bat •Åpne to kommandovinduer –Start en databaseklient i hvert vindu med skriptet \bin\ij.bat •Syntaks JavaDB –autocommit on/off; –set isolation read committed; –set isolation serializable; - se også neste side! –commit; –rollback; Datamodellering og databaser Else Lervik, november 2012 side 11

Java DB, navn på isolasjonsnivå Table 1. Mapping of JDBC transaction isolation levels to Derby isolation levels Isolation levels for JDBCIsolation levels for SQL Connection.TRANSACTION_READ_UNCOMMITTED (ANSI level 0)UR, DIRTY READ, READ UNCOMMITTED Connection.TRANSACTION_READ_COMMITTED (ANSI level 1)CS, CURSOR STABILITY, READ COMMITTED Connection.TRANSACTION_REPEATABLE_READ (ANSI level 2) setter delt lås på intervall omfattet av where-uttrykk i select-setning, men forhindrer ikke insert. (krever søk på index, ellers låses hele tabellen) RS Connection.TRANSACTION_SERIALIZABLE (ANSI level 3) setter delt lås på intervall omfattet av where-uttrykk i select-setning. (krever søk på index, ellers låses hele tabellen) RR, REPEATABLE READ, SERIALIZABLE Datamodellering og databaser Else Lervik, november 2012 side 12

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 13 Flerbrukerproblem A: Tapt oppdatering (Ingen låsing) TidTransaksjon AVerdi som A ser Transaksjon BVerdi som B ser 1select saldo from konto where kontonr = select saldo from konto where kontonr = tar ut 30 kr update konto set saldo = 5 where kontonr = 1 5 4tar ut 20 kr update konto set saldo = 15 where kontonr = commit 6 Merk at B tar beslutning om å endre saldo på feil grunnlag. Hvilke resultater kan vi få ved seriell utførelse av transaksjonene? Løser standard isolasjonsnivå (READ COMMITTED) problemene? Alternativer?

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 14 Flerbrukerproblem B: Leser ikke-bekreftede data (Ingen låsing) Merk at B tar beslutning om å endre kvantum på feil grunnlag. Resultater ved seriell utføring: Løser standard isolasjonsnivå (READ COMMITTED) problemene? TidTransaksjon AVerdi som A ser Transaksjon BVerdi som B ser 1select saldo from konto where kontonr = setter inn 65 kr update konto set saldo = 100 where kontonr = select saldo from konto where kontonr = (”dirty read”) 4rollback 5tar ut 50 kr update konto set saldo = 50 where kontonr = commit

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 15 Flerbrukerproblem C: Inkonsistent uthenting av data (Ingen låsing) TidTransaksjon AVerdier som A ser Transaksjon B (overføring av penger fra en konto til en annen) 1select sum(saldo) from konto;420 2update konto set saldo = saldo - 20 where kontonr = 3 3select sum(saldo) from konto;400 4update konto set saldo = saldo + 20 where kontonr = 2 5commit Resultater ved seriell utføring? Løser standard isolasjonsnivå (READ COMMITTED) problemene?

Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, side 16 Gjenoppretting av en database (”recovery”) •Mekanismer for å gjenopprette en database etter feil –periodiske sikkerhetskopier –logg som inneholder •endringer (dataverdi før og etter endring) siden forrige sikkerhetskopi, inkl transaksjoner som ikke er bekreftet •sjekkpunkt = tidspunkt som viser når permanente endringer ble utført (databasebufrene skrives til disk) •transaksjoner kan pågå på et sjekkpunkt •Bruk av sikkerhetskopi + loggfil –kan være tidkrevende –nyeste sikkerhetskopi legges inn –hele loggfilen kjøres •bekreftede transaksjoner kjøres på nytt •tilbakerullede transaksjoner glemmes •transaksjoner under utførelse tilbakerulles, og kjøres eventuelt på nytt senere •Bruk av loggfil pga uforutsette feil –går tilbake til siste sjekkpunkt –pass på at transaksjonen som forårsaket feilen ikke kjøres på nytt