Контроль версий на уровне строк для Oracle? - PullRequest
1 голос
/ 28 января 2012

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

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 ]

2 голосов
/ 28 января 2012

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

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

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

1 голос
/ 28 января 2012

Это может быть достигнуто простым триггером на целевой таблице, которая срабатывает при вставке.Возможно, что-то вроде этого:

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;
/

Формат этого типа триггера достаточно прост, чтобы вы могли фактически сгенерировать его программно.

...