Как программно отправлять оповещения после каждого изменения объектов базы данных в T-SQL - PullRequest
1 голос
/ 05 июня 2009

У меня есть триггер, который отслеживает изменения в объектах базы данных. Ниже приведен код, когда я создал триггер:

CREATE TRIGGER db_trg_ObjectChanges
ON DATABASE
FOR ALTER_PROCEDURE, DROP_PROCEDURE,
 ALTER_INDEX, DROP_INDEX,
 ALTER_TABLE, DROP_TABLE, ALTER_TRIGGER, DROP_TRIGGER,
 ALTER_VIEW, DROP_VIEW, ALTER_SCHEMA, DROP_SCHEMA,
 ALTER_ROLE, DROP_ROLE, ALTER_USER, DROP_USER
AS
SET NOCOUNT ON
INSERT dbo.ChangeAttempt
(EventData, DBUser)
VALUES (EVENTDATA(), USER)
GO

Таблица dbo.ChangeAttempt имеет следующую структуру:

Column           Data Type       Constraints        
------           ---------       -----------

EventData        xml             NOT NULL
AttemptDate      datetime        NOT NULL DEFAULT GETDATE()
DBUser           char(50)        NOT NULL

Я бы хотел получать оповещения, если в таблице dbo.ChangeAttempt для текущей даты найдены какие-либо записи. В электронном письме просто будет сказано, что записи были найдены в dbo.ChangeAttempt на текущую дату. Я использую blat или bmail для отправки большинства моих предупреждений о мониторинге. Я выбираю операторы и выводю их в текстовый файл, а затем отправляю их мне по электронной почте.

Мой вопрос: как мне программно отправить предупреждение, если в dbo.ChangeAttempt были найдены записи на текущую дату (указание на попытку изменения базы данных)?

Ответы [ 2 ]

1 голос
/ 05 июня 2009

Вместо того, чтобы иметь дело с датами, вы можете просто установить битовое поле, чтобы указать, что вы подтвердили изменение - триггер устанавливает его на единицу, а почтовый уведомитель сбрасывает его на 0. Добавьте индекс к биту поле; работа выполнена ... (индекс для битового поля эффективен , пока данные сильно искажены, то есть относительно мало установленных бит).

Возможно, вы сделаете это в сочетании с установкой даты аудита и / или отдельной таблицы аудита.

Вы также можете выбрать сервис-брокер для асинхронной обработки на сервере.

0 голосов
/ 05 июня 2009

создайте ночное задание SQL (запускаемое сразу после полуночи), чтобы запросить в таблице ChangeAttempt значения AttempDate за предыдущий день, используйте xp_cmdshell для запуска программы электронной почты из командной строки или просто используйте xp_sendmail.

если вы хотите его в режиме реального времени, добавьте триггер в ChangeAttempt и оттуда отправьте xp_cmdshell или xp_sendmail.

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