Монитор изменений таблиц Oracle

У меня есть приложение Java, которое подключено к представлению на удаленной базе данных Oracle.

Кто-нибудь знает, как в Java отслеживать изменения в этой таблице? Т.е. если есть вставки обновлений и т.д., мне нужно будет отреагировать.

Отслеживание изменений в таблице базы данных - это «запах дизайна». Вам следует подумать о внедрении событийно-управляемой архитектуры (EDA), поддерживаемой служебной шиной предприятия (ESB). Например, Mule (www.mulesoft.com).

Adriaan Koster 22.12.2011 13:44

Да, больше модных словечек и "архитектура" - всегда правильный ответ.

Gaius 22.12.2011 20:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
2
7 511
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете поместить триггер INSERT / UPDATE / DELETE в таблицу, чтобы выполнить какое-либо действие при внесении в таблицу изменений «данных». (в отличие от изменений в структуре таблицы)

Я считаю, что 10g также поддерживает триггеры по просмотрам.

но я не уверен, как вы можете уведомить java-процесс об этом другом, а не с помощью опроса.

Извините.

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

Джастин Кейв в комментариях предполагает, что вы можете настроить Oracle Streams для отправки записей логических изменений (LCR), на которые приложение Java может подписаться через JMS. Или триггер может записывать записи в расширенную очередь, на которую Java может подписаться через JMS.

вам все равно придется опасаться переходов Oracle .. из-за того, как работают транзакции Oracle, триггер срабатывает при изменении, но он также может срабатывать несколько раз.

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

В зависимости от того, насколько тяжелой должна быть архитектура, вы можете настроить Oracle Streams для отправки записей логических изменений (LCR), на которые приложение Java может подписаться через JMS. Или триггер может записывать записи в расширенную очередь, на которую Java может подписаться через JMS.

Justin Cave 03.12.2008 17:54

Проблема в том, что Streams работает на уровне объекта, не уверен, что вы можете настроить Streams для отправки LCR для представления. Является ли представление таким, что вы можете идентифицировать несколько таблиц, на которые нужно подписаться на изменения, а затем опрашивать представление, чтобы узнать, действительно ли изменилась интересующая вас строка?

Justin Cave 03.12.2008 18:07

Хотя верно, что триггеры могут запускаться несколько раз с откатом между ними, Oracle AQ / Streams является транзакционным, поэтому действие постановки в очередь также будет откатано. Единственная проблема будет, если вы сделали что-то, что нельзя откатить в триггере (например, отправили электронное письмо).

Justin Cave 03.12.2008 18:09

К вашему сведению, я только что узнал, когда изучал Oracle Streams, они отказались от этой технологии в Oracle 12c, чтобы заменить ее другой под названием GoldenGate, которая, похоже, пытается удовлетворить ряд потребностей, связанных с репликацией и потоковой передачей данных во внешние источники.

Jonathan 09.12.2016 02:08

Посмотрите на Уведомление об изменении Oracle, очень интересную возможность Oracle.

Из документации Oracle: «Уведомление об изменении базы данных - это функция, которая позволяет клиентским приложениям регистрировать запросы в базе данных и получать уведомления в ответ на изменения DML или DDL в объектах, связанных с запросами. Уведомления публикуются базой данных, когда транзакция DML или DDL фиксируется. "

Похоже, это работает только для обратных вызовов PL / SQL или C, но это в значительной степени то, что мне нужно, спасибо - теперь, как подключить его к java-приложению ... :)

LenW 03.12.2008 17:53

Я считаю, что Oracle может вызывать хранимые процедуры Java, я просто не знаю, как это делать. Однако oracle.com/technology/sample_code/tech/java/jsp/… может помочь.

Powerlord 03.12.2008 18:46

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