Трансакција (базе података)

Трансакција над базом података се састоји од јединице рада извршене у оквиру система за управљање базама података (или сличног система), такве да се третира на кохерентан и поуздан начин, независна од других трансакција. Трансакције над базама података имају две главне сврхе:

  1. Да омогуће поуздано извршавање јединица рада код таквих да је могућ опоравак од грешки, и да база података остаје конзистентна чак и у случају системских грешака, када се извршавање прекине (у потпуности или делимично) и многе операције над базом остану недовршене или са нејасним статусом.
  2. Да омогуће изолацију међу програмима који истовремено приступају бази података. Без изолације, резултати програма могу да буду погрешни.

Трансакција над базом података по дефиницији мора да буде атомична (енгл. atomic), конзистентна (енгл. consistent), изолована (енгл. isolated) и трајна (енгл. durable).[1] Скраћеница која означава овај скуп особина је ACID (од почетних слова енглеских речи за ове четири особине).

Трансакције функционишу по принципу све или ништа, што значи да ће се јединица рада која чини трансакцију или у потпуности извршити над базом података или неће имати никаквог ефекта. Штавише, систем мора да изолује сваку трансакцију од осталих трансакција, резултати морају да буду у складу са постојећим ограничењима у бази података, и трансакције које су успешно извршене морају да буду забележене у трајној складишној меморији.

Сврха уреди

Базе података и други системи за складиштење података код којих је интегритет података императив често имају могућности да раде са трансакцијама како би очували тај интегритет. Појединачна трансакција се састоји од једне или више независних јединица рада, од којих свака чита и(ли) записује податке у или из базе података (или неко друго складиште података). Када се ово дешава, обично је важно да сва обрада података остави складиште података у конзистентном стању.

Пример који илуструје коришћење трансакција је пренос новца са једног банковног рачуна на други. Приликом преноса новца долази до две одвојене акције:

  1. Извесна количина новца се уклања са једног рачуна
  2. Извесна количина новца се додаје на други рачун (не обавезно иста количина новца јер банка може да наплати провизију)

Уколико се догоди да услед неке грешке у систему (прекид везе, софтверска грешка, нестанак струје...) буде извршена само једна од ове две акције, долази до неприхватљиве ситуације. Или ће новац бити уклоњен са првог рачуна а неће лећи на други рачун (клијент на губитку), или ће новац лећи на други рачун а неће бити уклоњен са првог рачуна (банка на губитку). Да би се овакве нежељене ситуације избегле, користи се трансакциони систем који ће се постарати да или обе акције успеју или да ниједна не буде извршена.

Трансакционе базе података уреди

Већина модерних система за управљање релационим базама података спада у категорију база података које подржавају трансакције: трансакционе базе података.

У систему базе података, трансакција може да се састоји од једног или више исказа за манипулацију подацима или упита, од којих сваки чита и(ли) пише у базу података. Корисницима система је конзистентност и интегритет података од изузетног значаја. Једноставна трансакција се обично задаје систему терминима језика као што је SQL обавијеним у трансакцију, по шаблону који наликује следећем:

  1. започни трансакцију
  2. изврши неколико исказа за манипулисање подацима и упита
  3. ако није дошло до грешака, сачувај (комитуј) трансакцију и заврши је
  4. ако је дошло до грешака, поништи (ролбекуј) трансакцију и заврши је

Ако није дошло до грешака у току извршавања трансакције онда систем комитује трансакцију. Операција комитовања трансакције примењује све промене извршене на подацима у току трајања трансакције, и промене чини трајним у бази података. Ако је дошло до грешке приликом извршавања трансакције, или ако корисник захтева операцију ролбековања, све измене на подацима до којих је дошло у току трајања трансакције се поништавају. Није могуће да се трансакција делимично комитује, јер би то оставило систем у неконзистентном стању.

Интерно, вишекорисничке базе података складиште и процесирају трансакције, често користећи идентификатор трансакције (XID).

SQL уреди

SQL је инхерентно трансакцион, и нова трансакција аутоматски започиње чим се претходна оконча. Неки системи база података проширују SQL наредбом START TRANSACTION који означава почетак трансакције и деактивира опцију аутоматског комитовања.

Резултат је да ће свака измена начињена након ове команде остати невидљива осталим корисницима базе података све до извршавања наредбе COMMIT. Може да буде извршена и наредба ROLLBACK, која ће поништити све измене начињене након завршетка претходне трансакције. И COMMIT и ROLLBACK окончавају трансакцију и започињу нову. Ако аутомаатско комитовање буде онемогућено коришћењем наредбе START TRANSACTION, оно ће често бити поново омогућено након завршетка трансакције.

Неки системи база података дозвољавају синониме BEGIN, BEGIN WORK и BEGIN TRANSACTION, и могу да имају и друге доступне опције.

Дистрибуиране трансакције уреди

Системи база података имплементирају дистрибуиране трансакције као трансакције над више апликација или рачунара. Дистрибуирана трансакција осигурава ACID својства над више система или складишта података и може да укључује системе као што су базе података, фајлсистеме, системе за слање порука и друге апликације. У дистрибуираној трансакцији се сервис координације стара да сви делови трансакције буду извршени над свим потребним системима. Као и код трансакције над базом података, ако било који од делова трансакције не буде извршен, цела трансакција се поништава на свим системима.

Референце уреди

Даља литература уреди

  • 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.