Механизмы блокировки
Большинство СУБД позволяют любому числу транзакций одновре-
менно осуществлять доступ к одной и той же базе данных и в них суще-
ствуют механизмы управления параллельными процессами, предотвра-
щающие нежелательные воздействия одних транзакций на другие. По
сути, это механизм блокирования, главная идея которого достаточно про-
ста. Если транзакции нужны гарантии, что некоторый объект (база дан-
ных, таблица, или строка), в котором она заинтересована, не будет изме-
нен каким-либо непредсказуемым образом в течение требуемого проме-
жутка времени, она устанавливает блокировку этого объекта. Результат
блокировки заключается в том, чтобы изолировать этот объект от других
транзакций и предотвратить его изменение средствами этих транзакций.
Рассмотрим кратко, как организованы блокировки в Oracle.
Во-первых, объектом блокирования может быть вся таблица или от-
дельная строка, поэтому различают блокировки типа T (Table) или R
(Row). Объектом блокирования в исключительных случаях может быть и
вся база данных, но при обычной многопользовательской работе этого не
допускают.
Во-вторых, поддерживается не только полная блокировка ресурса
(эксклюзивная блокировка – обозначается как X-блокировка), но и разде-
ляемая (Shared) блокировка (обозначается как S-блокировка). Разделяемая
блокировка позволяет нескольким транзакциям одновременно использо-
вать ресурс, но пока не снята разделяемая блокировка, сервер не может
наложить на этот ресурс эксклюзивную блокировку.
Теперь разберем конкретно, какую блокировку накладывает сервер
на ресурсы при исполнении определенных команд SQL.
Команды CREATE/ALTER/DROP TABLE накладывают эксклюзив-
ную блокировку на уровне таблицы (блокировка TX). Это значит, что
нельзя выполнять никаких действий над таблицей, пока не будет закон-
чена соответствующая операция DDL. Очевидно, для команд DDL и фик-
сация выполняет автоматически с целью быстрее освободить таблицу от
эксклюзивной блокироки.
Команды INSERT/DELETE/UPDATE используют ресурсы в более
мягком режиме. Каждая из этих команд накладывает эксклюзивную бло-
кировку только на ту строку, которую она в данный момент обрабатывает
(блокировка RX). Однако одновременно накладывается эксклюзивная
блокировка на всю таблицу (блокировка TS), и это означает, что никакая
DDL операция не может быть выполнена над таблицей до тех пор, пока
не закончатся все DML-операции над этой таблицей и не будет снята по-
следняя TS-блокировка (при нормальной работе такое случится, скорее
всего, только к концу рабочего дня или в обеденный перерыв).