分享
 
 
 

《MS SQL Server 2000管理员手册》系列——31. 管理作业自动化

王朝mssql·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

31. 管理作业自动化

SQL Server代理程序服务

作业

警示

SQL Server代理程序错误记录文件

本章总结

在 第 30 章 中我们看了几项自动化设定的选项,以及 SQL Server 2000 提供的数据库选项,这些选项帮助 DBA 减少了的调整作业。在本章中将学会使用 SQL Server 提供的辅助工具,以透过 SQLServer 代理程序服务来自动执行其它的管理作业。SQLServer 代理程序服务包括自动定期执行数据库的特定作业,以及服务器发生问题或事件时,通知 DBA 或其它特定人员。这些功能的好处使得 DBA 不需要用手动或不断监控数据库系统来决定何时执行特定作业,因此有更多时间用在更难的数据库问题上,如建立和调整索引、最佳化查询、或者为未来的成长预作计划。

自动化管理作业有三个主要工具:作业、警示、和操作员。在本章中,您将学会关于 SQLServer 代理程序服务,以及如何使用服务来建立及使用作业、警示、与操作员。您也可以找到关于 SQLServer 代理程序错误纪录,这个纪录可用来追踪 SQLServer 代理程序执行的工作。

SQLServer 代理程序服务

SQLServer 代理程序执行从 SQL Server 独立出来的服务,称为 SQLServer 代理程序。这个服务包含在 SQL Server 2000 之中,但是必须单独启动,手动或自动均可。 第 8 章 有关于启动 SQLServer 代理程序的方法说明。一旦启动服务,就要准备好定义所需要的作业、警示、和操作员。

________________________________________

说明

SQLServer 代理程序服务在 Microsoft SQL Server 6.5 中被称为 SQL Executive。它也可以用作复写,如 第 26 、 27 、 28 章 的说明。

________________________________________

作业

作业 (Jobs)是管理任务,只要定义一次就可以执行好几次。您可以手动执行作业,或者用 SQL Server 安排在特定时间执行,也可以定期执行或是警示发生时执行( < 警示 > 稍后会作说明)。作业可以由 SQL Server 陈述式、Windows NT 或 Windows 2000 指令、可执行程序、ActiveX 指令码组成。作业也可以在您使用复写或建立数据库维护计划时自动帮您建立。一个作业可由单一步骤或很多步骤组成,而每个步骤可以是一个更复杂的呼叫组合步骤─例如呼叫预存程序。SQL Server 自动监控作业的成败﹔两种情况都可以设定警示。

作业可以在本地端服务器执行,或者您在网络上有多重服务器,可以指定一台作为主要服务器,其它的作为目标服务器。主要服务器替全部的服务器储存作业定义,并且作为作业清理处,协调一切作业活动。每个目标服务器定期与主要服务器相连,若有作业变更就更新作业清单,从主要服务器下载新作业,然后切断联机来执行新作业。当目标服务器完成作业时,它会再与主要服务器连接并报告它的结束状况。

我们来看看建立作业的一个假设情况。假设您有个数据库数据表,保存了每笔银行的交易纪录,例如存提款和转帐。每笔记录有一个 timestamp 数据行说明交易何时发生。这个数据表将不断增长并且需要定期删除数据。要从数据表中删除一列,您可以用 DELETE 陈述式写一个小的预存程序来删除两个月之前的旧数据(假设银行只要保留两个月的数据)。接着您可以建立一个作业来执行这个预存程序,例如每周日晚上执行一次。这样一来,您可以确保数据表不会无限制地增长。这不但可以保留磁盘空间,而且还能提升效能。执行查询时表格中的数据越少,SQL Server 就能越快完成查询。现在让我们来看看建立作业的细节。

________________________________________

说明

SQLServer 代理程序服务必须依序执行才能使您的作业正常运作。

________________________________________

建立作业

您可以用 Enterprise Manager、T-SQL 指令文件、建立作业精灵、或 SQL-Distributed Management Objects (SQL-DMO)来定义作业。因为 SQL-DMO 方法与计算机的程序编制有关,不在本书的范围之内。本章节您将学会其它三种有关建立作业的方法。

________________________________________

相关信息

关于使用 SQL-DMO 来建立作业,请参阅< 在线丛书 >并索引< SQL-DMO >。

________________________________________

使用 Enterprise Manager

先用 Enterprise Manager 建立作业。最常用的方法之一是执行数据库备份(这也可以如 第 30 章 所提的利用 维护计划精灵 来完成)。下面的例子是建立作业备份 MyDB 数据库。它安排备份在每晚 11:00 执行,并在 Windows NT 或 Windows 2000 应用事件纪录和输出档案中纪录备份作业的成败。跟着下面步骤建立名为 MyDB_backup_job 的作业:

1. 在 Enterprise Manager 左边的窗格中,展开一个服务器数据夹,展开 管理 数据夹,然后展开 SQL Server代理程序 数据夹。在 作业 上点选右键并在快捷菜单上选择 新增作业 。显示 新增作业属性 窗口,如图31-1所示。

图31-1 新增作业属性 窗口的 一般 页签

2. 在 一般 页签中设定下列选项:

o 名称 键入作业名称─这里是在文字方块中键入『MyDB_backup_job』。作业名称最多可以有 128 个字符。服务器上的每个作业都必须是唯一的名称,并要确定使用描述性的名字。

o 启用 该复选框指定作业应该启动还是停用。您可能想要先停用作业以手动测试来确保运作正常。测试后得知运作正常,就可以用这个复选框启动作业,这样作业就能如期执行。

o 作业类别 为这个作业选择类别-在这个例子中,我们使用预设类别 未分类(本机) 。您可以从已建立的作业类别中选择,这些作业类别是安装 SQL Server 时建立的,或者也可以建立您自己的类别(想学习如何建立新类别,请参阅本章后面 < 建立新类别 > 一节)。安装的类别有 Uncategorized (Local)、数据库维护计划、全文检索、Web 辅助程序,还有复写的 10 个类别。类别是用来归类相关作业的。例如,您可以将用来执行数据库维护的作业归于同一个类别中,或是依部门分类,如会计、销售、和市场营销。类别让您能够追踪多重作业-您就不须为了一小部份的作业而花时间搜寻所有作业清单。

