“触发”是否随时间范围频繁变化?

时间:2019-03-28 11:53:47

标签: sql sql-server

我需要监视SQL数据库中的特定表,并在30秒内(例如)在大量更改的情况下得到通知(理想情况下通过电子邮件发送)。不确定这是否最好在SQL Server中或通过其他方法完成。

我一直在狩猎,似乎找不到任何相关的东西,以为我想在这里指出正确的方向。

从逻辑上讲,如下所示: 如果在任何30秒的时间内更新或插入的次数超过500,请发送电子邮件至x@xxxxxx.com

任何关于如何最好地解决此问题的想法将不胜感激。

2 个答案:

答案 0 :(得分:0)

我将其分解为单独的问题。

首先,您如何检测更改?最简单的是“最新更新”列;然后,您可以对当前时间以来的更改运行选择查询,并将其与限制器进行比较。

第二个问题是如何执行该查询并发送电子邮件。您的问题标题提到触发器-这些是特定的SQL Server objects。我个人不喜欢触发器-它们是“副作用”,并且倾向于使代码难以理解,并导致有趣的错误。在您的情况下,它们可能是一个不好的解决方案-您希望触发器能够以惊人的速度快速运行,因为它们在执行时会阻止您的数据更改。发送电子邮件可能比您想要的慢。

最简单的选择可能是使用agent作业,该作业计划以所需的任何频率运行。再次,性能可能是一个挑战-每30秒运行一次高负载查询可能会大大降低数据库的速度。

答案 1 :(得分:0)

如果您使用任何跟踪/记录表来跟踪特定表上的事务(插入,更新或删除),那么它应该相当简单。

使用SQL Server代理作业执行2个任务:

  1. 执行一个脚本以计算过去30秒内该审计/日志表上的事务数
  2. 如果超过500,请运行powershell脚本/.exe文件发送电子邮件