Oracle的行级修订控制?

时间:2012-01-27 23:37:02

标签: oracle logging revision

我正在寻找一个oracle包,它将捕获对表的更改并将它们保存到日志或日志表中。例如,执行诸如

之类的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 个答案:

答案 0 :(得分:2)

这可以使用细粒度审计来完成:

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

作为替代方案,您还可以为相关表格打开闪回存档。然后,您可以在过去的任何时间查询表的内容。这不会告诉你做了改变(以及它是如何完成的)。

答案 1 :(得分: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;
/

这种触发器的格式非常简单,您实际上可以以编程方式生成它们。