2013-04-11 24 views
0

假设数据库中有n个表。无论在数据库中的任何表上进行插入,更新还是删除,都必须在名为“Audit_Trail”的表中捕获,我们在审计跟踪表中具有以下列。plsql中DML命令的系统级触发器

SERVER_NAME AT_date AT_time TABLE_NAME 列名 行动 OLD_VALUE NEW_VALUE

上表中的服务器,在其列,其上被捕获的日期和时间的需求。此外,“动作”栏跟踪动作是插入,更新还是删除,我们还必须捕获旧值和新值。

那么最好的方法是什么?我们可以创建一个数据库级触发器,在任何插入,更新或删除的情况下触发触发器吗?

回答

0

最好的方法是使用Oracle自己的审计功能。

AUDIT ALL ON DEFAULT BY ACCESS; 

http://docs.oracle.com/cd/E11882_01/network.112/e36292/auditing.htm#DBSEG392

在回应评论...

没有什么不寻常的希望审计对数据库中的表的每次改变 - 因此有已经在系统中提供的功能为了做到这一点。最好使用触发器,因为它不能被轻松绕过。但是,如果您想要使用这种预先提供的,功能强大且易于使用的功能,您可能需要稍微妥协一下您的特定需求,但回报将是一个优秀的解决方案,它将使用代码和配置与其他数千个Oracle系统。

+0

假设数据库中有n个表。无论在数据库中的任何表上进行插入,更新还是删除,都必须在名为“Audit_Trail”的表中捕获,我们在审计跟踪表中具有以下列。我想以这种方式,我可以不,如果我可以得到所有的细节到一个单独的表Server_Name AT_date AT_time Table_name Column_name操作Old_value New_Value – user2001117 2013-04-11 10:50:24

+0

可以在dba水平完成 – user2001117 2013-04-11 10:51:39

+0

好吧我将检查链接并恢复回你。 – user2001117 2013-04-11 10:58:51