Регистрация изменений уведомлений Oracle не очищается в Oracle 18c - PullRequest
0 голосов
/ 25 октября 2019

Я использую 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

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Решено! Проблема заключалась в брандмауэре Windows. Я провел тест с использованием Oracle 12c, и у меня возникла та же проблема. Затем я просто отключаю брандмауэр Windows, и созданное ранее уведомление об изменении удаляется из таблицы DBA_Change_Notification_Regs.

Возможно, другое приложение / служба отвечает за это и блокируется брандмауэром. Интересно, какое приложение или какой номер порта он использует для этого.

0 голосов
/ 28 октября 2019

Попробуйте уменьшить значение command.Notification.Timeout.

Если это не поможет, выполните:

1) отправьте нам небольшой полный тестпроект для воспроизведения с соответствующим сценарием DDL / DML

2) сообщите нам точные версии вашего Oracle Server 18c и Oracle Client

...