o 拥有者 建立作业的使用者。只有 sysadmin 角色可以更改谁拥有作业或是变更其它使用者拥有的作业(SQL Server 角色将在 第 34 章 中说明)。所有 sysadmin 角色与作业拥有者都可以改变作业的定义,也可以启动或停止作业。在 拥有者 下拉式选单中,选择将执行作业的使用者。本例中,作业拥有者和建立作业者是同一人,所以拥有者会自动选择正确的设定,而您可以让这个设定自行运作。

o 描述 在该文字方块中,必须确认一个作业要执行什么任务以及作业的目的。您应该提供描述,描述让其它使用者很快决定作业的功能。描述最多可有512个位。

o 目标为本机服务器 如果点选这个选项,作业将只在本机服务器上执行。如果有远程服务器连接到这个服务器上的话,就可以使用 目标为多重服务器 的选项。点选这个选项来指定远程服务器上也要执行这个作业。

完整的样本作业 一般 页签显示如图31-2所示。

图31-2填入一般页签

3. 点选 步骤 页签,再点选 新增 ,就会显示 新增作业步骤 对话框,如图31-3所示。 作业步骤(Job steps) 是定义作业任务的指令或陈述式。每个作业必须至少有一个作业步骤,也可以有多重步骤。在 新增作业步骤 中的 一般 页签对话框中输入下列信息:

o 在 步骤名称 字方块中键入步骤名称-在这个例子中是输入『MyDB_backup』。

o 从 型别 下拉式选单中,选取一种步骤类型来执行。在这个例子中, 因为要用 T-SQL 指令来执行作业,所以选取 Transact-SQL 指令码(TSQL) 。其它选项为 ActiveX Script、操作系统命令、复写散发者、复写交易记录读取程序、复写合并、复写队列读取器、和复写快照。

o 从 数据库 下拉式选单中选择要执行作业的数据库名称。在这个例子中,选择 MyDB 数据库。

o 在 命令 文字方块中键入将作为一部份作业步骤的指令,在这个例子中,指令是 T-SQL 指令,用来将 MyDB 数据库备份到一个叫做 MyDB_backup1 的备份装置上。(这个备份装置必须事先建立好, 第 32 章 中有建立备份装置的详细说明。还有,这个简单的例子中,数据库备份每晚会被写入同一个档案中。实际上,您应该如 第 30 章 所言使用数据库维护计划来执行备份,就像它会让您每天建立新的备份装置一样。)如果有一个准备好的指令文件,您想要用它作为作业,也可以点选 开启旧档 来开启档案。

4. 点选 剖析 ,检查 T-SQL 步骤的语法,然后点选 进阶 页签并设定选项,如图31-4所示。在这个页签中,您可以选择作业成功或失败后执行的动作:结束作业回报成功、结束作业回报失败、或是跳到下一个步骤。您也可以指定作业没有成功时应该重试的次数,以及两次重试的间隔时间。 如果这个作业包含 T-SQL 指令或是指令码,您可以选择一个输出档,里面将有 T-SQL 的输出报告。您也可以在每次作业执行时,将输出附加在这个档案后,或是每次都覆写输出档案。点选 检视 来检视输出档案的内容。选取 将输出附加至步骤历程记录中 复选框让作业输出附加在作业历程记录表项目中。您也可以指定执行 T-SQL 的使用者。

图31-3填写后的「新增作业步骤」对话框「一般」页签

图31-4「新增作业步骤」对话框中填写后的「进阶」页签

5. 在已有的步骤前插入一个需要执行的新步骤,选取需要插入新步骤的现有步骤,然后点选 插入 显示 新增作业步骤 对话框,输入您要插入的步骤信息。要删除步骤,选取步骤后点选 删除 ;要编辑步骤,选取步骤后点选 编辑 。您也可以移动清单中的步骤,选取步骤后点选 移动步骤 右边的上下箭头。 起始步骤 下拉式选单允许您选择作业中哪个步骤要先执行。要先执行的步骤 ID 号码旁会出现一个绿色的标记。点选 套用 将步骤应用在作业中。如果在多重步骤之间有任何流程逻辑会导致一个步骤无法执行的话,SQL Serve 会在您点选 套用 时显示警示讯息,并且允许您修改流程逻辑。

6. 要为一个作业建立排程,点选 排程 页签。要找出服务器的目前时间,就要在 注意:目标服务器目前日期时间 下拉式选单中选取服务器名称。现在点选 新的排程 来显示 新增作业排程 对话框,如图31-5所示。排程将指定何时何日该执行作业,可在某一时刻执行也可以定期执行。如果您想在任意时刻用手动执行作业,那就不需要作业排程-您可以在想要执行作业时执行。填入排程名称 MyDB_backup_schedule,并在 排程类型 区域中设定选项(在这里要选择 重复执行 ),然后选取 启用 复选框,如图31-5所示。 启用 复选框在这里的功能和它在 新增作业属性 窗口中的功能一样。

7. 由于我们选择重复排程类型,您必须设定作业要在何时何日执行。要这样做的话,就点选 变更 显示 编辑重复执行作业排程 对话框。键入新时间和日期,点选 确定 回到 新的排程 对话框。(记住我们要在每晚 11 点设定一个每日备份。)

8. 在 新的排程 对话框中点选 确定 以接受您的排程,并回到 新作业属性 窗口。要删除排程,就选取排程名称并点选 删除 ;要编辑排程, 就选取排程名称并点选 编辑 。

图31-5新的排程对话框

________________________________________

说明

您也可以替这个作业建立新警示。本章稍后将提到警示的更多细节。

________________________________________

