Вывод тупика Oracle при возникновении внешних ключей - PullRequest
0 голосов
/ 04 декабря 2018

У нас есть многопоточное пакетное задание, зашедшее в тупик.Я получаю противоречивые ответы от наших 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?

Или, наоборот, первоначальная попытка вставки устанавливает блокировку строки, а затем, после обработки ошибки, выполняет вторую попыткувставить причину тупика?Любая дальнейшая помощь отладки?

1 Ответ

0 голосов
/ 04 декабря 2018

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

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

HTH, KR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...