Скачиваний:
29
Добавлен:
11.04.2015
Размер:
171.01 Кб
Скачать

11. Особенности реализации блокировок в субд Oracle

Основными прин­ципами блокирования данных в СУБД Oracle являются следующие:

  • система блокирует данные на уровне строк и только при их изменении. Эскалация блокировок до уровня блока или таблицы не предусмотрена;

  • при выполнении операции считывания данные никогда не блокируются; транзакция, записывающая данные, никогда не блокирует операции чтения, ыполняемые другими транзакциями;

  • транзакция записи блокируется только при условии блокирования другой анзакцией записи тех строк, которые предполагает изменить текущая транзакция.

СУБД Oracle позволяет реализовать два метода блокирования - пессимисти­ческий и оптимистический.

Пессимистический метод предполагает обязательное блокирование строки перед ее изменением. Это достигается за счет применения оператора SELECT... FOR UPDATE.

Оптимистический метод основан на предположении, что изменения данных в промежутке между считыванием и началом обновления не произошло, и блокирование производится непосредственно при выполнении оператора изменения данных UPDATE.

Пример. Логическая структура базы данных sklad включает атрибуты: naim - наименова­ние товара; col - количество товара определенного наименования на складе.

К этой БД производят одновременный доступ сотрудники отдела материально-технического снабжения. Необходимо, используя оптимистический и пессимистический методы, разработать варианты транзакции, которая осуществляет уменьшение количества пачек бумаги на складе на величину, равную 5 единицам.

Вариант 1. Концептуальное представление транзакции на основе оптимистического подхода (рис. 6.8).

SELECT sklad. naim, sklad.col UPDATE sklad

FROM sklad SET sklad. col = newcol

WHERE sklad.naim = 'БУМАГА'; WHERE sklad.naim = 'БУМАГА'

{Обработка транзакции: вводится переменная oldcol = sklad.col, вводится переменная newcol = sklad.col - 5, проверяется условие newcol>0}

AND sklad.col = oldcol; {Снятие блокировки UNLOCK sklad)

{Проверка успешности обновления, если нет - повторение транзакции}

{Установка блокировки вручную оператором

LOCK sklad либо автоматически сервером }

Рис. 6.8. Реализация оптимистического подхода

Приведенное представление указывает на принципиальные особенности структуры транзакции, базирующейся на использовании оптимистического метода. Эти особенности заклю­чаются в следующем:

при выполнении оператора SELECT, который, по существу, предназначается для подго­товки данных, необходимых для реализации оператора обновления данных UPDA ТЕ, блокировка не устанавливается;

в теле транзакции хранится старое значение oldcol изменяемой переменной;

блокировка устанавливается автоматически либо вручную оператором LOCK только при выполнении оператора UPDA ТЕ;

обновление данных произойдет только в том случае, если текущее значение обновляемо­го атрибута sklad.col совпадет с его старым значением, которое было получено при выполнении оператора SELECT и сохранено в переменной oldcol.

Вариант 2. Концептуальное представление транзакции, реализующей пессимистиче­ский подход (рис. 6.9).

{Установка вручную с помощью оператора

LOCK блокировки либо использование

оператора SELECT ... FOR UPDATE,

выполнение которого приведет

к автоматической блокировке}

SELECT sklad.naim, sklad.col FROM sklad

WHERE sklad.naim = 'БУМАГА' FOR UPDATE;

{Обработка транзакции:

вводится переменная newcol = skladcol - 5,

проверяется условие newcol>0}

UPDATE sklad

SET sklad.col = newcol

WHERE sklad.naim = 'БУМАГА';

{Снятие блокировки UNLOCK sklad}

{Проверка успешности обновления не требуется)

Рис. 6.9. Реализация пессимистического подхода

Блокировки, поддерживаемые СУБД Oracle, делятся на следующие пять классов:

  • блокировки языка манипулирования данными. Они включают бло­кировки строк данных или блокировки на уровне таблицы, относящиеся ко всем строкам таблицы;

  • блокировки языка описания данных, используемые для защиты опре­делений структур объектов;

  • внутренние блокировки, применяемые СУБД Oracle для защиты опреде­ленных структур памяти, в частности буферного кэша и библиотечного кэша;

  • распределенные блокировки, используемые СУБД для согласования ресурсов машин, входящих в кластер;

  • блокировки параллельного управления кэшем.

Соседние файлы в папке ответы