2011-09-01 188 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()那样容易。

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

相关问题