«Триггер» при частых изменениях во времени - PullRequest
0 голосов
/ 28 марта 2019

Мне нужно отслеживать конкретную таблицу в базе данных SQL и получать уведомления (в идеале по электронной почте), если в течение какого-либо 30-секундного периода (например) есть большое количество изменений. Не уверены, лучше ли это делать в SQL Server или другим способом.

Я охотился и, похоже, не нашел ничего подходящего, и подумал, что попрошу здесь указать правильное направление.

Так логично, что-то вроде этого: Если число обновлений или вставок превышает 500 в течение 30-секундного периода времени, отправьте электронное письмо по адресу x@xxxxxx.com

Будем весьма благодарны за любые мысли о том, как лучше всего атаковать это.

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

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

Использовать задание агента сервера SQL для выполнения 2Задачи:

  1. Выполнить скрипт для подсчета количества транзакций в этой таблице аудита / журнала за последние 30 секунд
  2. Если он превышает 500, запустить файл сценария powershell / .exe вотправлять письма
0 голосов
/ 28 марта 2019

Я бы разделил это на отдельные проблемы.

Во-первых, как вы обнаруживаете изменения? Самый простой - это «последний обновленный» столбец; затем вы можете выполнить запрос на выборку изменений с текущего времени и сравнить его с вашим ограничителем.

Второй вопрос - как вы выполняете этот запрос и отправляете свои электронные письма. В заголовке вашего вопроса упоминаются триггеры - это конкретные SQL Server объекты . У меня есть личная неприязнь к триггерам - они являются «побочными эффектами» и имеют тенденцию усложнять понимание кода и приводить к интересным ошибкам. В вашем случае это, вероятно, плохое решение - вы хотите, чтобы триггеры были невероятно быстрыми, поскольку они задерживают ваши изменения данных во время их выполнения. Отправка электронной почты, вероятно, медленнее, чем вы хотите.

Простейшим вариантом, вероятно, является использование задания agent , запланированного на любую нужную частоту. Опять же, производительность может быть проблемой здесь - выполнение запроса с высокой нагрузкой каждые 30 секунд может значительно замедлить вашу базу данных.

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