2012-01-27 4 views
1

Я ищу пакет оракула, который будет записывать изменения в таблицу и сохранять их в таблице журналов или журналов. Например, выполнение SQL-операторы, такие какКонтроль версий на уровне строк для Oracle?

insert into foo(x,y) values (12,34); 

бы захватить эти действия в соответствующей таблице, что-то вроде:

timestamp   who  operation column value 
---------   ---  --------- ------ ----- 
12-JAN-2012 13:22 MH  insert  x   12 
12-JAN-2012 13:22 MH  insert  y   13 

Было бы замечательно, если бы были средства для генерации SQL заявления, основанные на этом информация

ответ

2

Это может быть сделано с помощью мелкозернистой аудита:

http://docs.oracle.com/cd/E11882_01/network.112/e16543/auditing.htm#DBSEG525

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

1

Это может быть сделано простым trigger на целевой таблице, которая срабатывает при вставке. Нечто подобное возможно:

CREATE OR REPLACE TRIGGER foo_audit 
AFTER INSERT OR DELETE OR UPDATE ON foo 
FOR EACH ROW 
BEGIN 
    IF INSERTING THEN 
     ... 
    ELSIF UPDATING THEN 
     ... 
    ELSIF DELETING THEN 
     ... 
    END IF; 

END; 
/

Формат такого триггера достаточно прост, что вы могли бы на самом деле их создания программно.