假设数据库中有n个表。无论在数据库中的任何表中发生什么插入,更新,删除,都必须在名为“Audit_Trail”的表中捕获,其中我们在审计跟踪表中具有以下列。
SERVER_NAME AT_date AT_time TABLE_NAME COLUMN_NAME 行动 OLD_VALUE New_Value
在哪个表上的服务器,在哪个列上,需要捕获哪个日期和时间。此外,“操作”列跟踪操作是插入,更新还是删除,我们还必须捕获旧值和新值。
那么最好的方法是什么?我们可以创建一个数据库级别触发器,可以在任何插入,更新或删除的情况下触发触发器吗?
答案 0 :(得分:0)
最好的方法是使用Oracle自己的审计功能。
AUDIT ALL ON DEFAULT BY ACCESS;
http://docs.oracle.com/cd/E11882_01/network.112/e36292/auditing.htm#DBSEG392
回应评论......
想要审计对数据库中的表所做的每个更改都没有什么不寻常之处 - 因此系统中已经提供了完全相同的功能。然后使用触发器会更好,因为它不能轻易绕过。但是,如果您想使用这种预先提供的,功能强大且易于使用的功能,您可能需要稍微妥协一下您的特定要求,但收益将是一个优秀的解决方案,将使用与其他成千上万的代码和配置相同的代码和配置Oracle系统。