2011-09-01 140 views
2

我試圖使用SQL Server 2008更改跟蹤功能。一旦啓用該功能,您可以使用CHANGETABLE(...功能來查詢更改跟蹤的歷史,是由SQL Server內部保存,例如:SQL Server 2008鏈接服務器和CONTEXT_INFO

SELECT 
CT.ID, CT.SYS_CHANGE_OPERATION, 
CT.SYS_CHANGE_COLUMNS, CT.SYS_CHANGE_CONTEXT 
FROM 
CHANGETABLE(CHANGES dbo.CONTACT,20) AS CT 

其中SYS_CHANGE_CONTEXT列記錄CONTEXT_INFO()會話值。這個字段是審計有用誰改變了什麼等等

一些使用四部分組成的符號由具有家用服務器作爲鏈接服務器如遠程SQL Server正在執行的更改數據的語句:

INSERT INTO [home server].[db name].[dbo].[CONTACT](id) values(@id) 

我的問題是執行查詢的會話中的遠程服務器上設置的CONTEXT_INFO()沒有在我的主服務器更改跟蹤中找到,即它看起來不像CONTEXT_INFO跨越分佈式查詢。這意味着以下將而不是導致CONTEXT_INFO記錄在主服務器變更跟蹤上。

-- I'm running on a remote server 
WITH CHANGE_TRACKING_CONTEXT (0x1256698477) 
INSERT INTO [home server].[db name].[dbo].[CONTACT](id) values(@id) 

有誰知道這是否是一個限制或是否有堅持的方式在整個分佈式查詢/通信CONTEXT_INFO?

感謝

回答

0

我想使用CONTEXT_INFO審覈變化(Web應用程序)。但在做了一些測試之後就明白它不是個好主意。由於連接池context_info沒有按照我想要的方式工作。

使用與每個邏輯會話+表關聯的GUID標識符結束,其中存儲會話GUID和與會話+相關的信息每個表將該標識符存儲在單獨的列中。並不像編寫context_info()那樣容易。

並且據我從文檔中瞭解到,更改跟蹤不是爲審計目的而設計的(認爲這就是您要做的)。