我想向我所有的表中添加两列Create Time & Modify Time来捕获审计跟踪.In,将来这些字段可能会用于对表进行分区。请建议一下做这件事的最佳方法是什么?在DB中通过一些触发器或通过代码更新这些值是明智的吗?我们使用Hibernate API与Oracle 11g通信。
发布于 2011-05-18 18:17:52
既然您已经在使用Hibernate,那么看看Hibernate Envers吧
Envers项目旨在实现对持久类的简单审计/版本控制。您所要做的就是用@Audited注释您想要审计的持久化类或它的一些属性。对于每个被审计的实体,将创建一个表,该表将保存对该实体所做更改的历史记录。然后,您可以轻松地检索和查询历史数据。
这是更重量级的解决方案,但让您的应用程序完全控制。
或者,您可以通过Oracle PL/SQL触发器执行此操作,但您的应用程序对此的控制有限。
发布于 2011-05-18 18:21:24
这有好处也有坏处。
就我个人而言,我使用触发器。
但是,当您有一个主表和许多想要共享其审计跟踪的相关表时,这样做会导致一个有趣的边缘情况。比方说订单+订单行+许多其他与订单相关的表。在本例中,要审计的有趣数据是订单,因此订单应该包含与审计相关的详细信息。如果您有一个触发器,用于每次插入/更新/删除订单行+许多其他相关的表,那么性能最终会受到影响。
https://stackoverflow.com/questions/6043065
复制相似问题