你的位置:首页 > 数据库

[数据库]SQL Server代理(7/12):作业活动监视器


SQL Server代理是所有实时数据库的核心。代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的。这系列文章会通俗介绍它的很多用法。


在这个系列的前几篇文章里,你创建配置了SQL Server代理作业。每个作业有一个或更多步骤,如你在前几篇文章所示,也会包括大量的工作流。在这篇文章里,我们会谈下作业活动监视器。作业活动监视器是系统管理员工具来运行作业,查看作业历史,启用/停止作业。这篇文章会谈下作业活动监视器运行的几个存储过程,你也可以直接使用它来定制你的作业监控。

SQL Server代理作业活动监视器

SQL Server代理作业活动监视器是监视运行作业的主要机制,也可以用来查看已运行的SQL Server代理作业。作业活动监视器是在SSMS里启动的独立对话框。作业活动监视器使用系统存储过程和系统表来显示SQL Server代理作业状态。

使用作业活动监视器

要使用作业活动监视器,从SSMS,在对象浏览器里切换到SQL Server代理节点。你应该看到作业活动监视器,如插图1所示。注意高亮或单击作业活动监视器没有效果,因为作业活动监视器是独立的对话框,不在SSMS的界面里显示。一旦你双击了作业活动监视器,或者右击选择菜单【查看作业活动】。 你会看到作业活动监视器启动。你会注意到它包含了SSMS里使用的连接的服务器名,在我的环境里用的是“(local)”(如插图2所示)。

插图1:启动作业活动监视器

插图2:作业活动监视器对话框

你会在对话框的【代理作业活动】部分看到在这个SQL Server实例里,SQL Server代理定义的作业。在一个简单的视图对话框里,你会看到哪些作业已启用,最近它们是否运行,作业当前是否在运行,上一次运行是否成功,如果是定期的作业下次作业运行的时间。如果作业已经分类,也会显示类别。

作业类别

在作业活动监视器里,作业类别是非常有用的分组工具。对于系统作业/任务有很多内建的作业类别。你也可以创建你特定的类别,现在就弄。切换回SSMS,右击【作业】文件夹,选择【管理作业类别】。这会启动【管理作业类别】对话框,如插图3所示。

插图3:管理作业类别

点击【添加】按钮创建新的作业类别。命名你的作业类别(对于这个类别,我们命名为“数据库备份”,然后勾选【显示所有作业】来显示你当前SQL Server代理的作业,如插图4所示)。你也可以修改作业的属性,标记作业为新的作业类别。

插图4:创建新的作业类别并指定一个作业到此类别。

(博主注:貌似我可以添加类别,但是勾选【显示所有作业】并不能列出作业列表,只能到作业里的属性修改它的【作业类别】)

 再次点击【添加】,增加第2个类别为“例子”,然后勾选这个系列文章里的其他例子作业。点击【确定】,然后点击【取消】关闭对话框(别担心,这不会撤销你的操作,它只是关闭作业【管理作业类别】对话框)。

作业活动监视器筛选

现在你有一些有趣的数据来筛选和排序,重新打开回到【作业活动监视器】。如果你在列表里点击“类别”,你会看到作业已经按你新建的类别排序(如插图5所示)。

插图5:按作业类别排序

你可以按显示的任何列排序,但你如果添加更多的列会你显示的信息太过拥挤,让找作业变得更加困难。

在对话框的顶部,你有【刷新】对话框的选项,你也可以筛选。如果你有100甚至更多的作业(我知道很多DBA都有很多的作业),你很会想使用【筛选设置】对话框来限制你视图显示的作业。点击【筛选】按钮,你会看到SSMS的标准筛选对话框。在类别里输入【数据库备份】(如插图6所示),在对话框底部勾选【应用筛选器】,点击【确定】,你会看到插图7所示,只有类别为【数据库备份】的作业会显示。

插图6:在作业活动监视器里筛选

插图7:在作业活动监视器里应用筛选后的视图

注意对话框的左边,你会看到筛选已经应用。如果你想再次看到你的所有作业,你必须点击【筛选】按钮,不勾选【应用筛选器】选项。

使用作业活动监视器积极监控作业

你也可以设置作业活动监视器自动刷新,这样的话你可以找到失败的作业。在作业活动监视器里,点击【查看刷新设置】,你会看到如插图8所示的刷新设置对话框。在这个例子里,勾选【自动刷新间隔】,修改默认60秒的刷新时间为30秒(这数字的大小取决于你的监控)。

插图8:对作业活动监视器设置自动刷新

点击【确定】,现在对话框会每30秒刷新一次。现在与筛选设置结合,就很容易找出失败的作业。

最后,如果你想管理作业(例如启用,停止,运行作业或修改作业属性),可以在作业活动监视器里右击对应作业。这个在以前的文章已经谈过,这里就不描述了。

作业活动监视器支持的的系统表和存储过程

在作业活动监视器下有一些系统表和系统存储过程。SQL Serverdialing每次启动的时候,会插入新记录到msdb.dbo.syssessions表,记录SQL Server代理启动的日期/时间,和一个“session_id"。每次服务启动后,当服务启动插入到msdb.dbo.sysjobactivity表后,会有SQL Server代理作业的所有快照清单。这个表用来记录你在作业活动监视器里看到的信息,如果上次作业运行是什么时候,作业下次会在什么时候运行。另外,指向作业历史的记录在msdb.dbo.sysjobhistory里保存。

另外,在作业活动监视器看到的信息也包括从系统表(例如msdb.dbo.sysjobs,msdb.dbo.sysjobsteps)和一些扩展存储过程(例如master.dbo.xp_sqlagent_enum_jobs)收集的信息。所有这些表和存储的信息都是作业活动监视器从系统存储过程msdb.dbo.sp_help_job调用的。

如果你不想用作业活动监视器,可以在SSMS里运行sp_help_job来查看。但你想了解具体的情况,可以创建运行sp_help_job的作业,通过邮件发送结果到你的手机。

下篇预告

SQL Server作业监视器允许你用灵活的图形界面监视作业活动和作业过程。你可以排序,分类,筛选你的作业来更好的监视你在任何时候感兴趣的作业。如果你不想使用图像界面,可以使用作业活动监视器调用的系统存储过程。

在下篇文章里,我们会谈下SQL Server代理的外部程序,例如启用命令行输出或Powershell,还有通过操作系统运行命令。