У нас есть многопоточное пакетное задание, зашедшее в тупик.Я получаю противоречивые ответы от наших DBA о том, что на самом деле вызывает тупик.
Caused by: java.sql.SQLException: ORA-00060: deadlock detected while waiting for resource
Вывод ошибки ссылается на sql для вставки в таблицу A. Каждая строка в таблице A должна быть уникальной.Таблица A имеет внешние ключи для двух других таблиц, обе из которых являются индексированными, а первичные ключи состоят из двух столбцов.Многие строки в таблице A могут указывать на один и тот же FK в родительских таблицах.Наш код обрабатывает ошибки FK, пытаясь вставить их в родительские таблицы, а затем снова пытаться добавить их в таблицу A.
sql в журнале трассировки ссылается на вставку таблицы A sql (не показывает значения привязки параметров).Означает ли это, что есть два идентичных оператора SQL, которые пытаются вставить в таблицу А, и в этом случае наша предыдущая логика где-то не является поточно-ориентированной?Или действительно может быть, что есть две вставки, ссылающиеся на неудовлетворенный ФК?И тупик возникает из-за нашей обработки ошибок при попытке вставить в родительскую таблицу.Если да, то будет ли sql в трассировке ссылаться на родительскую таблицу sql?
Или, наоборот, первоначальная попытка вставки устанавливает блокировку строки, а затем, после обработки ошибки, выполняет вторую попыткувставить причину тупика?Любая дальнейшая помощь отладки?