2014-01-07 27 views

回答

0

這是一個使用觸發器的解決方案。

1 - 爲每個需要歷史記錄的表創建一個觸發器。

2 - 在操作期間將修改後的數據(INS,UPD,DEL)從基本表複製到審計表。

3 - 以XML格式存儲所有數據,以便多個表可以將數據存儲在同一個審計表中。

我在我的一篇博客文章中涵蓋了這一點。這是審覈少量數據的絕佳解決方案。處理每秒數千條記錄更改時可能會有一個管理費用問題。

請在部署到生產環境之前測試!

以下是審計表,它跟蹤表名稱以及更改類型。

/* 
    Create data level auditing - table. 
*/ 

-- Remove table if it exists 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = 
    OBJECT_ID(N'[ADT].[LOG_DML_CHANGES]') AND type in (N'U')) 
DROP TABLE [ADT].[LOG_DML_CHANGES] 
GO 

CREATE TABLE [ADT].[LOG_DML_CHANGES] 
(
    [ChangeId]BIGINT IDENTITY(1,1) NOT NULL, 
    [ChangeDate] [datetime] NOT NULL, 
    [ChangeType] [varchar](20) NOT NULL, 
    [ChangeBy] [nvarchar](256) NOT NULL, 
    [AppName] [nvarchar](128) NOT NULL, 
    [HostName] [nvarchar](128) NOT NULL, 
    [SchemaName] [sysname] NOT NULL, 
    [ObjectName] [sysname] NOT NULL, 
    [XmlRecSet] [xml] NULL, 
CONSTRAINT [pk_Ltc_ChangeId] PRIMARY KEY CLUSTERED ([ChangeId] ASC) 
) 
GO 

這是文章。

http://craftydba.com/?p=2060

下面的圖像示出了具有多個[TRG_TRACK_DML_CHGS_XXX]的觸發器單[LOG_DML_CHANGES]表。

enter image description here

0

如果你想在時間t記錄該用戶x更新/刪除/插入表y id x,那麼它會引起問題。

選擇您想要審覈的表;爲它們創建審計表並從基表上的觸發器更新它們。很多工作,但最好的辦法。

相關問題