...
Блокировка - это механизм, используемый для управления одновременным доступом к общему ресурсу. Блокирование происходит, когда один сеанс удерживает ресурс, запрашиваемый другим сеансом. В результате запрашивающий сеанс будет заблокирован - он "повиснет" до тех пор, пока удерживающий сеанс не завершит работу с ресурсом.
Оптимистическое блокирование (optimistic locking) - стратегия блокирования набора данных, при которой раздел, содержащий изменяемую запись, блокируется только на время внесения изменений в запись программой, но не пользователем.
Пессимистическое блокирование (pessimistic locking) - стратегия блокирования набора данных, при которой раздел, содержащий изменяемую запись, блокируется на все время внесения изменений в запись пользователем и не доступна для редактирования другим пользователям.
Особенность механизма блокировок Oracle - блокировки данных не хранятся как отдельный ресурс, а содержатся непосредственно в блоках данных. Это позволяет избежать таких проблем, как эскалация блокировок. Ниже перечислены пять основных классов блокировок в Oracle. Первые три - общие (используются во всех базах данных Oracle), а две остальные — только в OPS (Oracle Parallel Server - параллельный сервер).
- Блокировки ЯМД (DML locks). ЯМД означает язык манипулирования данными (Data Manipulation Language), то есть операторы SELECT, INSERT, UPDATE и DELETE. К блокировкам ЯМД относятся, например, блокировки строки данных или блокировка на уровне таблицы, затрагивающая все строки таблицы.
- Блокировки ЯОД (DDL locks). ЯОД означает язык определения данных (Data Definition Language), то есть операторы CREATE, ALTER и так далее. Блокировки ЯОД защищают определения структур объектов.
- Внутренние блокировки (internal locks) и защелки (latches). Защелки - это простые низкоуровневые средства обеспечения последовательности обращений. Защелки обычно запрашиваются системой в режиме ожидания. Это означает, что, если защелку нельзя установить, запрашивающий сеанс приостанавливает работу на короткое время, а затем пытается повторить операцию. Другие защелки могут запрашиваться в оперативном режиме, то есть процесс будет делать что-то другое, не ожидая возможности установить защелку. Защелки выделяются случайным образом. Внутренние блокировки - более сложное средство обеспечения очередности доступа, они позволяют запрашивающему "встать в очередь" в ожидании освобождения ресурса. Запрашивающий защелку сразу уведомляется об освобождении ресурса. В случае внутренней блокировки запрашивающий полностью блокируется.
- Распределенные блокировки (distributed locks). Эти блокировки используются сервером OPS для согласования ресурсов машин, входящих в кластер. Распределенные блокировки устанавливаются экземплярами баз данных, а не отдельными транзакциями.
- Блокировки параллельного управления кэшем (PCM - Parallel Cache Management Locks). Такие блокировки защищают блоки данных в кэше при использовании их несколькими экземплярами баз данных.
SQL Server поддерживает три основных типа блокировок:
- Shared Lock - разделяемая блокировка, которая используется при выполнении операции чтения данных. Позволяется чтение данных другой транзакцией, но запрещено изменение данных.
- Exclusive Lock - монопольная блокировка, которая применяется при изменении данных. Эта блокировка полностью запрещает доступ к данных другими транзакциями.
- Update Lock - блокировка обновления, которая является промежуточной между разделяемой и монопольной блокировкой. Используется, когда транзакция хочет обновить данные в какой-то ближайший момент времени, но не сейчас, и, когда этот момент придет, не хочет ожидать другой транзакции. В этом случае другим транзакциям разрешается устанавливать разделяемые блокировки, но не позволяет устанавливать монопольные.
Блокировки могут устанавливаться на трех уровнях -
...