Создание таблицы аудита в SQL Server, не подверженной откатам транзакций - PullRequest
0 голосов
/ 25 февраля 2010

Я новичок в SQL. У меня есть большое количество хранимых процедур в моей производственной базе данных. Я планировал написать таблицу аудита, которая будет использоваться этими хранимыми процедурами для отслеживания изменений (эти хранимые процедуры будут писать в эту таблицу аудита). Но проблема в том, что когда транзакция откатывается, строки, вставленные в таблицу аудита, также откатываются. Есть ли способ создать таблицу, на которую не влияют откаты транзакций. Любая другая идея, которая удовлетворяет моему требованию, приветствуется !!!

Ответы [ 2 ]

3 голосов
/ 25 февраля 2010

Нельзя, когда сеанс запускает транзакцию, все действия в этом сеансе содержатся внутри транзакции.

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

Но аудит действий, откат которых немного необычен, так как вы проверяете вещи никогда не происходило с точки зрения базы данных, и запись аудита и фактическое состояние базы данных будут конфликтовать.

1 голос
/ 25 февраля 2010

ОК, если вы хотите знать, что было откатано, вот что вы делаете:

Пусть ваш существующий процесс аудита обработает успешные вставки.

Поместите значения для вставки в табличную переменную в вашем sp. Важно, чтобы это была табличная переменная, а не временная таблица. Теперь в блоке catch для транзакции выполните откат. Это не очистит переменную таблицы. Затем вставьте в таблицу аудита значения из табличной переменной (добавьте поле в таблицу аудита, чтобы можно было пометить записи как откат и, возможно, одно для сообщения об ошибке.)

Мы не делаем это специально для аудита, но мы сделали это для записи ошибок.

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