Разрешение Конфликтов Блокировок при помощи SQL. Мертвые блокировки

Рубрика: Управление Параллелизмом Данных

Чтобы разрешить конфликт блокировки:

  • Заставьте сеанс, содержащий блокировку, сделать фиксацию или откат

  • Завершите сеанс, содержащий блокировку (в аварийном режиме)

Разрешение Конфликтов Блокировок

Чтобы разрешить конфликт блокировки, сеанс, содержащий блокировку, должен освободить ее. Лучший способ заставить сеанс освободить блокировку, - связаться с пользователем и попросить, чтобы транзакция была завершена.

В чрезвычайной ситуации администратор может аварийно завершить сеанс, содержащий блокировку, нажимая кнопку Kill Session. Помните, что, когда сеанс уничтожается, вся работа в пределах текущей транзакции теряется (откатывается). Пользователь, сеанс которого уничтожается, должен войти в систему снова и восстановить всю работу начиная с последней фиксации уничтоженного сеанса.

Пользователи, сеансы которых были уничтожены, получают следующую ошибку в следующий раз, когда они пытаются выполнить SQL-оператор:

    ORA-03135: connection lost contact

Отметьте: Сеансовый снайпер PMON может автоматически уничтожать бездействующие сеансы в соответствии с установленным тайм-аутом, что может быть сконфигурировано посредством профилей или Менеджера ресурсов.

Разрешение Конфликтов Блокировок при помощи SQL

Можно использовать SQL-операторы, чтобы определить блокирубщий сеанс и уничтожить его.

Разрешение Конфликтов Блокировок при помощи SQL

Манипулирование сеансом, как и большинство других задач в EM, может также быть сделано при помощи SQL-операторов. Таблица V$SESSION содержит подробности всех подключенных сеансов. Значение в BLOCKING_SESSION равно ID сеанса, который блокирует. Если Вы запрашиваете SID и SERIAL# (где SID соответствует ID блокирующего сеанса), Вам будет предоставлена информация, необходимая, чтобы выполнить операцию уничтожения сеанса.

Отметьте: Можно использовать менеджер ресурсов Базы данных, чтобы автоматически отсоединять сеансы, которые блокируют других и неактивны.

Мертвые блокировки

Мертвые блокировки

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

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

В примере на рисунке транзакция 1 должна или зафиксироваться, или откатиться в ответ на обнаружение ошибки мертвой блокировки. Если она делает фиксацию, она должна повторно сделать второе обновление, чтобы завершить свою транзакцию. Если транзакция откатывается, она должна повторно выполнить оба оператора, чтобы завершить свою транзакцию.

Далее: Гарантия Хранения Данных Отката

Смотрите также
Комментарии
Написать

(обязательно)

(обязательно)

Это не спам (обязательно)