科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航



ZDNet>软件频道>数据库-zhiding>用SQL Server 2005建立定制通告

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将创建一个SQL Server 2005小型定制通告系统,如果问题出现,它将向相关人员发送一条消息。

我在文章《在SQL Server 2005中用数据库邮件发送电子邮件》一文中讨论了发送问题通告的重要性,这样你才能做出调整,修复问题,并最终防止它再次发生。本周,我将创建一个小型定制通告系统,如果问题出现,它将向相关人员发送一条消息。

:本文以Service Broker数据库邮件(Database Mail)为基础。如果你的SQL Server 2005中没有安装这两个组件,下面的例子将不能正常运行。请参考我以前的文章帮助你配置这两项功能。

创建通告系统

通告系统将利用Service Broker的异步消息功能和内部激活来排列一个通告消息并在后台发送。列表A建立我将要用到的Service Broker对象。

我还需要在服务器上安装数据库邮件。同时,我将在这个例子中使用我在前面的文章中建立的相同资料和账户。

我需要一个表来保存需要接收通告的个人。建立这个表的脚本如下。

CREATE TABLE NotificationSeverity

(

IDCol SMALLINT IDENTITY(1,1) PRIMARY KEY,

Severity SMALLINT,

SeverityDescription VARCHAR(50)

Email VARCHAR(75)

)

GO

接下来,在这个表中添加一些记录,确保有人会收到通告。查看列表B

列表C在服务器上建立一个存储过程,它将从NotificationQueue中提取消息并进行处理。这个过程就是我们的“内部激活”过程,意味着NotificationQueue收到消息就调用这个过程。

如果你不熟悉SQL Server 2005的一些新特性,那么你需要注意这个过程中的几个问题。TRY…CATCH结构帮助你更方便地查出错误。实际上,你可以使用一个多功能过程来检查这些错误,将它们记录到一个表中方便以后搜索。欲了解如何使用SQL Server 2005的TRY…CATCH结构,请参考这篇文章

注意,上面脚本中的语句以SELECT @eMailList =开头。这个语句方使用FLWOR,它是一个XML查询结构。我将利用由查询返回的电子邮件地址,把它们连接起来,并用分号隔开。在调用数据库邮件过程时,你可以用这个@eMailList 变量作为参数。

下一步即修改NotificationQueue,以便在消息到达队列(Queue)时,它知道自动激活前面建立的过程。

ALTER QUEUE NotificationQueue WITH ACTIVATION

(

STATUS = ON,

MAX_QUEUE_READERS = 1,

PROCEDURE_NAME = usp_RecordNotificationMessage,

EXECUTE AS OWNER

);

GO

最后,你需要建立一个过程发送通告。这个过程只需要知道发生什么问题,以及问题的严重程度。其它组件将根据我们的NotificationSeverity表,取得这个过程发送的消息,决定需要通知哪些人员。见列表D

如果你调用这个过程,NotificationQueue中将出现一条消息,它再调用内部激活过程来处理这条消息。

EXECUTE usp_SendNotification 'A Severe Error has occurred.', 1

改进通告系统

如果你的系统出现问题,上面创建的实例将保证会通知必要的用户。但是,你可以对它进行改进,使它对你更加有利。例如,你可以让调用在usp_LogProcedureError过程内发送通告,让那个过程根据发生错误的类型决定问题的严重程度。

这种细小的改进,以及从不同角度考虑如何处理通告,很可能会帮助你发现问题,建立一个更优秀的系统,预防错误发生。


Tim Chapman是肯塔基州路易维尔市一家银行的SQL Server数据库管理员,他有超过7年的IT行业经验。他还通过了微软SQL Server 2000和SQL Server 2005的认证。

责任编辑:德东

查看本文国际来源

推广二维码
邮件订阅

如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

重磅专题