【问题标题】:System level trigger on DML Command in plsqlplsql中DML命令的系统级触发器
【发布时间】:2013-04-03 12:28:59
【问题描述】:

假设数据库中有 n 个表。无论在数据库中的任何表中发生什么插入、更新、删除,都必须在名为“Audit_Trail”的表中捕获,其中我们在审计跟踪表中有以下列。

Server_Name AT_date AT_time 表名 列名 行动 旧值 新值

需要捕获哪个表、哪个列、哪个日期和时间的服务器。此外,“Action”列跟踪操作是插入、更新还是删除,我们还必须捕获旧值和新值。

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

【问题讨论】:

    标签: plsql


    【解决方案1】:

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

    AUDIT ALL ON DEFAULT BY ACCESS;
    

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

    回应评论...

    想要审计对数据库中的表所做的每一次更改并没有什么不寻常的——因此系统中已经提供了用于执行此操作的功能。最好使用触发器,因为它不能轻易绕过。但是,如果您想使用这种预先提供的、强大的、易于使用的功能,您可能不得不在您的特定要求上做出一些妥协,但回报将是一个卓越的解决方案,它将使用与成千上万其他相同的代码和配置甲骨文系统。

    【讨论】:

    • 假设数据库中有n张表。无论在数据库中的任何表中发生什么插入、更新、删除,都必须在名为“Audit_Trail”的表中捕获,其中我们在审计跟踪表中有以下列。如果我可以将所有详细信息放入一个单独的表中,我希望以这种方式进行吗? Server_Name AT_date AT_time Table_name Column_name Action Old_value New_Value
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    相关资源
    最近更新 更多