9. 点选 告知讯息 页签,如图31-6所示。在这个页签上,您可以设定一个通知程序,那么操作员(或指定使用者)在作业成功、失败、或完成时会收到通知。通知可以透过电子邮件、呼叫器、或用 NET SEND 指令当成讯息透过网络传送。您可以将作业状态写入 Windows NT 或 Windows 2000 事件纪录中,甚至可以在作业成功、失败或完成后自动删除作业。若要设定操作员通知,就依需要选择 电子邮件操作员 、 传呼操作员 、和 网络传送操作员 复选框,然后在右边下拉式选单上选取操作员名称。(见本章后面 < 操作员 > 一节来学会如何建立操作员。)在最左边的下拉式选单中选取执行通知的条件。作业完成要将结果写入事件纪录或自动删除作业的时候,请选择适当的复选框,然后在相关的下拉式选单上选取执行动作的条件。在这个例子中, 要选取 写入Windows应用程序事件记录文件 复选框。

图31-6新作业属性窗口的告知讯息页签

10. 完成设定选项后,点选 套用 来建立您的作业。然后点选 确定 退出 新作业属性 窗口回到 Enterprise Manager。

11. 在 Enterprise Manager 左边窗格中点选 作业 ,您将在右边窗格中看到含有 MyDB_backup_job 的清单。

建立新类别 要建立新类别,请在 Enterprise Manager 左边窗格中开启一个服务器,展开 管理 数据夹,在 作业 上点选右键,在快捷菜单上点选 所有工作 , 接着选择 管理作业类别 。 作业类别 对话框出现,如图31-7所示。您可以在这里加入一个类别,检视现有类别和在类别中的作业,并可删除类别。

使用 T-SQL

T-SQL 命令可用来建立作业、增加步骤、并建立作业排程,这些命令分别是系统预存程序 sp_add_job、sp_add_jobstep 和 sp_add_jobschedule。这些预存程序有多个选择性参数,如下面的程序代码所示。SQL Server 对每个未指定的参数会分配一个默认值。用 Enterprise Manager 建立作业比较简单,因为它的图形化使用者接口会引导您设定作业选项,避免您漏掉一些参数。使用 T-SQL 您必须包含所有选择性参数的值,或确定任何您忽略的预设参数值能够满足作业需要。您应该用 Enterprise Manager 代替用手动来执行预存程序。您可以产生 T-SQL 指令文件,让 Enterprise Manager 用指令文件建立作业,在作业名称上点选右键,在快捷菜单中选取 所有工作 ,接着选择 产生SQL指令码 。如果需要的话,这个技术允许您用指令文件重新建立作业。

图31-7作业类别对话框

要执行刚才所提的预存程序,您必须使用 msdb 数据库,因为这是储存程序的地方。如果要使用这些程序,要先看看预存程序中哪些参数是可用的。本章中所有的预存程序都使用同样的一般语法。预存程序 sp_add_job 的语法如下:

sp_add_job [ @job_name = ] 'job_name'

[ , [ @enabled = ] enabled ]

[ , [ @description = ] 'description' ]

[ , [ @start_step_id = ] step_id ]

[ , [ @category_name = ] 'category' ]

[ , [ @category_id = ] category_id ]

[ , [ @owner_login_name = ] 'login' ]

[ , [ @notify_level_eventlog = ] eventlog_level ]

[ , [ @notify_level_email = ] email_level ]

[ , [ @notify_level_netsend = ] netsend_level ]

[ , [ @notify_level_page = ] page_level ]

[ , [ @notify_email_operator_name = ] 'email_name' ]

[ , [ @notify_netsend_operator_name = ] 'netsend_name' ]

[ , [ @notify_page_operator_name = ] 'page_name' ]

[ , [ @delete_level = ] delete_level ]

[ , [ @originating_server = ] 'server_name' ]

[ , [ @job_id = ] job_id OUTPUT ]

sp_add_jobstep 的语法如下:

sp_add_jobstep [ @job_id = ] job_id | [ @job_name = ] 'job_name'

[ , [ @step_id = ] step_id ]

{ , [ @step_name = ] 'step_name' }

[ , [ @subsystem = ] 'subsystem' ]

[ , [ @command = ] 'command' ]

[ , [ @additional_parameters = ] 'parameters' ]

[ , [ @cmdexec_success_code = ] code ]

[ , [ @on_success_action = ] success_action ]

[ , [ @on_success_step_id = ] success_step_id ]

[ , [ @on_fail_action = ] fail_action ]

[ , [ @on_fail_step_id = ] fail_step_id ]

[ , [ @server = ] 'server' ]

[ , [ @database_name = ] 'database' ]

[ , [ @database_user_name = ] 'user' ]

[ , [ @retry_attempts = ] retry_attempts ]

[ , [ @retry_interval = ] retry_interval ]

[ , [ @os_run_priority = ] run_priority ]

[ , [ @output_file_name = ] 'file_name' ]

[ , [ @flags = ] flags ]

sp_add_jobschedule 的语法如下:

sp_add_jobschedule [ @job_id = ] job_id,| [ @job_name = ] 'job_name',

[ @name = ] 'name'

[ , [ @enabled = ] enabled ]

[ , [ @freq_type = ] freq_type ]

[ , [ @freq_interval = ] freq_interval ]

[ , [ @freq_subday_type = ] freq_subday_type ]

[ , [ @freq_subday_interval = ] freq_subday_interval ]

[ , [ @freq_relative_interval = ] freq_relative_interval ]

[ , [ @freq_recurrence_factor = ] freq_recurrence_factor ]

[ , [ @active_start_date = ] active_start_date ]

[ , [ @active_end_date = ] active_end_date ]

[ , [ @active_start_time = ] active_start_time ]

[ , [ @active_end_time = ] active_end_time ]

________________________________________

相关信息

有关每个参数和它的默认值说明,请参阅< 在线丛书 >索引中相关的预存程序名称。

________________________________________

________________________________________

说明

