Napredne baze podataka
Transakcije
Tehniko veleuilite u Zagrebu
Informatiko-raunarski odjel
*Sadraj predavanja
* Transakcije
* Svojstva transakcija
* Pogreke u transakciji
* Obnova u sluaju razruenja
2 / 33
*Uvod
* Situacija (MySQL)
* Naredbe nad bazom najede se izvode slijedno
* Pridodavanje male panje onome to se u bazi trenutno dogodilo ili de
se dogoditi
* MySQL izvrava svaku naredbu kao samostalnu jedinicu
* Cilj
* Ako se odreena naredba ne izvri, sljededu nema smisla izvravati
* Robusnost aplikacija
* Potreba
* Transakcijski model
* Mogudnost grupiranja niza SQL naredbi koje de se
izvravati zajedno
3 / 33
*Transakcija
* Slijed operacija (itanja i pisanja podataka) koje jedan korisnik ili
aplikacija provodi nad bazom podataka
* Jedinica rada nad bazom podataka
* Logiki se mora provesti kao nedjeljiva cjelina
* Sastoji se od niza logiki povezanih izmjena
* Svaka transakcija unosi promjenu u bazi
* Pojedinane operacije unutar transakcije nisu bitne
same za sebe
4 / 33
*Primjer
Dijagram toka
POETAK
KLIJENT A: 1000 KN
KLIJENT B: 1000 KN
* klijent A upladuje
klijentu B 400 kn na
KLIJENTU A SKINUTI SA
bankovni raun
RAUNA 400 KN
POGRESKA
* ne smije se dogoditi da
KLIJENT A: 600 KN
KLIJENT B: 1000 KN
se novac `izgubi' ili da se
`pojavi viak'
KLIJENTU B DODATI NA
RAUN 400 KN
POGRESKA
KLIJENT A: 600 KN
KLIJENT B: 1400 KN
OK
KRAJ
*Naelo "sve ili nita"
* Svaka jedinica posla provedena nad bazom podataka mora biti:
* provedena u cijelosti
ILI
* ne smije biti provedena uopde
DA BI SE OUVAO
INTEGRITET BAZE
* Transakcija koja iz bilo kojeg razloga nije do kraja bila obavljena
morala bi biti neutralizirana - dakle svi podaci koje je ona do
trenutka prekida promijenila morali bi natrag dobiti svoje
polazne vrijednosti.
* Neizvravanje transakcije u potpunosti i
neizvravanje neutralizacije -> jedan od najeih
sluajeva pogreke u bazi!
6 / 33
*Granice transakcije
* Poetak transakcije
* START TRANSACTION ili BEGIN WORK
* Zavretak transakcije
* COMMIT WORK
* Uspjean zavretak , pohrani promjene
* Sve promjene uinjene prilikom transakcije mogu se spremiti i tada
postaju vidljive
* ROLLBACK WORK
* Neuspjean zavretak, ne snimaj promjene i poniti
sve do sada napravljeno od rijei START ili BEGIN
* Kao da se promjene nisu ni dogodile
* Koristi se za prekid transakcije unutar koje je uoena pogreka
* Slino se obavlja automatski kada je transakcija prekinuta izvana
7 / 33
*Granice transakcije
* Eksplicitno
* BEGIN WORK
* ....
* COMMIT WORK ili ROLLBACK WORK
* Implicitno
* Svaka operacija izmjene u bazi podataka predstavlja transakciju, njezin
uspjean zavretak predstavlja COMMIT, a neuspjean ROLLBACK
* Transakcije se ne mogu ugnjeivati
* Jedna aplikacija u jednom trenutku moe imati
samo jednu transakciju
* Transakcije ne podravaju opoziv
(rollback) DDL naredbi
8 / 33
*Preduvjeti
* Ako se eli da vie operacija (SQL naredbi) predstavlja jednu
transakciju, potrebno je:
* Koristiti storage engine koji podrava transakcije
InnoDB
* Postaviti varijablu AUTOCOMMIT na 0 (CJELOVITOST)
SET AUTOCOMMIT=0
* Vrijednost AUTOCOMMIT inicijalno je
postavljena na 1 (MySQL)
* Pretpostavljeni nain rada u kojem se svaka
naredba poziva i izvrava posebno
9 / 33
*Primjer
SET AUTOCOMMIT = 0;
BEGIN;
UPDATE radnik
SET koefPlaca=koefPlaca+0.5
WHERE prezimeRadnik = 'Parlov';
UPDATE radnik
SET koefPlaca=koefPlaca-0.5
WHERE prezimeRadnik = 'Studen';
COMMIT; (ili ROLLBACK)
SET AUTOCOMMIT = 1;
10 / 33
Add New Comment