Перебои в сети приводят к тому, что запросы к хранимой процедуре через ссылку на БД зависают навсегда

StackOverflow https://stackoverflow.com/questions/331114

Вопрос

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

Последние пару недель он принял зловещий оборот. Вместо сбоя процедуры зависают в странном заблокированном состоянии. Они не могут быть уничтожены внутри Oracle, и пока они существуют, любая попытка запустить другие копии процедуры также будет зависать. Единственное решение, которое мы нашли, - убить оскорбительные процедуры с помощью команды " kill -9 " из ОС. Некоторые из этих процедур не менялись месяцами, даже годами, поэтому я подозреваю, что причина в конфигурации БД или БД.

У кого-нибудь есть идеи о том, что мы можем сделать, чтобы решить проблему? Или в PL / SQL есть механизм тайм-аута, который я могу добавить в код, чтобы я мог создать исключение, которое я могу обрабатывать программно?

Это было полезно?

Решение 2

Мы так и не смогли определить, что послужило причиной этого. Мы считаем, что это было дефектом октябрьского кумулятивного патча 2008 года. Возможно, более поздний патч, как это исправить. Это не происходило в течение пары месяцев (и у нас были некоторые перебои в сети), так что, надеюсь, проблема ушла.

Другие советы

Какая версия базы данных? Они застряли под управлением SQL или в PL / SQL? Кто-нибудь недавно добавил обработку исключений в подпрограммы? Я помню, что в 9iR2 нам говорили, что вместо того, чтобы возбудить исключение в вызывающей подпрограмме, мы должны были перехватить все исключения и продолжить работу (в основном пытались запустить обработку всех элементов в работе, даже если некоторые из них заканчивались неудачей). У нас неизбежно были задания, застрявшие в бесконечном цикле, с ошибками SQL, которые попадали в обработчик исключений и пытались снова. И их нельзя убить, поскольку КОГДА ДРУГИЕ также поймали исключение «ваша сессия была убита». Я думаю, что последнее изменилось в 10g, чтобы исключение не было поймано.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top