这里所提的预存程序,就像其它与建立和管理作业相关的预存程序一样,操作员、通知和警示都存在 msdb 数据库中。您必须使用这个数据库来执行预存程序。

________________________________________

使用建立作业精灵

Enterprise Manager 提供了一个精灵,这个精灵会一步一步引导您进行作业建立过程,唯一的限制是它限制您只能建立单一步骤的作业。然而,它允许您提供一个作业排程,并指定被通知作业状态的操作员。建立作业后,您可以用 Enterprise Manager 修改作业,增加更多作业步骤。

依下列步骤,用 建立作业精灵 来建立作业:

1. 从 Enterprise Manager 的 工具 下拉式选单中选择 精灵 ,在 选择精灵 对话框中打开 管理 数据夹,并选取 建立作业精灵 ,显示 建立作业精灵 欢迎画面,如图31-8所示。

2. 点选 下一步 显示 选择作业命令类型 画面,如图31-9所示。这个画面可以指定您要建立作业的步骤类型。在这个例子中,要选取 Transact-SQL 命令 。

图31-8「建立作业精灵」欢迎画面

图31-9「选择作业命令类型」画面

3. 点选 下一步 ,显示 输入Transact-SQL陈述式 画面(图31-10)。您必须选择执行指令的数据库,然后为作业键入陈述式,或者按一下 开启旧档 来寻找或开启含有 T-SQL 命令的档案。按一下 剖析 ,检查您输入的 T-SQl 陈述式的语法。如果您已经选择 操作系统Shell命令 或者 Active Script 作为指令类型,您就必须为这些类型输入指令。例如,键入 T-SQL 指令备份 master 数据库到事先建立的 backup_master_dev 装置,如图31-10所示。

图31-10 输入 Transact-SQL 陈述式画面

4. 按一下 下一步 ,显示 指定作业排程 画面,如图31-11所示。您可以在这里指定何时执行作业。

现在 选项指定作业将在精灵完成作业时执行。其它的选项一看便知。在这个例子中,选取 重复执行 ,然后选择 排程 来设定排程。出现 编辑重复执行作业排程 对话框,如图31-12所示。使用这些选项建立需要的数据库,并按一下 确定 接受设定,回到 指定作业排程 画面。

图31-11指定作业排程画面

图31-12「编辑重复执行作业排程」对话框

5. 按一下 下一步 ,显示 作业通知 画面,如图31-13所示。在 网络传送 或 电子邮件 下拉式选单上选取通知作业完成状态的操作员。您必须已经为显示在清单上的作业定义好操作员。(图31-13显示未定义操作员。)如果要通知尚未定义的操作员,就请完成这个精灵然后新增一个操作员(本章后面 < 操作员 > 一节会说明)。接着可以更改通知操作员的作业属性。您也可以取消精灵、建立操作员、然后重新启动精灵。

图31-13「作业通知」画面

6. 按一下 下一步 ,显示 完成建立作业精灵 画面,如图31-14所示。在这里的 作业名称 文字方块中为作业分配一个名称来取代默认值。在本例中,我们的作业命名为 Backup_master_job。检查 描述 方块中的内容,确定显示出您要的选项,并按一下 完成 来建立作业。如果您要的选项没出现,按一下 上一步 做些修正。如果作业成功建立起来的话,将会出现一个消息框。按一下 确定 关闭这个消息框。

完成 建立作业精灵 之后,Enterprise Manager 的 作业 数据夹将出现新作业。

图31-14完成建立作业精灵画面

管理作业

您可以透过 Enterprise Manager 或使用 T-SQL 来管理或编辑作业。对您来说Enterprise Manager 可能比较容易使用,因为您不必担心 T-SQL 预存程序的语法和默认值,而且 Enterprise Manager 的 GUI 会引导您设定作业属性。

使用 Enterprise Manager

您可以用 Enterprise Manager 以手动方式为作业启动、停止、停用、启用、编辑、以及建立T-SQL程序代码。这些任务的每个用法说明如下:

• 要开始作业,在Enterprise Manager右边窗格的作业名称上按一下右键,并在快捷菜单中选择 启动作业 。

• 要停止正在执行的作业,并删除设定好的重试步骤,在作业名称上按一下右键,并在快捷菜单中选择 停止作业 。

• 停用作业,让作业在不允许执行的排程时间内可以测试。在作业名称上按一下右键,并从快捷菜单中选取 停用作业 。选择 启用作业 可以再度启用作业。

• 要编辑作业、排程、或其它的作业属性,在作业名称上按一下右键,并从快捷菜单中选取 内容 ,显示作业的 属性 窗口,窗口中包含了用来建立作业的4个相同页签。做好修改之后,按一下 套用 ,然后按 确定 。

• 如果要在不重新输入陈述式的情况下随时重建作业,就要替作业建立一个T-SQL 指令码,在作业名称上按一下右键,在快捷菜单中选取 所有工作 ,然后选择 产生SQL指令码 ,显示 产生SQL指令码 对话框。键入文件名称,选择档案格式(Unicode、ANSI 或者 OEM 文字),按一下 确定 。

使用 T-SQL

您也可以用下面的 T-SQL 预存程序来开始、停止、启动、停用和编辑一个作业。执行这些程序时,记得使用 msdb 数据库。

• sp_start_job 立即开始指定的作业。这个程序需要作业名称或是作业 ID编号。

• sp_stop_job 停止正在执行的作业。这个程序需要作业名称、作业 ID、或者主机服务器名称。

• sp_update_job 允许您启用、停用、并改变作业的属性。这个程序需要作业名称或是作业 ID编号。

________________________________________

相关信息

要检视这些可以一起使用的预存程序和选项的语法,请参阅< 在线丛书 >并索引「指定预存程序」。

________________________________________

检视作业历程记录

SQL Server 在 msdb 系统数据库的 sysjobhistory 数据表中维护作业执行信息的历程纪录。您可以用 Enterprise Manager 或 T-SQL 来检视作业历程记录信息。

