Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции БДиСУБД.docx
Скачиваний:
17
Добавлен:
19.11.2019
Размер:
494.91 Кб
Скачать

Лекция4.Транзакции.Механизмтранзакций

Мыупоминали,чтотранзакции-этопакетзапросов,которыйпоследовательнопроизводитизмененияБДилибопринимается,есливсеизменениязаписиподтверждены,либоотвергается,еслихотьодинзапросзавершилсянеуспешно.ЗапросымогутсостоятьизоператоровSELECT/INSERT/UPDATE/DELETE,причемвконтекстеоднойтранзакцииможетбытькакодинтакойзапрос,такимножествозапросов.Однакопонятие"транзакция"гораздоглубжеэтогокороткогоопределения.

Транзакциизапускаютсянасторонесервера,причемстартуютонитолькопоприказуклиентскогоприложения.Завершаютработуонитакжепоприказуклиентскогоприложения,причемприуспешномзавершениитранзакцияподтверждается,апринеудаче-отвергается.Втриггерахилипроцедурахвызватьстарттранзакцииневозможно.

Транзакция,посути,этомеханизм,которыйпозволяетсовершатьразличныедействиянадбазойданных,какединыйлогическийблок,икоторыйпереводитбазуданныхизодногоцелостногосостояниявдругое.Илинепереводит,еслитранзакциябылаотвергнута.

Пояснимэтусутьнаклассическомпримерепереводаденегвбанкесодногосчетанадругой.

Допустим,нашаБДработаетбезтранзакций,инамнужнопроизвестиупомянутыйперевод.Тутмыможемпоступитьдвумяразнымиспособами:

  1. Вначалеснимаемденьгисодногосчета,затемдобавляемихкдругомусчету.

  2. Вначаледобавляемденьгикдругомусчету,затемснимаемихспервогосчета.

Теперьпредположим,чтовсерединеэтойоперациипроизошелкакой-тосбой:отключилсясерверБД,например.Впервомслучаеденьгибудутпотеряны-ониушлисодногосчета,нонедошлидодругого.Вовторомслучаеденьги"размножатся"-появятсянавторомсчету,ноприэтомостанутсяинапервом.Ивтом,ивдругомслучаепроизойдетнарушениецелостностиБД-данныестанутнедостоверны.

ОднаковсеSQL-серверыбазданныхработаютсприменениемтранзакций.Ещеговорят,чтовсеизменениябазыданныхпроисходятвконтекстеоднойилинесколькихтранзакций.InterBaseнеисключение,болеетого,InterBaseпредоставляетгораздоболеегибкиеинструментыдляуправлениятранзакциями,чеммногиедругиеSQL-серверы.Еслипроизошелкакойтосбойприпереводеденег,тотранзакциянеполучилаподтверждения,абазаданныхосталасьвпрежнемсостоянии-целостностьидостоверностьБДненарушились.

Более20летназадисследователиТеоХендериАндреасРютеропубликовалиобзор,вкоторомописывалипринципыподдержанияцелостностиБДвмного-клиентскойсреде.ЭтипринципыпринятоназыватьACID(Atomicity,Consistency,Isolation,Durability-Атомарность,Согласованность,ИзоляцияиУстойчивость).Всетранзакциидействуютпоэтимпринципам.

Атомарность(Atomicity)

Атомарностьподразумевает,чтотранзакцияявляетсяединицейработысбазойданных.ВнутритранзакцииможетпроисходитьмножествомодификацийБД,однакотранзакциядействуетпопринципу"всеилиничего".Когдатранзакцияподтверждается(Commit),топодтверждаютсявсеизмененияданных,сделанныевееконтексте.Когдаонаотвергается(откатывается,Rollback),тоотвергаютсяивсеизменения.Вслучаевозникновениясбоя,система,восстанавливаясь,ликвидируетпоследствиятранзакций,неуспевшихзавершиться.

Согласованность(Consistency)

Подсогласованностьюпонимается,чтоцелостностьбазыданныхненарушится,несмотрянато,былалиподтвержденатранзакция,илиотвергнута.Врезультатевыполнениятранзакциибазаданныхпереходитизодногоцелостногоисогласованногосостояниявдругое.Вслучаееслитранзакцияотвергнута,измененийБДнепроисходит.

НасторонесерверазасогласованностьотвечаютограниченияCHECK,ограниченияссылочнойцелостностиитриггеры.Программист,темнеменее,должентщательноспроектироватьмеханизмыбизнес-логики.