Определение того, какое приложение изменяет значение базы данных sql

#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 для просмотра всех этих параметров.

Но все это с оговоркой, что вы можете обновить свои строки подключения.