使用 Enterprise Manager

跟着下面步骤用 Enterprise Manager 来检视作业历程记录:

1. 在 Enterprise Manager 右边窗格的作业名称上点选右键,从快捷菜单上 选取 检视作业历程记录 ,显示 作业历程记录 对话框,如图31-15所示。在这里您将看到一行描述每个作业执行的信息、操作员的通知、以及在SQLServer 上接收到的错误或讯息。

图31-15作业历程记录对话框

2. 要检视作业执行状态的其它细节,请在对话框的右上角选择 显示步骤详细信息 复选框。图31-16显示 MyDB 备份的细节。

图31-16显示在 作业历程记录 对话框中的详细步骤

3. 要清除所有讯息,请点选 全部清除 。要更新画面来检视作业状态(开启 作业历程记录 对话框后所执行的新作业),请点选 重新整理 。要关闭 作业历程记录 对话框,请点选 关闭 。

使用 T-SQL

使用 T-SQL 检视关于作业排程的作业历程记录信息,在 msdb 数据库执行预存程序 sp_help_jobhistory。语法如下:

sp_help_jobhistory [ [ @job_id = ] job_id ]

[ , [ @job_name = ] 'job_name' ]

[ , [ @step_id = ] step_id ]

[ , [ @sql_message_id = ] sql_message_id ]

[ , [ @sql_severity = ] sql_severity ]

[ , [ @start_run_date = ] start_run_date ]

[ , [ @end_run_date = ] end_run_date ]

[ , [ @start_run_time = ] start_run_time ]

[ , [ @end_run_time = ] end_run_time ]

[ , [ @minimum_run_duration = ] minimum_run_duration ]

[ , [ @run_status = ] run_status ]

[ , [ @minimum_retries = ] minimum_retries ]

[ , [ @oldest_first = ] oldest_first ]

[ , [ @server = ] 'server' ]

[ , [ @mode = ] 'mode' ]

如果您没有用参数或是没有使用 job id 或 job name 参数来执行程序的话,关于所有作业排程的信息将被退回。mode 参数指定是否要退回所有历史信息(FULL)或是退回一个摘要(SUMMARY)。默认值设定为 SUMMARY。

________________________________________

相关信息

关于预存程序其它选项的细节,请查阅< 在线丛书 >并索引 sp_help_jobhistory。

________________________________________

警示

警示 (alert)是发生在服务器上,对于事件或是执行状况的一个响应动作。警示可以通知操作员,使得指定的作业能够执行,并将事件转交到另一个服务器上。 事件 (event)是一个错误或讯息,它被写入 Windows NT 或 Windows 2000 应用程序事件记录中(您可以用 Windows NT 或 Windows 2000 Event Viewer 来检视)。 效能条件 (performance condition)是系统效能的特色,可以用 Windows NT 效能监视器或 Windows 2000 系统监视器来监视,如 CPU 公用程序或被 SQL Server 使用的多个锁定。在本章中,我们将着重在 Windows 2000 的系统监视器上,纵使 Windows NT 效能监视器的用法也很相近。

事件发生时,SQLServer 代理程序将比较事件与您所定义的警示清单,如果警示已被事件所定义的话,那警示就会启动。当所定义的效能门坎达到系统监视器中指定的 SQL Server 对象,就会引发效能条件的警示,就像在系统监视器对象 General Statistics 之下的计数器 User Connections。例如,您可以设定当计数器的值达到 50 时发生警示。( 第 36 章 中有系统监视器的说明。)

________________________________________

说明

为了让您的警示能够运作,必须执行 SQLServer 代理程序服务。

________________________________________

事件讯息纪录

在说明如何为事件建立警示之前,我们先回顾一下让讯息传送到 Windows NT或 Windows 2000 应用程序事件记录的事件类型;只有这些事件可以用来设定警示。事件(或错误)重要层级从 19 到 25 是自动回报到 Windows NT 或 Windows 2000 应用程序事件记录中的,因此可以启动警示。默认值中事件重要层级少于 19 的都没有纪录,所以警示就不能用这些事件启动。要使那些事件能够记录并且可以启动的话,您必须使用 sp_altermessage、RAISERROR WITH LOG 陈述式,或者 xp_logevent 来改变事件或讯息的纪录状态。本节中,您将学到如何建立使用者定义的事件讯息,并学会如何发出警示讯息以确保事件将写入应用程序事件记录中。

________________________________________

说明

当 SQL Server 讯息纪录在 Windows NT 或 Windows 2000 应用程序事件记录时,它同时也记录在 SQL Server 记录中了。要在 Enterprise Manager 中检视 SQL Server 记录,请展开 管理 数据夹,然后展开 SQL Server记录文件 数据夹。

________________________________________

建立使用者定义事件讯息

系统所有的信息和使用者定义讯息都储存在 master 数据库的 sysmessages 数据表中。要建立使用者定义讯息,请用 T-SQL 系统 sp_addmessage 预存程序,语法如下:

sp_addmessage [ @msgnum = ] msg_id ,

[ @severity = ] severity ,

[ @msgtext = ] 'msg'

[ , [ @lang = ] 'language' ]

[ , [ @with_log = ] 'with_log' ]

[ , [ @replace = ] 'replace' ]

使用者定义讯息必须有一个讯息 ID 值(msg_id)为 50001 或者更大的值。Severity 参数是错误的重要层级,范围从 1 到 25,越高的数字表示越高错误的重要层级。只有系统管理员可以将重要层级设定成 19 到 25。msg_text 参数是错误讯息的内容,当错误发生时会显示在应用程序事件记录中。language 参数指定讯息使用哪种语言写入,因为 SQL Server 可以安装多种语言。with_log 参数可设定成 TRUE 或 FALSE,指定讯息是否要记录在 Windows NT 或 Windows 2000 应用程序事件记录中。默认值为 FALSE,这样在使用 RAISERROR WITH LOG(在下一节说明)时会覆写这个设定值。Replace 参数指定新讯息应该取代现存有相同讯息 ID 编号的讯息。

