扫一扫
关注微信公众号

SQL Server的数据备份、管理与恢复(中)
2007-09-30   网络

2.正确配置和使用SQL Mail进行数据库管理

虽然数据库管理员经常就在数据库旁边,但是却不能像机器那样不问断地工作,如果在管理员下班后突然发生意外事件,怎样通知管理员以及时处理紧急事件?在SQL Server 2000中,一般来说,通知方式有三种:电子邮件、呼叫程序和网络发送。由于电子邮件的方便性和易用性,所以它成为大多数管理员选择的方法。本文就以实现电子邮件通知为例,介绍如何设置和使用SQL中的电子邮件通知。

SQL邮件必须使用邮件配置文件来运行,该配置文件在启动Microsoft SQL Server实例时所使用的同一域账户中创建。在SQL Server企业管理器的支持服务文件夹下,可以看到对 sQL邮件服务的图形描述,并可以确定该服务是否正在运行。

(1)配置SMTP及POP3服务器。

为了使用SQL Mail,首先得在服务器上有SMTP服务,笔者没有使用Windows 2000 Server自带的SMTP,而是用CMailServer的SMTP,该软件可以到作者网站http://www.youngzsoft.com去下载。其界面友好,操作简单,运行也比较稳定。将邮件服务器设置好,然后登录到其默认邮件Web页测试收发邮件,确认能正常收发邮件。

(2)设置邮件配置文件。

1)安装邮件系统。在Windows 2000 Server中默认安装了邮件系统Outlook Express,如果没有则需要安装一个邮件系统(笔者安装了Outlook 2002,发现在设置邮件配置文件时,如果不安装Outlook而是用第三方程序,Windows 2000 Server在控制面板中就找不到“邮件”图标)。安装正确后可以在控制面板中看到“邮件”图标。

2)、添加邮件账户。在控制面板上双击“邮件”图标,在弹出的“邮件设置”窗口单击“电子邮件账户”按钮,接着就会出现“电子邮件账户”窗口,在该窗口选择“添加电子邮件账户”,然后单击“下一步”按钮,在服务器类型中选择“POP3”,然后再在“Internet电子邮件设置(POP3)”中分别完成用户信息、服务器信息和登录信息设置,单击“测试用户设置”按钮测试其电子邮件设置,确认其设置正确。接下来的操作比较简单,按照其默认设置即可。

3)添加用户配置文件。在控制面板上双击“邮件”图标,在弹出的“邮件设置”窗口单击“显示用户配置”按钮,然后在其中添加用户配置文件“hongyumail”,设置完成后,该配置文件用于SQL mail使用。


4)测试Outlook。启动Outlook,在“工具”菜单选择“账号”命令,添加跟前面的配置文件中相同属性的电子邮件账号。并在其中进行相应设置,最后测试收发邮件,确认Outlook工作正常。

(3)配置SQL Mail。

以管理员身份启动SQL Server,展开“SQL Server组”至“支持服务”,然后右键单击“SQL邮件”,在弹出的菜单中选择“属性”命令,在“SQL邮件”配置窗口(如图4.2-13),单击配置文件名下拉菜单,选中刚才定义的“hongyumail”配置文件(也可以定义多个配置文件),选择这个配置文件,然后单击“测试”按钮进行测试,SQL将返回成功开始和结束一个MAPI会话的信息,如果出现错误或是没有找到邮件配置文件,那一定是启动SQL Server用的账号有问题。

(4)使用查询分析器发送邮件。

设置好SQL邮件后,就可以在查询分析器中使用xp_sendmail,xp_deletemail, xp_findnextmsg,xp_readmail,xp_startmail及xp_stopmail等命令来发送、删除、查找信息、阅读、启动和停止邮件了。

在查询分析器中可以用“xp_sendmail”扩展存储过程发送SQL邮件,其语法如下:

xp_sendmail{[@recipients=]‘recipients[;...n]’}

[,[@message=]‘message’]

