Транзакции

Автор работы: Пользователь скрыл имя, 20 Октября 2013 в 16:27, реферат

Краткое описание

Целью данной работы является рассмотрение транзакций, определение, свойства, а также определение различий транзакций определенных в стандарте ANSI и конкретной реализации в сервере INterBase. Работа састоит из введения, двух глав, заключения и списка лиературы.
Первая глава посвещена общим сведениям о транзакциях описанным в стандарте ANSI SQL-92.
Вторая глава посвящена реализации SQL в InterBase.

Вложенные файлы: 1 файл

Транзакции.doc

— 145.50 Кб (Скачать файл)

Министерство образования  и науки Российской Федерации

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ  УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО  ОБРАЗОВАНИЯ 

 

 

Кафедра информационных технологий в металлургии

 

 

 

 

РЕФЕРАТ

по дисциплине: «Базы данных»

на тему: «Транзакция»

 

 

 

 

 

 

 

 

                                                               Выполнил: 

ст. группы ИВТ-10

    .

        

 

 

                

    Проверил:

    ст. преподаватель

                                                                                     .

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение

 

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

Первая глава посвещена  общим сведениям о транзакциях  описанным в стандарте ANSI SQL-92.

Вторая глава посвящена  реализации SQL в InterBase.

  1. Транзакции в ANSI

 

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

Для более надежной и предсказуемой работы транзакций были сформированы наборы требований к транзакциям. Наиболее распространенным является набор ACID (Atomicity (неразрывность), Consistency (согласованность), Isolation (изолированность), Durability (устойчивость)):

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

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

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

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

    1. Уровни Изолированности

 

Свойство изолированности  транзакций требует, что бы синхронные транзакции, не влияли на работу друг друга, этого можно добиться на практике при помощи сериализации транзакций, т.е. выполнять их по такому плану, когда результат совместного выполнения транзакций эквивалентен результату некоторого последовательного выполнения этих же транзакций. Но это значительно замедляет работу сервера, поэтому в стандарте 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

Невозможно

Невозможно

Невозможно


 

    1. Завершение транзакций

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

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

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

 
Рисунок 1 - Модель транзакций ANSI/ISO

  1. оператор COMMIT означает успешное завершение транзакции; его использование делает постоянными изменения, внесенные в базу данных в рамках текущей транзакции;
  2. оператор ROLLBACK прерывает транзакцию, отменяя изменения, сделанные в базе данных в рамках этой транзакции; новая транзакция начинается непосредственно после использования ROLLBACK;
  3. успешное завершение программы, в которой была инициирована текущая транзакция, означает успешное завершение транзакции (как будто был использован оператор COMMIT);
  4. ошибочное завершение программы прерывает транзакцию (как будто был использован оператор ROLLBACK).

И ROLLBACK и COMMIT закрывают курсор и освобождают системные ресурсы связанные с транзакцией.

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

  1. Транзакции в InterBase

    1. Уровни изолированности

Транзакции  в InterBase мало чем отличаются, от транзакций определенных в стандарте ANSI.

Одним из различий является то, что в InterBase, помимо феноменов определенных в ANSI введены дополнительные:

“Потерянная Модификация” (Lost updates), которое происходит в случае, когда транзакция T1 прочитала элементы данных, после нее T2 их модифицировала после чего T1 (основываясь на ранее прочитанном ею значении) модифицирует содержимое элемента данных и фиксируется.

“Побочные эффекты обновления” (Update side effects), которое может произойти, когда значения строки взаимозависимы и их зависимости не достаточно защищены или используется блокировка триггером или ограничение целостности. Эти конфликты происходят, когда две или более одновременные транзакции в произвольном порядке и неоднократно получают доступ и обновляют те же данные; такие транзакции называют чередующими транзакциями.

Кроме того введены два не определенных в ANSI уровня изолированности:

“Моментальный срез” (SNAPSHOT) используется по умолчанию. Данные внутри транзакции будут доступны в том состоянии в котором они были на момент запуска транзакции. Другие синхронные транзакции, могут изменять и вставлять строки, но эта транзакция не увидет изменений. При попытке модифицировать такие записи возникнет сообщение о конфликте.

 “Стабильный моментальный срез” (SNAPSHOT TABLE STABILITY): Это уровень изоляции также создает "моментальный" снимок базы данных, но одновременно блокирует на запись данные, задействованные в операциях, выполняемые данной транзакцией. Это означает, что если транзакция SNAPSHOT TABLE STABILITY изменила данные в какой-нибудь таблице, то после этого данные в этой таблице уже не могут быть изменены в других параллельных транзакциях. Кроме того, транзакции с уровнем изоляции SNAPSHOT TABLE STABILITY не могут получить доступ к таблице, если данные в них уже изменяются в контексте других транзакций.

Информация о работе Транзакции