我正在尝试使用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?
谢谢
答案 0 :(得分:0)
我正在考虑使用Context_Info来审核更改(Web应用程序)。但经过一些测试后,理解它并不是一个好主意。由于连接池,context_info无法正常工作。
结束使用与每个逻辑会话+表关联的GUID标识符,其中存储会话GUID和与会话相关的信息+每个表将该标识符存储在单独的列中。编码不像context_info()..
那么容易据我从文档中了解,更改跟踪不是为审计目的而设计的(想想这就是你想要做的)。