Есть ли в Oracle что-то вроде захвата данных изменений в SQL Server 2008? - PullRequest
3 голосов
/ 01 октября 2008

Изменение сбора данных - это новая функция в SQL Server 2008. Из MSDN:

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

Это очень мило - больше не нужно добавлять столбцы CreatedDate и LastModifiedBy вручную.

Есть ли у Oracle что-нибудь подобное?

Ответы [ 5 ]

5 голосов
/ 01 октября 2008

Конечно. У Oracle на самом деле есть ряд технологий для такого рода вещей, в зависимости от требований бизнеса.

  • В Oracle долгое время (8i дней) было то, что называется Workspace Manager , что позволяет вам активировать версию таблицы и отслеживать изменения во времени. Это может быть немного тяжеловесно, потому что оно основано на представлениях с триггерами вместо триггеров.
  • Начиная с версии 11.1 (в качестве дополнительной опции для корпоративной версии), в Oracle предусмотрена функция Total Recall, которая асинхронно добывает журналы повторов для изменений данных, которые регистрируются в отдельной таблице, которую затем можно запрашивать с использованием синтаксиса запроса флэшбека основной стол. Total Recall автоматически собирается для разделения и сжатия исторических данных и автоматически выполняет очистку данных после определенного периода хранения данных.
  • Oracle использует технологию LogMiner, которая добывает журналы повторов и представляет транзакции потребителям. Существует ряд технологий, которые затем создаются на основе LogMiner, включая Change Data Capture и Streams .
  • Вы также можете использовать материализованные представления и журналы материализованных представлений, если целью является репликация изменений.
3 голосов
/ 01 октября 2008

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

Это осуществляется с помощью пакета DBMS_CHANGE_NOTIFICATION.

Вот инфодок об этом: http://www.oracle -base.com / статьи / 10г / dbms_change_notification_10gR2.php

Если вы подключаетесь к Oracle из приложения C #, ODP.Net (клиентская библиотека Oracles .Net) может взаимодействовать с уведомлением об изменении данных, чтобы предупредить ваше приложение c # о внесении изменений в Oracle - довольно странно. Прошу прощения за повторный опрос на предмет изменений данных, если вы спросите меня - просто зарегистрируйте таблицу, настройте уведомление об изменениях данных через ODP.Net и wala, методы c # вызываются только при необходимости. Woot!

2 голосов
/ 01 октября 2008

«больше не нужно добавлять столбцы CreatedDate и LastModifiedBy вручную» ... до тех пор, пока вы можете позволить себе хранить всю историю вашей базы данных в оперативном режиме в журналах повторов и не хотите перемещать данные в другую базу данных.

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

Сказав это, я добавлю, что Oracle 10g + может извлекать файлы журналов, просто используя синтаксис запроса флэшбэка. Примеры здесь: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm#i2112847

Эта технология также используется в утилите экспорта Oracle Datapump для предоставления согласованных данных для нескольких таблиц.

0 голосов
/ 28 марта 2018

Oracle имеет механизм Flashback Data Archive. От Свежий взгляд на изменения строки аудита :

Oracle Flashback Query извлекает данные в том виде, в каком они существовали в прошлом.

Архив данных Flashback предоставляет возможность отслеживать и сохранять все транзакционные изменения в таблице в течение срока ее службы. Больше нет необходимости встраивать этот интеллект в ваше приложение. Архив данных Flashback полезен для соответствия политикам стадии записи и отчетам аудита.

CREATE TABLESPACE SPACE_FOR_ARCHIVE 
datafile 'C:\ORACLE DB12\ARCH_SPACE.DBF'size 50G;

CREATE FLASHBACK ARCHIVE longterm
TABLESPACE space_for_archive
RETENTION 1 YEAR;

ALTER TABLE EMPLOYEES FLASHBACK ARCHIVE LONGTERM;


select EMPLOYEE_ID, FIRST_NAME, JOB_ID, VACATION_BALANCE,
        VERSIONS_STARTTIME TS,
        nvl(VERSIONS_OPERATION,'I') OP
from EMPLOYEES
versions between timestamp  timestamp '2016-01-11 08:20:00' and systimestamp
where EMPLOYEE_ID = 100
order by EMPLOYEE_ID, ts;
0 голосов
/ 01 октября 2008

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

В Oracle 8i вы можете включить это только для всей базы данных, а не для таблицы за раз, однако 9i представила Fine Grained Auditing, который обеспечивает гораздо большую гибкость. Это было расширено в 10/11 г.

Для получения дополнительной информации см http://www.oracle.com/technology/deploy/security/database-security/fine-grained-auditing/index.html.

Также в 11g Oracle представила хранилище Audit Vault, которое обеспечивает безопасное хранилище для информации аудита, даже администраторы баз данных не могут изменить эти данные (согласно документации Oracle, я еще не использовал эту функцию). Более подробную информацию можно найти на http://www.oracle.com/technology/deploy/security/database-security/fine-grained-auditing/index.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...