Я использую devart dotConnect для Oracle с базой данных Oracle 12c. В моем приложении есть объект OracleDependency
, созданный для чтения уведомлений при изменении таблицы.
Он отлично работает для Oracle 12C. Недавно я создал новый экземпляр с использованием Oracle 18c. Я понял, что уведомления задерживаются, чтобы прибыть в мое заявление, иногда это пропускалось.
Я попытался копать глубоко и найти проблему. Я обнаружил, что таблица USER_CHANGE_NOTIFICATION_REGS
SELECT * from USER_CHANGE_NOTIFICATION_REGS
показывает старые зарегистрированные уведомления. Кажется, что он не был очищен, когда я остановил и запустил свое веб-приложение из IIS.
Я пытался вручную очистить эти уведомления, используя DBMS_CHANGE_NOTIFICATION.DEREGISTER
, но это не работает, потому что было создано с использованием другогосессия. Мое приложение начинает работать снова только через несколько часов, когда этот список очищается сам по себе.
Интересно, есть ли в Oracle 18c какие-то новые параметры / настройки для определения какого-то времени ожидания? Должен ли я что-то изменить в своем приложении, чтобы очистить зарегистрированные уведомления перед его остановкой?
Эти записи на изображении ниже старые. Я подозреваю, что откладывает отправку новых уведомлений, потому что пытается вызвать функцию обратного вызова (IP: порт) из зарегистрированных старых уведомлений. Когда этот список очищается (я понятия не имею, как он очищается сам по себе), приложение снова работает.
Изображение:
https://i.stack.imgur.com/kAlNl.png