#sql #sql-server #tsql #sql-server-2008 #triggers
#sql #sql-сервер #tsql #sql-server-2008 #триггеры
Вопрос:
Я столкнулся с проблемой, когда устаревшая база данных, которую многие приложения читают / записывают, продолжает изменяться, и я не могу понять, что ее меняет.
Мое приложение изменяет определенное значение в определенной строке таблицы, но что-то продолжает изменять его обратно через неделю или около того, и я в замешательстве, пытаясь понять, что бы это могло быть.
Есть ли какой-либо способ, которым я могу привязать событие / триггер к этому значению, а затем сохранить / отправить по электронной почте подробную информацию о том, что его изменило? или, по крайней мере, в какое время оно было изменено?
Ответ №1:
Если у вас есть доступ к строкам подключения для ваших устаревших приложений, добавьте Application Name
ключевое слово в строку подключения. Некоторая информация здесь.
На стороне сервера создайте триггер для таблицы, которую вы хотите отслеживать. В журнале запуска app_name()
в таблицу журнала. Вот так:
create trigger Tracker
on TableName
after insert, update, delete
as
insert LogTable(TableName, ApplicationName)
values('TableName', app_name())
go
Кроме того, если у вас есть выделенный пользователь для каждого приложения, вы могли бы проверять и регистрировать system_user
значение.
Если ваши приложения размещены на разных серверах, вы также можете добавить IP-адрес клиента. Вы можете проверить это следующим образом select client_net_address from sys.dm_exec_connections where session_id = @@SPID
.
Кроме того, вы можете использовать profiler для просмотра всех этих параметров.
Но все это с оговоркой, что вы можете обновить свои строки подключения.