Ооп бд объектно-ориентированная база данных
Вид материала | Документы |
Содержание10. Средства блокировки в Оракл. Настройка блокировки. Блокировки DML Блокировки DDL Исключительные блокировки. Разделяемые блокировки. Нарушаемые блокировки разбора. |
- Программа дисциплины Объектно-ориентированное программирование Рекомендуется для направления, 591.42kb.
- Лекция на тему «Что такое база данных. Реляционная база данных ms access», 67.11kb.
- Абстракции, наследование и полиморфизм, 107.42kb.
- Ms access База данных (БД), 134.51kb.
- Лекция: Методологии моделирования предметной области: Методологии моделирования предметной, 347.91kb.
- Развитие объектно-ориентированных систем управления базами данных, 122.52kb.
- Должна быть конкретной, кратко сформулированной и соответствовать современному уровню, 20.13kb.
- В вычислительной математике, 1443kb.
- Базы данных 2, 398.32kb.
- Лекция на тему: Основы организации баз данных, 393.78kb.
10. Средства блокировки в Оракл. Настройка блокировки.В ORACLE автоматически применяются следующие основные классы блокировок:
Блокировки DMLБлокировки таблиц ( TM) применяются, если в транзакции выдается один из операторов insert, delete, update, select for update, lock table. Таблицы блокируются ораклом, чтобы зарезервировать доступ к таблице и предотвратить конкуренцию между операторами DDL за таблицу. Проще говоря, блокировка таблиц (TM) позволяет быть уверенным, что структура таблицы не изменится при изменении её содержимого. Блокировки TM могут быть в следующих режимах (lmode) : 3- row exclusive монопольная блокировка строки (RX) при выполнении операторов insert, delete, update; 2- row share разделяемая блокировка строки (RS) при выполнении select for update; 6 – exclusive монопольная блокировка ( X) при выполнении lock table. Блокировка транзакций TX устанавливается при выполнении следующих операторов insert, delete, update, select for update. Блокировки транзакций работают только в режиме (lmode) - 6 exclusive (X) монопольная блокировка. Блокировки транзакций всегда осуществляются на уровне строк: блокируется строка и предотвращается изменение строки другими транзакциями до тех пор, пока не буде выполнен откат текущей транзакции или транзакция не будет зафиксирована. Чтобы была установлена блокировка TX, сначала устанавливается блокировка TM для таблицы в режиме 3 (RX). Затем устанавливается блокировка TX в режиме 6 (X). Блокировка TX не будет установлена, если другая транзакция установила блокировку TX на эту же строку. Блокировки могут быть еще в режиме 4 (разделяемая блокировка таблицы share mode, генерируется, например, оператором lock table <…> in share mode) и 5 (разделяемая блокировка таблицы и монопольная блокировка строк share row exclusive; генерируется, например, оператором lock table <…..> in share row exclusive mode). Но эти режимы встречаются крайне редко. Следующая таблица важна для понимания разницы в режимах блокировок: Если один процесс “держит блокировку”, и другой процесс пытается получить”блокировку” на это этот же ресурс- он получит результат в соответствии с этой таблице: А теперь немножко про так называемое «преобразование блокировок» или «распространение блокировок». Что это за механизм? Блокировка таблицы TM преобразуется из низкого (лояльного) уровня (режим 2) в более высокий (жесткий) уровень (режим 3). В отличие от других баз данных , база данных ORACLE никогда не переводит блокировки на уровень таблицы , если заблокирована основная часть строк в таблице. То есть в ORACLE никогда не применяется эскалация блокировок (увеличение размера блокируемых объектов). Это связано с тем, что ORACLE нет необходимости уменьшать нагрузку на диспетчер блокировок баз данных, так как нет традиционного диспетчера блокировок. То есть, нет диспетчера, поддерживающего список со всеми строками, заблокированными в базе. В ORACLE блокировки хранятся как атрибут данных (см. описаниессылка скрыта) . У Тома Кайта есть очень красивое объяснение, как организованы блокировки в ORACLE. Привожу выдержку: Сервер Oracle поступает примерно так:
Блокировки DDLТакие блокировки устанавливаются на объект автоматически при выполнении DDL –команд для защиты от других сеансов. Есть три типа DDL-блокировок:
Есть представление DBA_DDL_LOCKS для просмотра действующих блокировок. Особо хочу обратить внимание на значение столбца owner. В этом столбце прописан владелец объекта, а не владелец блокировки. Это представление весьма полезно для разработчиков приложений для выявления блокирующих сеансов. Например, если вы не можете откомпилировать процедуру или выполнить оператор grant, то в этом представлении можно увидеть , что необходимый объект выполняется другим сеансом. |