2

我正在尝试使用 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?

谢谢

4

1 回答 1

0

我正在考虑使用 Context_Info 来审核更改(网络应用程序)。但在做了一些测试后明白这不是一个好主意。由于连接池 context_info 没有按我想要的方式工作。

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

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

于 2012-01-23T15:12:15.253 回答