У меня постоянно работает приложение .NET (служба Windows), которое постоянно слушает таблицу событий в Oracle и выполняет какие-то действия при срабатывании предупреждения. Я использую пакет Oracle.ManagedDataAccess.
Я использую пакет DBMS_ALERT для достижения своей цели.
Следующий код выполняется для прослушивания предупреждений:
string query = "BEGIN " +
" dbms_alert.register(:Name);" +
" dbms_alert.WaitOne(:Name, :Message, :Status, :timeout);" +
" dbms_alert.remove(:Name);" +
"END;";
Это именно то, что я мог найти в документации Oracle.
Решение работает, но у меня есть 1 небольшая проблема Когда срабатывает предупреждение, мое приложение начинает делать свои вещи, и впараллельно я снова начинаю слушать (асинхронно). Но иногда от удаления оповещения до перерегистрации оповещения уходит несколько секунд. И это происходит много раз, когда я пропускаю оповещения.
Вопросы 1) Есть ли способ, которым я могу продолжать слушать, даже когда срабатывает оповещение, поэтому я не пропускаю ни одногоМероприятия? 2) С функциональной точки зрения мне кажется странным, что мне приходится каждый раз регистрировать и удалять оповещения. Это действительно необходимо?