Базы данных Oracle - статьи

         

Подведём небольшой итог изучения взаимных


Подведём небольшой итог изучения взаимных блокировок:
  • Взаимная блокировка может возникать только между двумя и более сеансами. Всё остальное – это баги (ошибки) Oracle.

  • В каждом сеансе обязательно должна быть открыта транзакция.

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

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

  • Данная цепочка должна замыкаться. То есть последняя ожидающая блокировка в  цепочке должна ожидать первую установленную блокировку.

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

  • Одинаковая последовательность обработки ресурсов в большинстве случаев предотвращает взаимное блокирование.

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

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

  • Взаимная блокировка иногда может приводить к зависанию приложения, а не к вызову исключения.


  • Содержание раздела