Связанный сервер SQL Server 2008 и CONTEXT_INFO - PullRequest
2 голосов
/ 01 сентября 2011

Я пытаюсь использовать функцию отслеживания изменений SQL Server 2008. Как только эта функция включена, вы можете использовать функцию CHANGETABLE(... для запроса истории отслеживания изменений, которая хранится внутри SQL Server, например ::10000

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, который имеет домашний сервер в качестве связанного сервера, например ::100100

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 по распределенному запросу?

Спасибо

1 Ответ

0 голосов
/ 23 января 2012

Я думал об использовании Context_Info для аудита изменений (веб-приложение). но после некоторых испытаний понял, что это не очень хорошая идея. Из-за пула соединений context_info работала не так, как мне хотелось.

Завершено использованием идентификатора GUID, связанного с каждым логическим сеансом + таблицей, где хранится идентификатор GUID сеанса и информация, относящаяся к сеансу +, каждая таблица хранит этот идентификатор в отдельном столбце. Не так просто кодировать, как было бы с context_info () ..

И, насколько я понял из документации, отслеживание изменений не предназначено для целей аудита (думаю, это то, что вы пытаетесь сделать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...