Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Команды управления транзакциями



Команды управления транзакциями определяют логические единицы выполняемой работы. В таблице 1 перечислены команды управлении транзакциями SQL Server и приведены их краткие описания.

Таблица 1. Команды управления транзакциями и их применение

Команда Описание
BEGIN TRAN[SACTION] [ имя_транзакции | @ переменная ] [WITH MARK [‘ Описание ’]] Определяет начало транзакции
COMMIT TRAN[SACTION] [имя_транзакции | @ переменная] Информирует сервер о завершении текущей транзакции и делает измене­ния данных постоянными. Сохраняет результаты выполнения транзакции даже после аварийного завершения работы системы.
ROLLBACK TRAN[SACTION] [ имятранзакции | @ имя_точки сохранения | @ переменная_транзакции | @ переменная_точки сохранения ] Заставляет сервер отменить все изме­нения данных от последней опреде­ленной точки сохранения или от нача­ла транзакции. При этом все созданные до этого оператора точки сохранения уничтожаются.
SAVE TRAN[SACTION] [ имя_точки сохранения | @ переменная_точки сохранения ] Промежуточное сохранение результатов транзакции. Регистрируется промежуточная точка, до которой может впоследствии выполняться откат. Каждой точке сохранения присваивается имя. При этом транзакция остается активной.
     

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

Понятие блокировки

При выполнении транзакций сервер накла­дывает на данные блокировки.

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

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

То есть при выполнении транзакции накладывают бло­кировки на данные, чтобы обеспечить выполнение требований ACID.

Блокировка может быть наложе­на как на отдельную строку таблицы, так и на всю базу данных.

Управле­нием блокировками на сервере занимается менеджер блокировок, конт­ролирующий их применение и разрешение конфликтов.

Различают два вида блокировки данных:

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

Запрос со стороны другой транзакции с применением блокировки чтения (то есть с попыткой писать в эти строки) будет отменен.

блокировка чтения на одну или несколько строк таблицы (значит, в данный момент в эти строки идет запись!). Конкурирующим транзакциям писать в эти строки можно, но читать эти строки нельзя.

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

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

Его суть заключается в следующем:

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

• транзакция, предназначенная для модификации строки данных, на­кладывает на нее блокировку чтения;

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

• блокировка записи сохраняется вплоть до конца выполнения тран­закции.

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

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

· Чтение незафиксированных данных.

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

· Проблема «грязного» чтения возможна в том случае, если пользова­тель выполняет сложные операции обработки данных, требующие множественного изменения данных перед тем, как они обретут ло­гически верное состояние.

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

· Проблема неповторяемого чтения является следствием неоднократ­ного считывания транзакцией одних и тех же данных. Во время вы­полнения первой транзакции другая может внести в данные измене­ния, и при повторном чтении первая транзакция получит уже другой набор данных. Это приведёт к нарушению их целостности или логической несогласованности;

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

Для решения перечисленных проблем в специально разработанном стандарте определены четыре уровня изоляции (блокирования ).

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

Каждый последующий уровень поддерживает требования предыдущего и налагает дополнительные огра­ничения:

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

• уровень 1 - запрещение «грязного» чтения. Если транзакция начала изменение данных, то никакая другая транзакция не сможет прочи­тать их до завершения первой;

• уровень 2 - запрещение неповторяемого чтения. Если транзакция читает данные, то никакая другая транзакция не сможет их изме­нять. Таким образом, при повторном чтении они будут находиться в первоначальном состоянии;

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

По­добная блокировка накладывается не на конкретные строки таблицы, а на строки, удовлетворяющие определенному логическому условию.





Дата публикования: 2014-12-08; Прочитано: 320 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...