double arrow

Понятие транзакции. Основные свойства транзакций

Управление транзакциями.

Все современные промышленные СУБД и часть настольных поддерживают работу с транзакциями. Механизм транзакций важен во многих отношениях. Мы в настоящем курсе рассмотрим его с двух точек зрения – как основу для восстановления целостности баз данных и как часть механизма управления одновременной работой с данными нескольких пользователей. Но для того, чтобы понять роль транзакций необходимо рассмотреть транзакции как таковые. В первую очередь, дадим определение понятия «транзакция».

Транзакция - (англ. transaction) — группа последовательных операций с базой данных, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта. Транзакция переводит базу данных из одного непротиворечивого состояния в другое.

То есть, транзакция, вне зависимости от количества входящих в нее операций, рассматривается как единое целое, и может либо целиком завершиться успешно, либо не выполниться вообще, в случае, если в какой-либо из операций произойдет сбой. При успешном завершении транзакция фиксируется, выполняется операция «commit». При возникновении сбоя уже выполненные действия отменяются и транзакция «откатывается», выполняется операция «rollback».

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

Приведем одну из возможных последовательностей действий, нужных для выполнения этой операции:

1. Проверить доступность счета, с которого предполагается списать деньги, и достаточность средств на нём. Это операция чтения данных, возможно, из нескольких таблиц).

2. Проверить доступность счета, на который предполагается зачислить деньги (например, счет может быть закрыть, временно заблокирован и т. п.). Это также операция чтения данных.

3. Уменьшить значение остатка на счете-источнике. Это операция модификации данных.

4. Увеличить значение остатка на счете-получателе. Это операция модификации данных.

5. Создать запись о проведенной операции в журнале операций. Это операция создания новой записи.

Можно предложить и другие варианты выполнения этой операции, но главным является то, что вся эта последовательность либо должна выполняться, либо ни одна из операций не должна быть выполнена. Очевидно, что если мы остановимся, скажем, на шаге 4, то средства со счета-источника просто исчезнут – будут списаны «в никуда». То есть, согласованность данных будет нарушена. Кроме того, необходимо гарантировать, что в процессе выполнения транзакции с задействованными в ней счетами не будут выполняться никакие другие операции. В самом деле, если после того, как мы проверили достаточность средств на счете-источнике, эти средства будут с него списаны другой операцией – мы опять-таки скорее всего столкнемся с нарушениями согласованности данных.

Разумеется, поддержка механизма транзакций технически может быть и очень сложной – при наличии десятков и сотен пользователей и тысяч обращений к данным обеспечить независимость этих обращений друг от друга, а также возможность отмены операций и возврата базы данных к исходному состоянию непросто. Для реализации этого механизма могут задействоваться различные средства, но есть свойства, которыми должны обладать транзакции и поддерживающая их система. Обычно для обозначения этих свойств используют аббревиатуру ACID – Atomicity, Consistency, Isolation, Durability. В переводе на русский – Атомарность, Согласованность, Изолированность и Долговечность. Рассмотрим эти свойства подробнее.

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

Согласованность – достаточно сложное понятие, которое несколько шире понятия целостности данных. Если целостность данных – это выполнение всех имеющихся в БД ограничений целостности (внутризаписных, межзаписных, ограничений внешних ключей и так далее), то согласованность означает еще и соответствие базы данных бизнес-правилам. В частности, из ограничений целостности может следовать запрет на отрицательное значение остатка на счете (то есть, соответствующего атрибута), но, скажем, требования равенства списываемой и зачисляемой суммы при переводе средств со счета на счет – это уже бизнес-правило, которое при помощи ограничений целостности не выразить.

Как уже было сказано, предполагается, что транзакция переводит БД из одного согласованного состояния в другое, но обеспечить это должны программисты, задающие последовательность операций. Роль СУБД здесь – гарантировать, что все операции будут выполнены успешно (или не будут выполнены вообще). Кроме того, в процессе выполнения транзации БД может проходить через ряд несогласованных состояний (скажем, в приведенном выше примере с переводом средств система несогласованна после выполнения операции 3 до выполнения операции 4).

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

Долговечность – это свойство транзакции сохраняться в системе «навсегда» после успешного завершения. Очевидно, что в процессе работы СУБД могут возникать сбои оборудования, отключения питания, иные ошибки, но гарантируется, что если выдано сообщение об успешном завершении транзакции, то изменения, внесенные ей в данные, сохранятся в любом случае и когда состояние базы данных будет восстановлено после сбоя, эти изменения никуда не денутся. Разумеется, речь не идет о случаях, когда полностью вышел из строя носитель информации, на котором находилась база данных, и ее пришлось восстанавливать из резервной копии. Хотя даже и в этих случаях, как будет обсуждаться далее, выполненные транзакции иногда могут быть восстановлены.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: