Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основные шпоры по БД.doc
Скачиваний:
0
Добавлен:
09.12.2019
Размер:
679.42 Кб
Скачать

5. Виды блокировок, правила их установки (наложения) и снятия. Использование блокировок для решения проблем параллельного выполнения транзакций. Проблемы, решаемые с помощью механизма блокировок.

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

Различают два типа блокировок:

  • Монопольные блокировки (X) - блокировки без взаимного доступа (блокировка записи).

  • Разделяемые блокировки (S) - блокировки с взаимным доступом (блокировка чтения).

Тр Б

Тр А

S

X

S

+

-

X

-

-

Возможные варианты бокировок объектов представлены в таблице.

Три случая, когда транзакция B не может блокировать объект, соответствуют трем видам конфликтов между транзакциями.

Доступ к объектам базы данных должен осуществляться в соответствии с протоколом доступа к данным:

  1. Прежде чем прочитать объект, транзакция должна наложить на этот объект S-блокировку.

  2. Прежде чем обновить объект, транзакция должна наложить на этот объект X-блокировку. Если транзакция уже заблокировала объект S-блокировкой (для чтения), то перед обновлением объекта S-блокировка должна быть заменена X-блокировкой.

  3. Если блокировка объекта транзакцией B отвергается оттого, что объект уже заблокирован транзакцией A, то транзакция B переходит в состояние ожидания пока транзакция A не снимет блокировку объекта.

  4. X-блокировки, наложенные транзакцией A, сохраняются до конца транзакции A.

Отсутствие механизма блокировок приводи к возникновению следующих проблем:

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

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

3)неповторяемое считывания - во время выполнения первой транзакции другая может внести в данные изменения, поэтому при повторном чтении первая транзакция получит уже иной набор данных, что приводит к нарушению их целостности или логической несогласованности;

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

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

уровень 0 – запрещение "загрязнения" данных - изменять данные может только одна транзакция; если другой транзакции необходимо изменить те же данные, она должна ожидать завершения первой транзакции;

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

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

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