使用计划任务

许多任务需要在某一特定的时间执行。比如，有时候你可能需要每一个小时收到一封有关你的数据表内数据总结信息的电子邮件。或者你可能需要在每一星期的特定一天清除在数据库内的旧数据。为了在一个特定的时间执行一个存储过程，你需要使用计划任务。

本部分一步步的说明如何创建某一特定任务和计划该任务，在下面的过程中，你将会学习到如何创建一个任务，该任务会自动的把包含在你Web服务器log内的数据的总结信息自动地Email给你。

注意

为了使用在该部分内所描述的计划任务，你需要使用一个邮件服务器，比如Microsoft Exchange Server(参看第四章，”Exchange Active Server,Index Server,和NetShow”)。你同样需要配置Internet Information Server(IIS)把它的log保存在SQL Server内而不是保存在文本文件内。为了做到该点，你必须在Internet 服务管理器选择ODBC logging做为当前的log格式(如果你想获得有关如何配置ODBC logging的信息，请参看Internet服务管理器的在线文档)。

创建计划任务的第一个步骤是创建一个你想设定计划的存储过程。在本例子中，我们创建一个接收在你的服务器log内不同的IP地址的数目的存储过程。该数目可以对你站点的访问次数做一个粗略的估计。

该存储过程同样接收你网站的主页被访问的次数，你网站的主页假定为在你站点的根目录下面的default.cfml文件。假如你的主页是另外一个文件，在下面的存储过程中，把文件default.cfml替换成你主页的文件名称。

该过程同样假定存储你web服务器的log的表的名称为weblog。假如你在配置IIS时使用了另外一个名称的表，在下面的存储过程中做相应的修改。

最后，我们还假定你Email帐号的名称配置成管理员。你可以使用任何有效的Email地址（比如：someone@somewhere.com）来替换该名称。你甚至可以把该邮件发送给你的询呼机，如果你的询呼服务器支持接受Email的话。

下面就是该存储过程：

CREATE PROCEDURE get_stats AS

DECLARE @IpCount INT, @HomePageCount INT,

@LogSum VARCHAR(100), @Subj VARCHAR(100)

SELECT @IpCount=COUNT(DISTINCT ClientHost)

FROM weblog WHERE DATEDIFF(hh,LogTime,GETDATE())<1

SELECT @HomePageCount=COUNT(target)

FROM weblog WHERE target=’/default.cfml’

AND DATEDIFF(hh,LogTime,GETDATE())<1

SELECT @LogSum=’Number of visitors:’+CONVERT(VARCHAR(4),@IpCount)

SELECT @LogSum=@LogSum+’… Number of times home

page accessed:’+CONVERT(VARCHAR(4),@HomePageCount)

SELECT @Subj=’Hourly Site Stats’+CONVERT(VARCHAR(20),GETDATE())

EXECUTE master..xp_sendmail

@@recipients=’administrator’,

@@subject=@Subj,

@@massage=@LogSum

RETURN

所有在上面的存储过程内的语句对你来说一定非常的熟悉。前面的两个SELECT语句使用聚集函数获得访问该网站的不同IP地址的数目和该网站的主页被访问的次数。该信息接收了在一个小时之内的数据，随后的两个SELECT语句把所得到的值格式化成可读的形式。最后xp_sendmail系统存储过程把查询的结果以Email形式发送出去。

你可以使用任何一般的方法来创建该存储过程，比如ISQL/w或在SQL Enterprise Manager中的管理存储过程对话框。在继续下面的过程之前，在ISQL/w中试着执行该存储过程，如果你的数据库，电子邮件，Internet服务器配置都是正确的话，你就能收到一封Email。

该存储过程接收在前一个小时内你的Web服务器log的统计数字。假如你定制该过程，使其每个小时自动执行一次，你就能不断地记录所有你网站的活动。

为了计划该存储过程，开始SQL Enterprise Manager。选择你的数据库，然后在菜单上选择Server|Scheduled Tasks。这时就会显示Manage Scheduled Tasks 对话框(见图12.6)。

点击新任务按钮(它看起来象一个具有微弱光芒的时钟)。这时就会显示新任务对话框窗口(见图12.7)。

图12.6 Scheduled Tasks对话框

图12.7 新任务对话框

跟随下面的步骤来填写在新任务对话框内的信息：

> 在名称文本框内，提供一个你的计划任务的名称。比如，你可以使用名称send_stats为该计划任务命名。

> 在类型下拉式菜单内，选择TSQL。这说明你将使用T－SQL语句。

> 在数据库下拉菜单内，选择要存储你的计划任务的数据库。

> 在命令文本窗口内，输入语句EXECUTE get_stats来执行你刚刚创建的过程。

> 在对话框的Schedule部分内，选择Recurring选项。这将会使你的过程在一定的时间间隔内执行。

在你输入完所有的上述指定的信息后，点击Change按钮。这里你可以改变你任务的计划时间表。当你点击Change按钮时，这时就会显示Task Schedule对话框（见图12.8）。

图12.8 Task Schedule对话框

在Task Schedule对话框内，计划你的任务，使其每小时执行一次。在Occurs部分内，选择Daily选项。在Daily Frequency部分内，选择Occurs Every并且指明1Hour(s)。点击close来关闭Task Schedule对话框。

最后，在Manage Scheduled Tasks对话框内，点击Add按钮添加你的计划任务。此时在对话框内的Task list页内就会显示你计划任务的名称。你可以在将来的任何时候返回此处来检查该计划任务的状态，观看该计划任务最后一次执行的时间或者看看是否该任务包含错误。

你可以使用Manage Scheduled Tasks对话框在你创建一个计划任务后删除之。如果你想删除该计划任务，只需要点击Delete Task 按钮（它看起来象一个有一条对角带的时钟）。

你同样可以使用Manage Scheduled Tasks对话框来观看你计划任务的历史。计划任务的历史提供了详细的关于你计划任务过去活动的信息。点击Task History按钮来观看该信息。

总结

本章介绍了Microsoft SQL Server几个非常强有力的特性。你学习了如何使用SQL Server Web 向导自动从数据库表中生成Web页。你同样也学习了如何创建存储过程，触发器和计划任务。

到目前为止，你已经学习了如何使用脚本，基本和查询语言来创建HTML网页，服务器端脚本和数据库查询。在本书的下一部分，你将进一步深入学习这些知识，学习如何把这些语言集合到Active Server Pages内。这可以使你能够创建非常先进的网站。