[,[@query=[‘query’]

[,[@attachments=]‘attachments[;...n]’]

[,[@copy_recipients=]‘copy_recipients[;...n]’

[,[@blind_copy_recipients=]‘blind_copy_recipients[;...n]’

[,[@subject=]‘subject’]

[,[@ttype=]‘type’]

[,[@attach_results=]‘attach_value’]

[,[@no_output=]‘output_value’]

[,[@no_header=]‘header_value’]

[,[@width=]width]

[,[@separator=]‘separator’]

[,[@echo_error=]‘echo_value’]

[,[@set_user=]‘user’]

[,[@dbuse=]‘database’]

其中@recipients是必需的,参数说明如下。

[@recipients=]‘Feeipients[;...n]’:是以分号分隔的邮件收件人列表。n是表示可以指定多个recipient、copy_recipient或blind_copy_recipient的占位符。

[@message=]‘message’:是要发送的邮件。message最大可达8000个字节。

[@query=]‘query’:是有效的Microsot SQL Server查询,其结果将通过邮件送出。 xp_sendmail对query参数使用绑定连接。SQL邮件建立的query连接不会被发出xp_sendmail请求的客户端所控制的锁阻塞。这使xp_sendmail更易于在触发器中使用。但是,query语句不能引用仅在触发器中可用的逻辑inserted表和deleted表。query最大可达8,000个字节。

[@attachments=]‘attachments[;...n]’:是以分号分隔的附加到邮件上的文件列表。

[@copy_recipients=]‘copy_recipients[;...n]’:是以分号分隔的列表,标识邮件复本收件人(抄送人)。

[@blind_copy_recipients=]‘blind_copy_recipients[;...n]’:是可选的以分号分隔的列表,标识邮件密件复本收件人(密件抄送人)。

[@subject=]‘subject’:是指定邮件主题的可选参数。如果未指定subject,则默认值为“SQL Server消息”。

[@type=]‘type’:是基于以下MAPI邮件定义的输入邮件类型。

IP[M|C].Vendomame.subclass.如果type为NULL,则以IPM打头的邮件类型出现在邮件客户端的收件箱中,并由xp_findnextmsg查找或阅读。以IPC打头的邮件类型不出现在邮件客户程序的收件箱中,并且必须设置type参数才能查找或阅读。默认设置为 NULL。

[@attach_results=]‘attach_value’:是可选参数,指定查询结果集应作为邮件中的附件文件发送,而不是追加到邮件中发送。如果attachments不为NULL,并且attach_results为 true,则attachments中的第一个文件名将作为结果集的文件名。如果attachments为NULL,则生成带.txt扩展名的文件名。默认值为FALSE,这意味着结果集将追加到邮件中。

[@no_output=]‘output_value’:是可选参数,用来发送邮件但不向发送邮件的客户端会话返回任何输出。默认值为FALSE,这意味着SQL Server客户端会话将接收输出。

[@no_header=]‘header_value’:是可选参数,表示通过邮件发送查询结果,但不随查询结果发送列标题信息。默认值为FALSE,即列标题信息随查询结果一起发送。

[@width=]width:是可选参数,设置查询的输出文本行宽。此参数与isql实用工具中的/w参数相同。对于产生长输出行的查询,应结合使用attach_results与width以发送行中无换行符的输出。默认宽度为80个字符。

[@separator=]‘separator’:是结果集中每列的列分隔符字符串。默认情况,列分隔符为空格。使用列分隔符可以使访问电子表格和其他应用程序中的结果集更容易。例如,结合使用attach_results与separator以发送用逗号分隔值的文件。

[@echo_error=]‘echo_value’:值为true时,SQL邮件将捕获运行查询时遇到的任何服务器消息或DB-Library错误,并将其追加到邮件中而不是写入错误日志。同时也将返回行/受影响行的计数追加到邮件中。

[@set_user=]‘user’:是应在其中运行查询的安全上下文。如果没有指定user,安全上下文默认为执行xp_sendmail的用户的安全上下文。

[@dbuse=]‘database’:是应在其中运行查询的数据库上下文。默认值为NULL,这意味着将用户置于默认数据库中。

(5)几个应用实例。

1)使用不带变量的xp_sendmail。向用户cxb发送邮件(电子邮件用户是cxb),告知该用户master数据库已满。

EXEC xp_sendmail‘cxb’,‘The master database is full.’

2)使用带变量的xp_sendmail。向用户Robeg和Laura发送邮件,并将复本发送给Anne和Michael。在该例中还指定了邮件的主题行“Master Database Status”。

EXEC xp_sendmail@recipients=‘robertk;laurac’,

@message=‘The master database is full.’,

@capy_recipieats=‘anned;michaels’,

@subject=‘Master Database Status’

3)发送结果。下例将sp_configure的结果发送给cxb。

EXEC xp_sendmail‘cxb’,@query=‘sp_configure’

4)将结果作为附件文件发送。下例将查询SELECT*FROM INFORMATION_SCHEMA. TABLES的结果作为文本文件附件发送给Robert King。下例包含邮件的主题行以及将在附件之前出现的邮件正文。@width参数用于防止在输出行中换行。

EXEC xp_sendmail@recipients=‘robertk’.

@query=‘SELECT*FROM INFORMATION_SCHEMA.TABLES’,

@subject=‘SQL Server Report’,

@message=‘The contents of INFORMATION_SCHEMA.TABLES:’

@attach_results=‘TRUE’,@width=250

(6)在网站中使用SQL邮件。

如果是在Web应用中使用SQL邮件,则需要加入连接数据的账号和用户名。也就是在 maser库的扩展存储过程找到XP_sendmail,并在其属性中增加用户,并选择EXEC权限。设置完毕,运行网站程序,测试用户注册,几乎没有延迟,很快就收到由SQL邮箱发出的邮件。

热词搜索:

上一篇:SQL Server的数据备份、管理与恢复(上)
下一篇:SQL Server的数据备份、管理与恢复(下)

分享到: 收藏