我正在寻找一个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语句的工具
,那就太棒了答案 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;
/
这种触发器的格式非常简单,您实际上可以以编程方式生成它们。