Public 角色成员可允许执行 sp_addmessage,但是要建立讯息重要层级为 18 以上或将 with_log 设定成 TRUE 的话,您就必须是 sysadmin 角色成员之一。

我们来看看一个使用 sp_addmessage 的例子。下面的陈述式建立一个记录在事件记录当中的新讯息(因为 with_log 被设定成 TRUE):

sp_addmessage 50001, 16,"Customer ID is out of range.", @with_log="TRUE"

GO

事件讯息的警示记录设定

假设一个现有的讯息或是您刚建立的讯息不允许记录(或者您没有包含 with_log 参数),就像下面的例子:

sp_addmessage 50001, 16,"Customer ID is out of range.", @with_log="TRUE"

GO

如果您稍后要记录讯息的话,就必须改变讯息的纪录状态。这样的话,请使用sp_altermessage 设定记录,如下面的例子:

sp_altermessage 50001, WITH_LOG, "TRUE"

GO

另一种方法,您可以在 WITH LOG 选项中使用 RAISERROR 叙述,将讯息回传到应用程序,并回传到应用程序事件记录以及 SQL Server 记录中。例如,下面叙述用重要层级为 16、状态值为 1 来传送讯息 50001,状态(state)是当错误发生在编码中不止一个地方的时候,用来追踪的数字:

RAISERROR (50001, 16, 1) WITH LOG

GO

________________________________________

相关信息

有关使用 RAISERROR 的更多细节,请参阅< 在线丛书 >索引中的RAISERROR,在 找到的主题 对话框中选择 使用 RAISERROR 。

________________________________________

要改变讯息的记录状态,您可以使用在 master 数据库中的延伸预存程序xp_logevent。使用这个程序时,讯息将被传送到事件记录和 SQL Server 记录中,但不会传送到客户端的应用程序中。下面是使用这个程序的例子:

USE master

GO

xp_logevent 50002, "Customer ID is out of range.", warning

GO

要有前两个参数,并且必须含有使用者定义讯息 ID 编号(一定要大于 50000)和出现在输出纪录的消息正文。第三个参数-重要层级-是选择性的,可以是 informational、warning 或 error 三个字符串之一。重要层级的设定决定了在 Event Viewer 中,讯息之后要出现什么类型的图像,这样才能够很快地识别出警告或者错误。在 Windows 2000 中,信息的讯息有一个蓝色的 i 图像,警告讯息有一个黄色的 ! 图像,而错误讯息有一个红色的 X 图像。如果没有指定重要层级,默认值为 informational。

建立警示

现在我们准备在事件和效能条件上建立警示。要建立警示,您可以使用 Enterprise Manager、T-SQL 或 SQL-DMO。我们将只说明 Enterprise Manager 和 T-SQL 方法,因为 SQL-DMO 超出本书范围。

使用 Enterprise Manager 建立事件警示

在这个例子中,我们将在重要层级为 24 的系统讯息上建立一个警示。讯息在事件记录中以默认值纪录,使用者不需要介入变更它的记录状态。请跟着下面步骤建立事件警示:

1. 在 Enterprise Manager 的左边窗格中展开一个服务器数据夹,展开 管理 数据夹,展开 SQL Server代理程序 数据夹。在 警示 上按一下右键,并在快捷菜单上选取 新增警示 ,出现 新增警示属性 窗口,如图31-17所示。在 一般 页签上键入警示的名称(可输入128个字符)。在这个例子中键入『IO_error_alert』。 启用 复选框允许您启用或停用这个警示。停用警示将导致它不被引发,就像停用作业一样。本例中,要确定警示可启用。在 型别 下拉式选单中选择 SQL Server事件警示 ,因为我们要建立警示,而这个警示在某个事件发生时会被解除。(另一种警示类型选项是S QL Server 效能条件警示,这种警示类型的例子将在下一节说明。)我们的例子是要建立当 I/O 错误发生时会解除的警示。

图31-17「新增警示属性」窗口的「一般」页签

2. 在 新增警示属性 窗口的 事件警示定义 区域中,选择 错误号码 或 重要性 指定您要启动警示的事件,然后指定一个错误编号或是重要层级。如果重要层级指定好了,那个重要层级的所有错误都将引发警示。在本例中,要选取 错误号码 ,然后点选 ... 按钮来寻找编号。出现 管理SQL Server讯息 对话框,如图31-18所示。

3. 要搜寻指定的错误,请在 搜寻 页签中的 重要性 清单上选取一个类别,然后按一下 寻找 。找到的错误讯息将列在 讯息 页签上。 搜寻 页签的底部有两个复选框,可以用来限制搜寻。 只包含记录的讯息 复选框可以让搜寻来检索自动记录在事件记录中的讯息。 只包含使用者自订的讯息 复选框限制只能搜寻使用者定义的讯息。例如,要寻找所有严重的硬件错误,要选取在 重要性 清单方块中的 024-严重错误 : 硬件错误 ,然后按一下Find。错误编号823(重要层级为24)将出现在 讯息 页签上,如图31-19所示。

图31-18「管理SQL Server讯息」对话框的「搜寻」页签

图31-19「管理SQL Server讯息」对话框的「讯息」页签

4. 按一下 确定 接受这个讯息,并回到 新增警示属性 窗口的 一般 页签。 数据库名称 下拉式选单让您指定只有当事件来自选取的数据库中,警示才会引发。保持 所有数据库 的默认值设定。 错误讯息中所含的文字 文字方块允许您键入字符串(可到 100 个位),来限制将引发警示的错误,而这些错误文字将显示那些刚键入的字符串。如果让这个文字方块空着的话,就不会受到任何限制。

5. 按一下 回应 页签,如图31-20所示。这个页签中,您可以指定警示发生时应该采取什么行动。选取 执行作业 复选框,在下拉式选单上选取一个作业名称,让作业可以在警示发生时执行。按一下 新增操作员 ,建立一个新操作员来通知。现有的操作员会出现在 通知操作员 清单上。您可以指定操作员是否应该用电子邮件、呼叫器、网络传送、或是综合上述方法来通知。

