Транзакции
Министерство образования и науки Российской Федерации
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
Кафедра информационных технологий в металлургии
РЕФЕРАТ
по дисциплине: «Базы данных»
на тему: «Транзакция»
ст. группы ИВТ-10
.
Проверил:
ст. преподаватель
Введение
Целью данной работы является рассмотрение транзакций, определение, свойства, а также определение различий транзакций определенных в стандарте ANSI и конкретной реализации в сервере INterBase. Работа састоит из введения, двух глав, заключения и списка лиературы.
Первая глава посвещена общим сведениям о транзакциях описанным в стандарте ANSI SQL-92.
Вторая глава посвящена реализации SQL в InterBase.
Транзакции в ANSI
Транзакция это набор действий, которые должны быть успешно выполнены на одной или более таблицах в базе данных, прежде чем они будут подтверждены (committed). Если одно из действий в этом наборе потерпит неудачу, тогда все действия будут отменены (rolled back). Использование транзакций позволяет обеспечить, что база данных не окажется в неопределенном состоянии, когда возникнет проблема при завершении одного из действий, которые входят в состав транзакции.
Для более надежной и предсказуемой работы транзакций были сформированы наборы требований к транзакциям. Наиболее распространенным является набор ACID (Atomicity (неразрывность), Consistency (согласованность), Isolation (изолированность), Durability (устойчивость)):
Неразрывность утверждает, что изменение базы данных должно выполнятся по принципу “все или ничего”. Т.е. либо будут выполнены все операции, либо никакие из них.
Согласованность утверждает, что только достоверные данные могут быть записаны в базу данных. Например, количество товаров в базе магазина не должно быть меньше 0. Если по каким либо причинам транзакция выполнилась, так что нарушились требования согласованности базы данных, то вся транзакция отменяется, и база данных будет восстановлена до состояния, удовлетворяющего этим требованиям. Если же это требование выполняется успешно, она переведет базу данных из одного состояния, которое согласуется с правилами, в другое состояние, которое также удовлетворяет правилам. Ответственность за обеспечение согласованности возлагается и на СУБД, и на разработчиков приложений.
Изолированность требует, что бы несколько транзакций выполняемых одновременно не влияли на выполнение друг друга.
Устойчивость гарантирует, что результаты успешно завершенной (зафиксированной) транзакции должны храниться в базе данных постоянно и не должны быть утеряны в результате последующих сбоев.
Уровни Изолированности
Свойство изолированности транзакций требует, что бы синхронные транзакции, не влияли на работу друг друга, этого можно добиться на практике при помощи сериализации транзакций, т.е. выполнять их по такому плану, когда результат совместного выполнения транзакций эквивалентен результату некоторого последовательного выполнения этих же транзакций. Но это значительно замедляет работу сервера, поэтому в стандарте ANSI были определены, так называемые, феномены - последовательности операций, обладающие аномальным (возможно, не сериализуемым) поведением. Это позволило реализовать уровни изолированности транзакций, которые можно выбрать исходя из того какие феномены будут допустимы в базе данных. Всего в ANSI определенно 3 феномена:
- “Грязное Чтение” (Dirty Read): Транзакция T1 модифицировала содержимое элемента данных. После этого другая транзакция T2 прочитала содержимое этого элемента данных, до того как транзакция T1 выполнила операцию COMMIT (зафиксировалась) или ROLLBACK (откатилась). Если T1 завершается операцией ROLLBACK, то получается, что транзакция T2 прочитала реально не существующие данные.
- “Неповторимое или Размытое Чтение” (Non-repeatable or Fuzzy Read): Транзакция T1 прочитала содержимое элемента данных. После этого другая транзакция T2 модифицирует или удаляет этот элемент данных и фиксируется. Если T1 после этого попытается прочитать содержимое этого элемента данных снова, то она получит другое значение или обнаружит, что элемент данных больше не существует.
- “Фантом” (Phantom): Транзакция T1 прочитала содержимое нескольких элементов данных, удовлетворяющих некоторому предикату <search condition>. После этого транзакция T2 создает элемент данных, удовлетворяющий этому предикат
у, и фиксируется. Если транзакция T1 повторит чтение с тем же предикатом <search condition>, то получит уже другой набор данных, отличный от полученного в первый раз.
Уровень изоляции транзакции определяет степень, в которой на операции этой транзакции влияют операции параллельно выполняющихся транзакций и в которой операции данной транзакции влияют на операции других транзакций. Каждый уровень изоляции определяет феномены возможные при параллельном выполнении транзакций. В стандарте ANSI SQL-92 определяются четыре уровня изолированности:
- “Незавершенное (черновое) чтение” READ UNCOMMITTED: Указывает, что инструкции могут считывать строки, которые были изменены другими транзакциями, но еще не были зафиксированы. Это наименьшее ограничение уровней изоляции.
- “Подтвержденное чтение” READ COMMITTED: Указывает, что инструкции не могут считывать данные, которые были изменены другими транзакциями, но еще не были зафиксированы. Это предотвращает чтение «грязных» данных. Данные могут быть изменены другими транзакциями между отдельными инструкциями в текущей транзакции, результатом чего будет неповторяемое чтение или фантомные данные
- “Повторяемое чтение” REPEATABLE READ: Указывает на то, что инструкции не могут считывать данные, которые были изменены, но еще не зафиксированы другими транзакциями, а также на то, что другие транзакции не могут изменять данные, читаемые текущей транзакцией, до ее завершения. Совмещаемые блокировки применяются ко всем данным, считываемым любой инструкцией транзакции, и сохраняются до ее завершения. Это запрещает другим транзакциям изменять строки, считываемые текущей транзакцией. Другие транзакции могут вставлять новые строки, соответствующие условиям поиска инструкций, содержащихся в текущей транзакции. При повторном запуске инструкции текущей транзакцией будут извлечены новые строки, что приведет к фантомному чтению.
- “Сериализуемость” SERIALIZABLE: Указывает следующее:
- Инструкции не могут считывать данные, которые были изменены другими транзакциями, но еще не были зафиксированы.
- Другие транзакции не могут изменять данные, считываемые текущей транзакцией, до ее завершения.
- Другие транзакции не могут вставлять новые строки со значениями ключа, которые входят в диапазон ключей, считываемых инструкциями текущей транзакции, до ее завершения.
Блокировка диапазона устанавливается в диапазоне значений ключа, соответствующих условиям поиска любой инструкции, выполненной во время транзакции. Обновление и вставка строк, удовлетворяющих инструкциям текущей транзакции, блокируется для других транзакций. Это гарантирует, что если какая-либо инструкция транзакции выполняется повторно, она будет считывать тот же самый набор строк. Блокировки диапазона сохраняются до завершения транзакции. Это самый строгий уровень изоляции, поскольку он блокирует целые диапазоны ключей и сохраняет блокировку до завершения транзакции.
Возможность параллельного
выполнения конкурирующих транзакций
на различных уровнях
Таблица 1: Фантомы допускаемые на разных уровнях изолированности.
Уровень изоляции |
Грязное Чтение |
Размытое Чтение |
Фантом |
READ UNCOMMITTED |
Возможно |
Возможно |
Возможно |
READ COMMITTED |
Невозможно |
Возможно |
Возможно |
REPEATABLE READ |
Невозможно |
Невозможно |
Возможно |
SERIALIZABLE |
Невозможно |
Невозможно |
Невозможно |
Завершение транзакций
Когда транзакция выполнила все действия, или ошибка препятствует ее завершению, транзакция должна быть закончена, что бы сохранить базу данных в согласованном состоянии. Существует 2 оператора, что бы завершить транзакции:
- COMMIT применяет все изменения в базе данных. Это означает, что транзакция успешно выполнила все действия.
- ROLLBACK отменяет все изменения совершенные транзакцией, возвращает базу данных в состояние, как до начала транзакции. ROLLBACK используется когда одна или более ошибок препятствуют успешному выполнению транзакции .
Стандарт определяет, что транзакция начинается с первого SQL-оператора, инициируемого пользователем или содержащегося в программе, изменяющего текущее состояние базы данных. Все последующие SQL-операторы составляют тело транзакции. Транзакция завершается одним из четырех возможных путей (рис. 1):
Рисунок 1 - Модель транзакций ANSI/ISO
- оператор COMMIT означает успешное завершение транзакции; его использование делает постоянными изменения, внесенные в базу данных в рамках текущей транзакции;
- оператор ROLLBACK прерывает транзакцию, отменяя изменения, сделанные в базе данных в рамках этой транзакции; новая транзакция начинается непосредственно после использования ROLLBACK;
- успешное завершение программы, в которой была инициирована текущая транзакция, означает успешное завершение транзакции (как будто был использован оператор COMMIT);
- ошибочное завершение программы прерывает транзакцию (как будто был использован оператор ROLLBACK).
И ROLLBACK и COMMIT закрывают курсор и освобождают системные ресурсы связанные с транзакцией.
ROLLBACK часто используется внутри блока обработки ошибок, что бы откатить все изменения сделанные программой при возникновении ошибок.
Транзакции в InterBase
Уровни изолированности
Транзакции в InterBase мало чем отличаются, от транзакций определенных в стандарте ANSI.
Одним из различий является то, что в InterBase, помимо феноменов определенных в ANSI введены дополнительные:
“Потерянная Модификация” (Lost updates), которое происходит в случае, когда транзакция T1 прочитала элементы данных, после нее T2 их модифицировала после чего T1 (основываясь на ранее прочитанном ею значении) модифицирует содержимое элемента данных и фиксируется.
“Побочные эффекты обновления” (Update side effects), которое может произойти, когда значения строки взаимозависимы и их зависимости не достаточно защищены или используется блокировка триггером или ограничение целостности. Эти конфликты происходят, когда две или более одновременные транзакции в произвольном порядке и неоднократно получают доступ и обновляют те же данные; такие транзакции называют чередующими транзакциями.
Кроме того введены два не определенных в ANSI уровня изолированности:
“Моментальный срез” (SNAPSHOT) используется по умолчанию. Данные внутри транзакции будут доступны в том состоянии в котором они были на момент запуска транзакции. Другие синхронные транзакции, могут изменять и вставлять строки, но эта транзакция не увидет изменений. При попытке модифицировать такие записи возникнет сообщение о конфликте.
“Стабильный моментальный срез” (SNAPSHOT TABLE STABILITY): Это уровень изоляции также создает "моментальный" снимок базы данных, но одновременно блокирует на запись данные, задействованные в операциях, выполняемые данной транзакцией. Это означает, что если транзакция SNAPSHOT TABLE STABILITY изменила данные в какой-нибудь таблице, то после этого данные в этой таблице уже не могут быть изменены в других параллельных транзакциях. Кроме того, транзакции с уровнем изоляции SNAPSHOT TABLE STABILITY не могут получить доступ к таблице, если данные в них уже изменяются в контексте других транзакций.
Уровень изоляции |
Потерянная Модификация |
Размытое Чтение |
Фантом |
Побочные эффекты обновления |
READ COMMITTED |
Невозможно |
Возможно |
Возможно |
Возможно |
SNAPSHOT |
Невозможно |
Невозможно |
Невозможно |
Невозможно |
SNAPSHOT TABLE STABILITY |
Невозможно |
Невозможно |
Невозможно |
Невозможно |
Так же в InterBase можно настроить дополнительные параметры транзакций, такие как:
“Режим доступа” Access Mode определяет тип доступа к данным. Может принимать два значения:
- READ ONLY (константа read) - указывает, что транзакция может только читать данные и не может модифицировать их.
- READ WRITE (константа write) - указывает, что транзакция может читать и модифицировать данные. Это значение принимается по умолчанию.
“Разрешение блокировок” Lock Resolution - определяет ход событий при обнаружении конфликта блокировки. Может принимать два значения:
- WAIT (константа wait) - значение по умолчанию. Ожидает разблокировки требуемой записи. После этого пытается продолжить работу.
- NO WAIT (константа nowait) - немедленно возвращает ошибку блокировки записи.
“Резервирование таблиц” Table Reservation - позволяет транзакции получить гарантированный доступ необходимого уровня к указанным таблицам. Существует четыре уровня доступа:
- PROTECTED READ (константа protected_read) - запрещает обновление таблицы другими транзакциями, но позволяет им выбирать данные из таблицы.
- PROTECTED WRITE (константа protected_write) - запрещает обновление таблицы другими транзакциями, читать данные из таблицы могут только транзакции типа SNAPSHOT или READ COMMITTED.
- SHARED READ (константа shared_read) - самый либеральный уровень. Читать могут все, модифицировать - транзакции READ WRITE.
- SHARED WRITE (константа shared_write) - транзакции SNAPSHOT или READ COMMITTED READ WRITE могут модифицировать таблицу, остальные - только выбирать данные.
Завершение транзакций
Для завершения транзакций в InterBase кроме операторов COMMIT и ROLLBACK, добавлены операторы CommitRetaining, которая сохраняет все изменения и продолжает работать в том же уровне изолированности и RollbackRetaining, соответственно, отменяет изменения и продолжает транзакцию.
Заключение
В ходе работы было дано определение транзакций и их свойства, рассмотрены уровни изолированности определенные в стандарте ANSI и в InterBase. Так же в малой степени были освещены различия SQL реализованного в InterBase, и определенного в стандарте ANSI.
Список литературы
Транзакции в InterBase и Firebird
http://www.ibase.ru/devinfo/
Язык баз данных SQL/92
http://citforum.ru/database/
Критика уровней изолированности в стан
дарте ANSI SQL
http://citforum.ru/database/
- Embedded SQL Guide
http://docs.embarcadero.com/
- Language Reference
http://docs.embarcadero.com/
- ANSI X3.135-1992, American National Standart for Information Systems - Database Language - SQL, November, 1992
http://www.cs.purdue.edu/
- The ACID Model
http://databases.about.com/od/

- Транзакції і цілісність баз даних
- Транзистор
- Транзистор
- Транзистор
- Транзисторлар және олардың түрлері
- Транзисторлык триггер
- Транзисторные усилители
- Трактора ДТ-75
- Трактора и Автомобили
- Тракторлар мен автомобильдердің жалпы құрылысы
- Тракторы и минитехника
- Трактування документознавства як наукової дисципліни: історіографічний аспект
- Транзактний аналіз Е.Берна і розпізнавання „его” -станів партнера
- Транзактный анализ