ORA-02049: Тайм-аут: распределённая транзакция ожидает блокировку
OracleЧто это значит?
Распределённая транзакция превысила DISTRIBUTED_LOCK_TIMEOUT, ожидая блокировку в удалённой базе данных. Истёк тайм-аут транзакции.
Почему возникает?
Транзакция, выполняемая через database link, ждёт заблокированную строку на удалённой стороне; длительные транзакции в удалённой сессии, сетевая задержка или конфликтующие блокировки на обеих сторонах.
Как исправить
Найдите и устраните блокирующую блокировку и сессию в удалённой базе данных (v$lock, v$session). Делайте распределённые транзакции короткими и захватывайте необходимые блокировки как можно позже. При необходимости увеличьте DISTRIBUTED_LOCK_TIMEOUT под нагрузку (SPFILE, требуется перезапуск). Для распределённых транзакций в состоянии in-doubt изучите представление DBA_2PC_PENDING и при необходимости разрешите их вручную.
Ещё по этой СУБД
- ORA-28000Учётная запись заблокирована
- ORA-01578Повреждён блок данных Oracle (file #, block #)
- ORA-01722Недопустимое число
- enq: TX - row lock contentionОжидание: сессия заблокирована блокировкой уровня строки, удерживаемой другой транзакцией
- log file syncОжидание: сессия ждёт, пока LGWR сбросит redo на диск при commit
- db file sequential readОжидание: одноблочное физическое чтение, обычно поиск по индексу или таблице
- db file scattered readОжидание: многоблочное физическое чтение, обычно полное сканирование таблицы или index fast full scan