2011-05-18 60 views
1

我想向我的所有表中添加兩列[創建時間] & [修改時間]捕獲審計跟蹤。將來,這些字段可能用於分區表。請建議這樣做的最佳方法是什麼?通過DB上的某些觸發器或通過代碼更新這些值是否明智?我們正在使用Hibernate API與Oracle 11g進行對話。每行執行審計跟蹤的方法

回答

1

既然你已經使用Hibernate,看看Hibernate Envers

的Envers項目旨在實現持久化類的容易審計/版本。你所要做的就是用@Audited註釋你想要審計的持久類或它的一些屬性。對於每個審計實體,將創建一個表格,該表格將保存對實體所做更改的歷史記錄。然後您可以毫不費力地檢索和查詢歷史數據。

這是更重量級的解決方案,但給你的應用程序完全控制。

或者,您可以通過Oracle PL/SQL觸發器來執行此操作,但您的應用程序對此有限制。

0

有利有弊。

個人而言,我使用觸發器。

雖然這樣做會導致一個有趣的邊界案例,但是如果您有一個主表和許多相關的表(您想要共享審計跟蹤)。說出與訂單相關的訂單+訂單行+ [大量其他相關表格]。在這種情況下,要審覈的有趣數據是訂單,因此訂單應該可以包含審計相關的細節。如果你有觸發器爲每個插入/更新/刪除命令行+ [很多其他相關表]觸發,那麼性能最終會受到影響。