Transakcija (baze podataka)

S Vikipedije, slobodne enciklopedije

Transakcija nad bazom podataka se sastoji od jedinice rada izvršene u okviru sistema za upravljanje bazama podataka (ili sličnog sistema), takve da se tretira na koherentan i pouzdan način, nezavisna od drugih transakcija. Transakcije nad bazama podataka imaju dve glavne svrhe:

  1. Da omoguće pouzdano izvršavanje jedinica rada kod takvih da je moguć oporavak od greški, i da baza podataka ostaje konzistentna čak i u slučaju sistemskih grešaka, kada se izvršavanje prekine (u potpunosti ili delimično) i mnoge operacije nad bazom ostanu nedovršene ili sa nejasnim statusom.
  2. Da omoguće izolaciju među programima koji istovremeno pristupaju bazi podataka. Bez izolacije, rezultati programa mogu da budu pogrešni.

Transakcija nad bazom podataka po definiciji mora da bude atomična (engl. atomic), konzistentna (engl. consistent), izolovana (engl. isolated) i trajna (engl. durable).[1] Skraćenica koja označava ovaj skup osobina je ACID (od početnih slova engleskih reči za ove četiri osobine).

Transakcije funkcionišu po principu sve ili ništa, što znači da će se jedinica rada koja čini transakciju ili u potpunosti izvršiti nad bazom podataka ili neće imati nikakvog efekta. Štaviše, sistem mora da izoluje svaku transakciju od ostalih transakcija, rezultati moraju da budu u skladu sa postojećim ograničenjima u bazi podataka, i transakcije koje su uspešno izvršene moraju da budu zabeležene u trajnoj skladišnoj memoriji.

Svrha[uredi | uredi izvor]

Baze podataka i drugi sistemi za skladištenje podataka kod kojih je integritet podataka imperativ često imaju mogućnosti da rade sa transakcijama kako bi očuvali taj integritet. Pojedinačna transakcija se sastoji od jedne ili više nezavisnih jedinica rada, od kojih svaka čita i(li) zapisuje podatke u ili iz baze podataka (ili neko drugo skladište podataka). Kada se ovo dešava, obično je važno da sva obrada podataka ostavi skladište podataka u konzistentnom stanju.

Primer koji ilustruje korišćenje transakcija je prenos novca sa jednog bankovnog računa na drugi. Prilikom prenosa novca dolazi do dve odvojene akcije:

  1. Izvesna količina novca se uklanja sa jednog računa
  2. Izvesna količina novca se dodaje na drugi račun (ne obavezno ista količina novca jer banka može da naplati proviziju)

Ukoliko se dogodi da usled neke greške u sistemu (prekid veze, softverska greška, nestanak struje...) bude izvršena samo jedna od ove dve akcije, dolazi do neprihvatljive situacije. Ili će novac biti uklonjen sa prvog računa a neće leći na drugi račun (klijent na gubitku), ili će novac leći na drugi račun a neće biti uklonjen sa prvog računa (banka na gubitku). Da bi se ovakve neželjene situacije izbegle, koristi se transakcioni sistem koji će se postarati da ili obe akcije uspeju ili da nijedna ne bude izvršena.

Transakcione baze podataka[uredi | uredi izvor]

Većina modernih sistema za upravljanje relacionim bazama podataka spada u kategoriju baza podataka koje podržavaju transakcije: transakcione baze podataka.

U sistemu baze podataka, transakcija može da se sastoji od jednog ili više iskaza za manipulaciju podacima ili upita, od kojih svaki čita i(li) piše u bazu podataka. Korisnicima sistema je konzistentnost i integritet podataka od izuzetnog značaja. Jednostavna transakcija se obično zadaje sistemu terminima jezika kao što je SQL obavijenim u transakciju, po šablonu koji nalikuje sledećem:

  1. započni transakciju
  2. izvrši nekoliko iskaza za manipulisanje podacima i upita
  3. ako nije došlo do grešaka, sačuvaj (komituj) transakciju i završi je
  4. ako je došlo do grešaka, poništi (rolbekuj) transakciju i završi je

Ako nije došlo do grešaka u toku izvršavanja transakcije onda sistem komituje transakciju. Operacija komitovanja transakcije primenjuje sve promene izvršene na podacima u toku trajanja transakcije, i promene čini trajnim u bazi podataka. Ako je došlo do greške prilikom izvršavanja transakcije, ili ako korisnik zahteva operaciju rolbekovanja, sve izmene na podacima do kojih je došlo u toku trajanja transakcije se poništavaju. Nije moguće da se transakcija delimično komituje, jer bi to ostavilo sistem u nekonzistentnom stanju.

Interno, višekorisničke baze podataka skladište i procesiraju transakcije, često koristeći identifikator transakcije (XID).

SQL[uredi | uredi izvor]

SQL je inherentno transakcion, i nova transakcija automatski započinje čim se prethodna okonča. Neki sistemi baza podataka proširuju SQL naredbom START TRANSACTION koji označava početak transakcije i deaktivira opciju automatskog komitovanja.

Rezultat je da će svaka izmena načinjena nakon ove komande ostati nevidljiva ostalim korisnicima baze podataka sve do izvršavanja naredbe COMMIT. Može da bude izvršena i naredba ROLLBACK, koja će poništiti sve izmene načinjene nakon završetka prethodne transakcije. I COMMIT i ROLLBACK okončavaju transakciju i započinju novu. Ako automaatsko komitovanje bude onemogućeno korišćenjem naredbe START TRANSACTION, ono će često biti ponovo omogućeno nakon završetka transakcije.

Neki sistemi baza podataka dozvoljavaju sinonime BEGIN, BEGIN WORK i BEGIN TRANSACTION, i mogu da imaju i druge dostupne opcije.

Distribuirane transakcije[uredi | uredi izvor]

Sistemi baza podataka implementiraju distribuirane transakcije kao transakcije nad više aplikacija ili računara. Distribuirana transakcija osigurava ACID svojstva nad više sistema ili skladišta podataka i može da uključuje sisteme kao što su baze podataka, fajlsisteme, sisteme za slanje poruka i druge aplikacije. U distribuiranoj transakciji se servis koordinacije stara da svi delovi transakcije budu izvršeni nad svim potrebnim sistemima. Kao i kod transakcije nad bazom podataka, ako bilo koji od delova transakcije ne bude izvršen, cela transakcija se poništava na svim sistemima.

Reference[uredi | uredi izvor]

Dalja literatura[uredi | uredi izvor]

  • Philip A. Bernstein, Eric Newcomer. Principles of Transaction Processing., Morgan Kaufmann (Elsevier). (2nd изд.). 2009. ISBN 978-1-55860-623-4. 
  • Gerhard Weikum, Gottfried Vossen. Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery. Morgan Kaufmann. 2001. ISBN 978-1-55860-508-4.