ORA-00060: Обнаружена взаимоблокировка при ожидании ресурса
OracleЧто это значит?
Две или более сессии оказались во взаимоблокировке, каждая ждёт ресурс, удерживаемый другой. Oracle обнаруживает цикл, выбирает жертву и откатывает оператор этой сессии.
Почему возникает?
Захват блокировок строк в разном порядке, перекрёстное обновление одних и тех же строк разными транзакциями, блокировки таблицы при обновлении родительской таблицы из-за неиндексированных внешних ключей или параллельный DML над bitmap-индексом.
Как исправить
Изучите trace-файл взаимоблокировки (граф), на который ссылается alert log, чтобы найти конфликтующие SQL-операторы и строки. В приложении всегда обращайтесь к таблицам/строкам в одном и том же порядке. Индексируйте столбцы внешних ключей (неиндексированные FK — классическая причина взаимоблокировок). Делайте транзакции короткими и пересмотрите частоту commit. Перехватывайте в приложении транзакцию, попавшую во взаимоблокировку, и повторяйте её.
Ещё по этой СУБД
- ORA-00001Нарушено ограничение уникальности
- ORA-00054Ресурс занят, а захват запрошен с NOWAIT, или истёк тайм-аут
- ORA-01017Неверное имя пользователя/пароль; вход запрещён
- ORA-01555Snapshot too old: слишком маленький номер сегмента отката
- ORA-01652Не удаётся расширить временный сегмент на N в табличном пространстве
- ORA-04031Не удаётся выделить N байт разделяемой памяти