SQL Server 2008链接服务器和CONTEXT_INFO

时间:2011-09-01 15:21:44

标签: sql-server-2008 linked-server change-tracking

我正在尝试使用SQL Server 2008更改跟踪功能。启用此功能后,您可以使用CHANGETABLE(...功能查询SQL Server内部保留的更改跟踪历史记录,例如:

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使用四部分表示法执行,该远程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?

谢谢

1 个答案:

答案 0 :(得分:0)

我正在考虑使用Context_Info来审核更改(Web应用程序)。但经过一些测试后,理解它并不是一个好主意。由于连接池,context_info无法正常工作。

结束使用与每个逻辑会话+表关联的GUID标识符,其中存储会话GUID和与会话相关的信息+每个表将该标识符存储在单独的列中。编码不像context_info()..

那么容易

据我从文档中了解,更改跟踪不是为审计目的而设计的(想想这就是你想要做的)。