SQL Server 2008 - 如何在桌面上插入过多语句时实现“看门狗服务”

时间:2012-07-09 15:49:32

标签: sql-server-2008 insert

就像我的标题描述:如何在SQL Server 2008中实现类似监视程序服务的操作,并执行以下任务:在该表上提交过多插入时警告或执行操作。

例如:错误表在正常情况下在一秒内获得10条错误消息。如果在一秒内有超过100条错误消息(100个插入),则:ALERT!

如果你能帮助我,我将不胜感激。

P.S。:没有.SQL作业不是一个选项,因为监视器应该是实时的,并且是快速的: - )       整合服务?有没有更简单的方法来实现这样的服务?

亲切的问候, 萨尼

1 个答案:

答案 0 :(得分:0)

我完全不理解你的问题,所以我不能完全确定我的答案是否能解决任何问题,或者只是让潜在的问题变得更糟。特别是如果您遇到性能或并发问题,这可能无效。

如果您可以更新原始表格,只需添加datetime2字段,如

InsertDate datetime2 NOT NULL DEFAULT GETDATE()

最好在表格上做一个索引,然后在适合的任何时间间隔内,通过查看有多少行具有InsertDate>来轮询表格。 GetDate - X。

对于这种特殊情况,您可能会因为轮询过程未被提交(或使用WITH NOLOCK)而受益,尽管在执行此操作时必须小心。

如果你不能修改表本身而你不能或不会让另一个进程或作业监视相关变量,我建议如下:

  1. 制作一个只有一个Datetime2列的“计数器”表。
  2. 在原始表上,创建一个AFTER INSERT触发器:

    • 删除datetime-field早于X秒的所有行。
    • 使用当前时间插入一行。
    • 计算现在计数表中是否有太多行。
    • 必要时采取行动 - 即通过执行一个程序,它将发出发送/抛出异常/发送邮件/其他信号。
  3. 如果您可以修改原始表,请将datetime列添加到该表中,并使触发器计算所有尚未X秒的行,并在必要时执行操作。

    我还会研究另外一个进程(即SQL作业或自制服务或类似程序)来完成所有内务处理,即。删除旧行,计算行并对其进行操作。将此作为触发器的工作并不是一个好的设计,从长远来看可能会引起问题。

    如果可能的话,你应该考虑让其他一些程序来做家务。

    更新:更好的解决方案可能是将触发器插入通知(即日期时间)放入队列中 - 如果您随后有一些内容正在侦听该队列,您可以编写逻辑来确定是否已超出阈值。但是,这将要求您将一些逻辑移动到另一个进程,我最初认为这不是一个选项。