Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / Lfg / Алгоритмы совместного доступа к базам данных.doc
Скачиваний:
47
Добавлен:
16.04.2013
Размер:
124.93 Кб
Скачать

Isolation level read committed;

... другие операторы транзакции ...

COMMIT;

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

Алгоритмы блокирования Oracle

Для того чтобы предотвратить отрицательное воздействие одних транзакций на другие, Oracleблокирует различные ресурсы базы данных во время обработки информации. Точно так же, как дверной замок не позволяет войти в ваш дом в ваше отсутствие, так и блокировка (lock) ресурса базы данных не разрешает посторонним воспользоваться этим ресурсом и мешать вашей работе. Далее будет рассказано, как блокируются ресурсы базы данныхOracle, чтобы не допустить вмешательства в систему.

Автоматическое и явное блокирование

По умолчанию во время выполнения операции транзакция устанавливает все необходимые блокировки ресурсов системы. Предположим, что пользователь начинает новую транзакцию и обновляет адрес клиента. Перед обновлением указанной строки Oracleпроверяет, не блокируют ли эту строку другие открытые транзакции этой строки. Если строка блокирована, то новая транзакция ожидает окончания транзакции, удерживающей блокировку, и снятия блокировки строки. Если же строка не блокирована,Oracleавтоматически устанавливает блокировку строки для новой транзакции. Эта транзакция будет блокировать строку до тех пор, пока не завершится или не будет выполнен ее откат, причем другие транзакции не смогут модифицировать строку и привести к потере изменения.

Для большинства приложений вполне приемлемы алгоритмы блокирования Oracle, устанавливаемые по умолчанию. Однако иногда транзакции выполняются быстрее, если они явно блокируют данные, предвидя, какая операция будет выполнена над базой данных. Представим себе создание транзакции, которая должна будет обновлять большую часть строк таблицы. Если таблица достаточно велика, на­много целесообразнее перед обновлением информации заблокировать всю таблицу, а не позволятьOracleприменять алгоритмы блокирования по умолчанию, устанавливающие строчные блокировки по мере обновления каждой строки таблицы. Кроме того, формирование табличной блокировки в начале транзакции гарантирует выполнение всей операции целиком. Например, если во время выполнения оператораUPDATE, примененного ко всем строкам таблицы,Oracleобновит почти все строки таблицы, а затем встретит заблокированную строку, может понадобиться откат обновления всех предыдущих строк. Более подробно о различных уровнях блокировок, например о блокировках уровня строки и уровня таблицы, будет рассказано в следующих разделах.

Уровни блокировок

Oracleблокирует ресурсы базы данных в одном издвухрежимов: разделяемом или исключающем. Общее представление о разделяемых и исключающих блокировках дано на рис. 1 и в последующих разделах.

Транзакция 1

Разделяемая блокировка

Исключающая блокировка

Исключающая блокировка

Транзакция 2

Разделяемая блокировка

Исключающая блокировка

Исключающая блокировка

Таблица

Строка #1

Строка #2

Строка #3

Строка #4

Строка #5

Строка #6

Строка #7

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