лучший способ отслеживать изменения данных в Oracle - PullRequest
7 голосов
/ 20 апреля 2011

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

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

Журнал с материализованным представлением хорош для меня тем, что я могу сравнить его с исходной таблицей, а затем получить разные записи , даже разные поля, я думаю, то же самое с созданием / копированием новой таблицы из оригинала ( но я не знаю, что отличается?);

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

У кого-нибудь есть опыт, как лучше всего отслеживать изменения данных в Oracle?

Ответы [ 3 ]

5 голосов
/ 20 апреля 2011

Вам захочется взглянуть на оператор AUDIT .Он собирает все записи аудита в таблице SYS.AUD $.

Пример:

AUDIT insert, update, delete ON t BY ACCESS

С уважением,
Роб.

2 голосов
/ 20 апреля 2011

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

Если это так, вы можете рассмотреть потоки Oracle (другие варианты, такие как расширенная репликация, но вам необходимо учитывать ваши потребности):

Из Oracle:

Когда вы используете потоки, репликация DML или DDL изменение обычно включает три шага:

Процесс захвата или приложение создает одно или несколько логических изменений записи (LCR) и помещает их в очередь. LCR - это сообщение с конкретный формат, который описывает изменение базы данных. Процесс захвата переформатирует изменения, захваченные из повторить вход в LCR и приложения можно построить LCR. Если изменение было язык манипулирования данными (DML) операции, то каждый LCR инкапсулирует изменение строки в результате DML операция с общей таблицей на исходная база данных. Если изменение было язык определения данных (DDL) операции, то LCR инкапсулирует изменение DDL, которое было сделано в общий объект базы данных в источнике базы данных.

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

В базе данных назначения применяется процесс потребляет изменение применяя LCR к общему объект базы данных. Процесс подачи заявки может снять с LCR и применить его напрямую, или процесс подачи заявки может исключить LCR и отправьте его обработчику заявки. В среде репликации потоков обработчик применения выполняет индивидуальные обработка LCR, а затем применяется LCR для общего объекта базы данных.

2 голосов
/ 20 апреля 2011

Возможно, вы захотите взглянуть на Золотые Ворота.Это позволяет легко вносить изменения по цене, но с хорошей производительностью и быстрой настройкой.

Если производительность не является проблемой, триггеры и аудит могут быть допустимым решением.Если производительность является проблемой, и Golden Gate считается слишком дорогим, вы также можете использовать Logminer или Change Data Capture.Учитывая этот выбор, я бы предпочел CDC.Как видите, существует довольно много вариантов, как в режиме реального времени, так и в автономном режиме.

Кодирование решения вручную также имеет свою цену, Golden Gate стоит изучить.

...