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

Блокировка данных

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

Механизм блокировки (locking) заключается в следующем. Когда начинает выполняться транзакция Т1 СУБД блокирует от других транзакций те записи таблицы, к которым обращается эта транзакция с целью выборки и изменения данных. Пусть параллельно выполняется другая транзакция Т2. Если транзакция Т2 обращается к той части (записям) данных, которая заблокирована транзакцией Т1, то СУБД приостанавливает выполнение транзакции Т2 и заставляет её ожидать, пока транзакция Т1 не закончится инструкцией COMMIT или ROLLBACK , и данные не будут разблокированы. После этого СУБД разрешит продолжение выполнения транзакции Т2. Т.о., реализуется простой принцип очереди: «не все транзакции сразу, а по очереди».

Блокировки по типу разделяют на жесткие и нежесткие. Жесткая (исключающая, exclusive lock) блокировка означает, что если одна транзакция заблокировала определенные данные, то другая транзакция не может обращаться к тем же данным ни для выборки, ни для записи. Нежесткие блокировки (shared lock) заключаются в в блокировке от изменения данных, чтение данных параллельными транзакциями разрешается.

Используются следующие уровни блокировок (глубина детализации блокировок):

  • Блокировка всей БД – самая жесткая форма блокировки, легко осуществляемая, но и самая медленная, при этом в каждый момент времени во всей БД выполняется только одна транзакция.

  • Блокировка на уровне таблиц - блокируются только те таблицы, к которым обращается транзакция. Остальные таблицы не блокируются, и к ним могут обращаться другие транзакции.

  • Блокировка на уровне страниц – СУБД блокирует только те физические страницы (блоки) таблиц на диске, к которым в данный момент обращается очередная транзакция, другие страницы таблиц не блокируются.

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

Блокировки могут устанавливаться автоматически самой СУБД, либо прикладной программой. Например, в MS Access режимы блокировки для конкретного приложения (программы) можно устанавливать программно с помощью соответствующих методов объекта Recordset языка VBA. При этом в конкретном случае будут уже действовать установки программы, а не общие установки Access. Этот вариант обеспечивает более гибкие возможности блокировки, но в данном курсе он детально не рассматривается.

Также в некоторых СУБД можно устанавливать интервал времени time out – превышение лимита времени. При введении такого интервала инструкция SQL заканчивается неуспешно и возвращает код ошибки, если она не смогла установить требуемую блокировку в течение определенного промежутка времени.

Администратор БД может вручную устанавливать типы, уровни блокировок и время time out в зависимости от необходимости.