图31-20「新增警示属性」窗口的「响应」页签

如果指定用电子邮件通知操作员,而且也选取了 将警示的错误文字包含于 复选框,错误文字将在警示讯息中传送给操作员。在电子邮件中将附加的文字键入到页签底部的 待传送的其它告知讯息 文字方块。附加文字最多可有 512 位。图31-20显示操作员 TestOperator,选择用电子邮件通知。附加的讯息包含在内。注意 响应间隔延迟 文字方块。这些文字方块设定指定警示重复发生时,操作员将多久被通知一次。设定 60 分钟表示操作员每 60 分钟被通知一次。

6. 要接受您输入的的警示和响应,请按一下 套用 。然后点选 确定 来关闭窗口。

使用 Enterprise Manager 建立效能条件警示

当某种效能条件发生时,我们可使用 Enterprise Manager 建立效能条件警示。注意,SQLServer 代理程序每 20 分钟轮询一次效能计数器,所以如果在轮询之间有几秒钟的高低情况发生,是监测不到的。跟着下面步骤建立警示:

1. 在 Enterprise Manager 的左边窗格中展开一个服务器数据夹,展开 管理 数据夹,展开 SQL Server代理程序 数据夹。在 警示 上按一下右键,并在快捷菜单上选取 新增警示 ,出现 新增警示属性 窗口(图31-21)。在 一般 页签的 名称 文字方块中为警示键入一个名称(本例中使用的名称是user_alert)。指定一个效能条件警示,选取 型别 下拉式选单中的 SQL Server效能条件警示 。

2. 在 效能条件警示定义 区域,定义一个将启动警示的效能条件。选取您要使用的 SQL Server 效能对象,作为 对象 下拉式选单中的启动对象,然后选取要在 计数器 下拉式选单中使用的计数器。设定 发出警示的时机为计数器达 选项,指定在哪种情况下警示会被引发。最后设定一个门坎,如果超过这个特定值,就会引发警示。图31-21显示当 SQL Server User Connections 计数器到达100时,这个设定就会引发警示。

3. 要完成警示的设定,就在 回应 页签上设定选项,如前面步骤5所述。 按一下 套用 然后按 确定 。

图31-21「新增警示属性」窗口的「一般」页签

使用 T-SQL 建立事件警示或效能条件警示

您也可以使用 T-SQL 来建立警示,但是要记得如果用 Enterprise Manager 建立警示,您可以为那些警示产生 T-SQL 指令码。(要这样做的话,请在 SQL Server代理程序 数据夹中的 警示 上按一下右键,在快捷菜单上点选 所有工作 ,然后选择 产生SQL指令码 。)您可能会发现用 Enterprise Manager 建立警示比较容易,因为 T-SQL 方法需要学习并记住很多选项参数以及它们的默认值。

要用 T-SQL 增加警示,请使用 sp_add_alert 预存程序。不管要建立事件警示或是效能条件警示,都要使用这个程序。参数选项决定警示要建立成何种类型。sp_add_alert 的语法如下:

sp_add_alert [ @name = ] 'name'

[ , [ @message_id = ] message_id ]

[ , [ @severity = ] severity ]

[ , [ @enabled = ] enabled ]

[ , [ @delay_between_responses = ] delay_between_responses ]

[ , [ @notification_message = ] 'notification_message' ]

[ , [ @include_event_description_in = ] include_event_description_in ]

[ , [ @database_name = ] 'database' ]

[ , [ @event_description_keyword = ] 'event_description_keyword_pattern']

[ , { [ @job_id = ] job_id | [ @job_name = ] 'job_name' } ]

[ , [ @raise_snmp_trap = ] raise_snmp_trap ]

[ , [ @performance_condition = ] 'performance_condition' ]

[ , [ @category_name = ] 'category' ]

预存程序用来修改警示、检视警示信息,并分别删除 sp_update_alert、sp_help_alert 和 sp_delete_alert 的警示。记住,所有的预存程序都可在 msdb 数据库中找到。

________________________________________

相关信息

关于本节所提的程序细节,请参阅< 在线丛书 >并索引 < 预存程序 >。

________________________________________

操作员

操作员 (operators)是可以在作业完成或警示发生时,从 SQL Server 接收通知的个人。操作员是一个人,负责维护执行 SQL Server 的系统。您已经学会如何定义传送给操作员的通知讯息。正如前面所提,用来与操作员联系的方法有三种:传送电子邮件讯息、呼叫、和使用网络传送指令(传送网络讯息到操作员的计算机中)。系统必须符合好几个必要条件才能才能让这些方法顺利运作。使用电子邮件和呼叫联系的话,必须在服务器上安装 MAPI-1-compliant e-mail client(MAPI表示 Messaging API),如 Outlook 或是 Exchange Client,而且必须为 SQLServer 代理程序建立一个邮件档案夹。使用呼叫,还需要在邮件服务器上安装三方的 e-mail-to-pager 软件来处理内部的电子邮件讯息,并且将讯息转换成呼叫讯息。使用网络传送,必须以 Windows NT 或 Windows 2000 为操作系统-网络传送不支持 Windows 95/98。

________________________________________

相关信息

关于如何设立邮件数据夹,请参阅您的 email 用户软件文件。有关 pager-to-e-mail 软件的详细信息,请参阅您的呼叫服务提供员或呼叫文件数据。

________________________________________

在 SQL Server 上必须定义每个操作员。您可以建立不只一个操作员来分担责任,在联络不上其它操作员时,就通知故障安全防护操作员(例如在呼叫失败时)。您可以使用 Enterprise Manager、T-SQL 和 SQL-DMO 来建立操作员。本节将说明 Enterprise Manager 和 T-SQL 的方法,SQL-DMO 则不在本书讨论范围之内。

使用 Enterprise Manager 建立操作员

