【发布时间】:2011-09-01 15:21:44
【问题描述】:
我正在尝试使用 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?
谢谢
【问题讨论】:
标签: sql-server-2008 linked-server change-tracking