Механизмы блокировки

Большинство СУБД позволяют любому числу транзакций одновременно осуществлять доступ к одной и той же базе данных и в них существуют механизмы управления параллельными процессами, предотвращающие нежелательные воздействия одних транзакций на другие. По сути это механизм блокирования, главная идея которого достаточно проста. Если транзакции нужны гарантии, что некоторый объект (база данных, таблица, или строка), в котором она заинтересована, не будет изменен каким-либо непредсказуемым образом в течение требуемого промежутка времени, она устанавливает блокировку этого объекта. Результат блокировки заключается в том, чтобы изолировать этот объект от других транзакций и предотвратить его изменение средствами этих транзакций.

Рассмотрим кратко, как организованы блокировки в Oracle.

Во-первых, объектом блокирования может быть вся таблица или отдельная строка, поэтому различают блокировки типа T (Table) или R (Row). Объектом блокирования в исключительных случаях может быть и вся база данных, но при обычной многопользовательской работе этого не допускают.

Во-вторых, поддерживается не только полная блокировка ресурса (эксклюзивная блокировка – обозначается как X-блокировка), но и разделяемая (Shared) блокировка (обозначается как S-блокировка). Разделяемая блокировка позволяет нескольким транзакциям одновременно использовать ресурс, но пока не снята разделяемая блокировка, сервер не может наложить на этот ресурс эксклюзивную блокировку.

Теперь разберем конкретно, какую блокировку накладывает сервер на ресурсы при исполнении определенных команд SQL.

Команды CREATE/ALTER/DROP TABLE накладывают эксклюзивную блокировку на уровне таблицы (блокировка TX). Это значит, что нельзя выполнять никаких действий над таблицей, пока не будет закончена соответствующая операция DDL. Очевидно, для команд DDL и фиксация выполняет автоматически с целью быстрее освободить таблицу от эксклюзивной блокироки.

Команды INSERT/DELETE/UPDATE используют ресурсы в более мягком режиме. Каждая из этих команд накладывает эксклюзивную блокировку только на ту строку, которую она в данный момент обрабатывает (блокировка RX). Однако одновременно накладывается эксклюзивная блокировка на всю таблицу (блокировка TS), и это означает, что никакая DDL операция не может быть выполнена над таблицей до тех пор, пока не закончатся все DML-операции над этой таблицей и не будет снята последняя TS-блокировка (при нормальной работе такое случится, скорее всего, только к концу рабочего дня или в обеденный перерыв).

Команда SELECT не накладывает никакой блокировки на те таблицы, данные из которых она выбирает. Сервер Oracle гарантирует каждой команде выборки неизменность данных таблиц в процессе ее выполнения. Если в процессе выполнения какой-нибудь объемной и протяженной по времени выборки успела зафиксироваться какая-либо транзакция обновления данных, команда выборки не увидит результаты этой транзакции.








Дата добавления: 2015-08-26; просмотров: 825;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.