我想在我的所有表格中添加两列[创建时间]& [Modify Time]用于捕获审计跟踪。将来这些字段可用于对表进行分区。请告知这样做的最佳方法是什么?通过DB中的某些触发器或通过代码更新这些值是明智的。我们正在使用Hibernate API与Oracle 11g进行通信。
答案 0 :(得分:1)
由于您已经在使用Hibernate,请查看Hibernate Envers:
Envers项目旨在实现对持久化类的轻松审计/版本控制。您需要做的就是使用@Audited注释要审核的持久类或其某些属性。对于每个经审计的实体,将创建一个表,该表将保存对实体所做更改的历史记录。然后,您可以毫不费力地检索和查询历史数据。
这是更重量级的解决方案,但可以让您的应用程序完全控制。
或者,您可以通过Oracle PL / SQL触发器执行此操作,但您的应用程序将对此进行有限的控制。
答案 1 :(得分:0)
有利有弊。
就个人而言,我使用触发器。
这样做会导致一个有趣的边缘情况,当你有一个主表和许多相关表,你想要分享它的审计跟踪。说订单+订单行+ [许多其他相关表格]与订单相关。在这种情况下,要审核的有趣数据是订单,因此订单应该包含与审计相关的详细信息。如果您为每个插入/更新/删除订单行+ [许多其他相关表格]启动了触发器,那么性能最终会受到影响。