Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


См.р.№15 Транзакції та їх властивості.



Питання до самоконтролю:

 

  1. Пояснити поняття «транзакція».
  2. Які властивості трансакцій?
  3. Які функції виконують розширені трансакції?
  4. Які дії виконує фіксація трансакції?
  5. Яке призначення операторів обробки трансакції?
  6. Які виникають проблеми при одночасному доступі?

 

Транзакции и их свойства

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

Традиционные транзакции характеризуются четырьмя свой­ствами: атомарности, согласованности, изолиро­ванности, долговечности (прочности) — ACID (Atomicity, Consistency, Isolation, Durability). Иногда традицион­ные транзакции называют ACID-транзакциями. Упомянутые выше свойства означают следующее:

• атомарность — операции транзакции образуют нераздели­мый, атомарный блок с определенным началом и концом. Этот блок либо выполняется от начала до конца, либо не выполняется вообще. Если в процессе выполнения тран­закции произошел сбой, происходит откат ( backup , воз­врат) к исходному состоянию;

• согласованность гарантирует, что по мере выполнения транзакций данные переходят из одного согласованного состояния в другое — транзакция не разрушает взаимной согласованности данных;

• изолированность — одновременный доступ транзакций различных приложений к разделяемым ресурсам, коорди­нируется таким образом, чтобы эти транзакции не влияли друг на друга. Конкурирующие за доступ к базе данных транзакции физически обрабатываются последовательно, изолированно друг от друга, но для пользователей это вы­глядит так, как будто они выполняются параллельно;

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

Расширенные транзакции допускают формирование из ACID-транзакций иерархических структур. Если конкретная модель ослабляет некоторые из требований ACID, то речь идет об ослабленной транзакции.

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

Фиксация транзакции — это действие, обеспечиваю­щее запись на диск изменений в базе данных, которые были сде­ланы в процессе выполнения транзакции. До тех пор пока тран закция не зафиксирована, возможны аннулирование этих изме-нений, восстановление базы данных в то состояние, в котором она была на момент начала транзакции. Фиксация означает, что 1 все результаты выполнения транзакции становятся постоянны­ми. Они станут доступны другим транзакциям только после того, как текущая транзакция будет зафиксирована. До этого момента 1 все данные, затрагиваемые транзакцией, будут «видны» пользо­вателю в состоянии на момент до начала текущей транзакции.

Если в процессе выполнения транзакции случилось нечто та­
кое, что делает невозможным ее нормальное завершение, база I
данных должна быть возвращена в исходное состояние. Откат
транзакции — это действие, обеспечивающее аннулирование 1
всех изменений данных, которые были сделаны в теле текущей
незавершенной транзакции.                                              ;

Каждый оператор в транзакции выполняет свою часть рабо-] ты, но для успешного завершения всей работы в целом требуется безусловное завершение их всех. Группирование операторов в транзакции сообщает СУБД, что вся эта группа должна быть вы­полнена как единое целое, причем такое выполнение должно поддерживаться автоматически.

Операторы обработки транзакций. В стандарте ANSI/ISO SQL определены модель транзакций и функции операторов commit и rollback. Стандарт определяет, что транзакция начи­нается с первого SQL-оператора, инициируемого пользователем I или содержащегося в программе. Все последующие SQL-опера­торы составляют тело транзакции. Транзакция завершается од­ним из четырех возможных способов (рис. 4.37):

• оператор commit означает успешное завершение транзак­ции; его использование делает постоянными изменения, внесен­ные в базу данных в рамках текущей транзакции;

• оператор rollback прерывает транзакцию, отменяя изме­нения, сделанные в базе данных в рамках этой транзакции; но­вая транзакция начинается непосредственно после использова­ния rollback;

• успешное завершение программы, в которой была иниции- I рована текущая транзакция, означает успешное завершение транзакции (как будто был использован оператор commit);

ошибочное завершение программы прерывает транзакцию | (как будто был использован оператор rollback)


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

Откат и фиксация транзакций становятся возможными благо­даря журналу транзакций. Он используется следующим образом.

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

При выполнении любого оператора, который модифицирует базу данных, СУБД автоматически заносит очередную запись в журнал транзакций. Запись состоит из двух компонентов: пер­вый — это состояние строки до внесения изменений, второй — ее же состояние после внесения изменений. Только после зане­сения записи в журнал транзакций СУБД действительно моди­фицирует базу данных. Если после данного оператора был вы­полнен оператор commit, to в журнале транзакций делается от-

метка о завершении текущей транзакции, если же следовал оператор rollback, to СУБД просматривает журнал транзакций и отыскивает записи, отражающие состояние измененных строк до модификации. Используя их, СУБД восстанавливает те стро­ки в таблицах базы данных, которые были модифицированы те­кущей транзакцией — таким образом аннулируются все измене­ния в базе данных.

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

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

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

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

• в процессе выполнения транзакции пользователь (програм­ма) «видит» только согласованные состояния базы данных. Пользователь никогда не может получить доступ к неза­фиксированным изменениям в данных, достигнутым в ре­зультате действий другого пользователя (программы);

• если две транзакции, А и В, выполняются параллельно, то СУБД полагает, что результат будет такой же, как если бы:

 

— транзакция А выполнялась первой, а за ней была выпол­нена транзакция В;

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

Механизм блокировок разрешает проблемы, связанные с дос­тупом нескольких пользователей к одним и тем же данным. Од­нако его применение связано с существенным замедлением обра­ботки транзакций, вызванным необходимостью ожидания, когда освободятся данные, захваченные конкурирующей транзакцией. Можно попытаться минимизировать вызванные этим задержки, локализуя фрагменты данных, захватываемые транзакцией. Так, СУБД может блокировать всю базу данных целиком (очевидно, что это неприемлемый вариант), таблицу базы данных, часть таб­лицы, отдельную строку (уровни блокировки). Современные СУБД используют, как правило, блокировки на уровне частей таблиц (страниц), записей, полей (атрибутов).

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


 


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 214; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.014 с.)
Главная | Случайная страница | Обратная связь