【问题标题】:SQL Server 2008 Linked Server and CONTEXT_INFOSQL Server 2008 链接服务器和 CONTEXT_INFO
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-21
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多