跟着下列步骤用 Enterprise Manager 建立操作员:

1. 在 Enterprise Manager 的左边窗格中展开一个服务器数据夹,展开 管理 数据夹,展开 SQL Server代理程序 数据夹。在 操作员 上按一下右键,并从快捷菜单上选取 新增操作员 ,显示 新增操作员属性 窗口,如图31-22所示。在 一般 页签中为新操作员键入名称,然后输入一个或多个:操作员的电子邮件名称、呼叫器的电子邮件名称、以及网络传送地址。

如果输入呼叫地址,您可以指定在 传呼待命排程 区域中何时可以呼叫操作员。例如,如果有不只一位操作员,您可以分配责任,让一个操作员在星期一、三、五、和星期日被呼叫,而另一个操作员在星期二、四、和星期六被呼叫。

2. 按一下 告知讯息 页签。如果点选 警示 (在标页签的右上角),会显示存在的警示清单,如图31-23所示。在字段中选择复选框,您可以指定何种警示将通知操作员,以及将用何种联络方法通知操作员。

图31-22「新增操作员属性」窗口的「一般」页签

图31-23「新增操作员属性」窗口的「一般」页签出现「警示」

3. 建立新操作员时,您将无法点选 作业 ,因为没有作业要通知新的操作员,而且新的操作员也还不存在。要避免新的操作员接收通知,请清除 操作员已准备接收告知讯息 复选框。停用这个选项使您暂停传送通知给操作员-例如,在操作员度假时。然后当操作员回来时,您可以撤销复选框再启用通知。

4. 按一下 传送电子邮件 按钮,建立列在 一般 页签上用来传给操作员的文字讯息。(如果没有输入电子邮件地址的话,将出现错误。)您可以传送电子邮件,描述为操作员建立的通知类型。在 告知讯息 页签底部,将看到关于最近键入、用来通知操作员的信息。

使用 T-SQL 建立操作员

T-SQL 指令用来建立操作员、修改操作员信息、检视操作员信息、以及删除操作员。在 msdb 数据库中系统的预存程序分别有:sp_add_operator、sp_update_operator、sp_help_operator 和 sp_delete_operator。您可能会再度觉得使用 Enterprise Manager 是比较容易的方法。用 Enterprise Manager 建立操作员后,可以产生 TSQL 指令码。

这里是 sp_add_operator 的语法:

sp_add_operator [ @name = ] 'name'

[ , [ @enabled = ] enabled ]

[ , [ @email_address = ] 'email_address' ]

[ , [ @pager_address = ] 'pager_address' ]

[ , [ @weekday_pager_start_time = ] weekday_pager_start_time ]

[ , [ @weekday_pager_end_time = ] weekday_pager_end_time ]

[ , [ @saturday_pager_start_time = ] saturday_pager_start_time ]

[ , [ @saturday_pager_end_time = ] saturday_pager_end_time ]

[ , [ @sunday_pager_start_time = ] sunday_pager_start_time ]

[ , [ @sunday_pager_end_time = ] sunday_pager_end_time ]

[ , [ @pager_days = ] pager_days ]

[ , [ @netsend_address = ] 'netsend_address' ]

[ , [ @category_name = ] 'category' ]

________________________________________

相关信息

列在本节中关于预存程序选项的细节,请参阅< 在线丛书 >索引中 < 预存程序 >的部分。

________________________________________

SQLServer 代理程序错误记录文件

SQLServer 代理程序服务本身拥有错误记录,记录了 SQLServer 代理程序的启动与关闭,以及任何跟S QLServer 代理程序作业或警示相关的警告、错误和通知讯息。要使用 SQLServer 代理程序错误记录文件,请跟着这些步骤进行:

1. 在 Enterprise Manager 的左边窗格中展开一个服务器数据夹,展开 管理 数据夹,展开 SQL Server代理程序 数据夹上按一下右键,并从快捷菜单上选取 显示错误记录文件 ,出现错误记录,如图31-24所示。

2. 型别 下拉式选单让您检视错误讯息、警告讯息、信息讯息或者全部的讯息(所有类型)。图31-25显示在开启 SQLServer 代理程序之后,错误讯息看起来像什么。(注意, 所有类型 是在 型别 下拉式选单中选取的。)

图31-24「SQL Server代理程序错误记录」对话框

图31-25「SQL Server代理程序错误记录」对话框,显示所有讯息的类型

3. 每次开启 SQLServer 代理程序时,错误讯息将重新启动,覆写记录中的现有讯息。您可以搜寻含有特定字符串的讯息,只要在 内含的文字 文字方块中键入字符串,然后按Enter或者点选 套用筛选条件 。图31-26显示搜寻字符串 CPU 之后的错误记录。

图31-26错误纪录讯息中搜寻字符串的结果

4. 在讯息上按两下,检视 SQL Server 代理程序 Error Log Message 对话框,如图31-27所示。

图31-27「SQL Server代理程序错误纪录讯息」对话框

如果搜寻结果不止一种讯息,您可以用 上一步 和 下一步 按钮来转换讯息。如果只找到一个讯息,这些按钮将无法使用。

如果操作员因为某种原因或是作业无法执行而联络不上的话,SQLServer 代理程序错误纪录将收到一个错误讯息。您应该偶尔检查这个错误记录,确定是否发生任何错误需要处理。

本章总结

在本章中,您学会了如何使用 SQLServer 代理程序服务,透过定义作业和操作员、设定通知给操作员、以及建立事件警示和效能条件警示来使管理工作自动化。您学会了在建立事件警示时,错误重要层级的重要性,以及如何变更错误讯息的记录状态,以便在 Windows NT 或 Windows 2000 应用程序事件记录中启用纪录。您还学会了如何检视 SQLServer 代理程序错误记录文件,档案中记录了关于 SQLServer 代理程序的信息,以及发生在警示与作业中的错误和警告。在 第 32 章 中,我们将讨论备份 SQL Server 数据库。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有