Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

 

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

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

 

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

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

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

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

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

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

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

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

 

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

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

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

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

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

 

 

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

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

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

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

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

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

 

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

 

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

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

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

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

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

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

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

 

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

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

 

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

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

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

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

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

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




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 1183; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.