SQL Server 代理
SQL Server 代理是一项 Microsoft Windows 服务,用于执行计划管理任务,这些任务在 SQL Server 2014 中称为作业。
本主题内容
SQL Server 代理的好处
SQL Server 代理使用 SQL Server 存储作业信息。 作业包含一个或多个作业步骤。 每个步骤都有自己的任务。例如,备份数据库。
SQL Server 代理可以按照计划运行作业,也可以在响应特定事件时运行作业,还可以根据需要运行作业。 例如,如果希望在每个工作日下班后备份公司的所有服务器,就可以使该任务自动执行。 将备份安排在星期一到星期五的 22:00 之后运行,如果备份出现问题,SQL Server 代理可记录该事件并通知您。
注意
默认情况下,安装 SQL Server 2014 时禁用SQL Server 代理服务,除非用户显式选择自动启动服务。
SQL Server Agent Components
SQL Server 代理使用下列组件来定义要执行的任务、执行任务的时间以及报告任务成功或失败的方式。
作业
作业是 SQL Server 代理执行的一系列指定操作。 使用作业能够定义可一次或多次运行的,并且可以监视其成功或失败状态的管理任务。 一个作业可在一台本地服务器或者多台远程服务器上运行。
重要
SQL Server 故障转移群集实例上发生故障转移事件时正在运行的 SQL Server 代理作业在故障转移到其他故障转移群集节点后不恢复。 SQL Server 在 Hyper-V 节点暂停时,如果该暂停导致故障转移到其他节点,则正在运行的代理作业不恢复。 已开始但由于故障转移事件而未能完成的作业在日志中记录为已开始,但不提供附加的条目来指明完成或失败。 SQL Server 代理作业好像永远不会结束。
可以通过下列几种方式来运行作业:
根据一个或多个计划。
响应一个或多个警报。
通过执行 sp_start_job 存储过程。
作业中的每个操作都是一个“作业步骤” 。 例如,作业步骤可以运行 Transact-SQL 语句、执行 SSIS 包或向 Analysis Services 服务器发出命令。 作业步骤作为作业的一部分进行管理。
所有作业步骤均在特定的安全上下文中运行。 对于使用 Transact-SQL 的作业步骤,请使用 EXECUTE AS 语句设置作业步骤的安全上下文。 对于其他类型的作业步骤,请使用代理帐户来设置作业步骤的安全上下文。
计划
“计划” 指定了作业运行的时间。 多个作业可按同一计划运行,可将多个计划应用到同一作业。 计划可为作业运行时间定义以下条件:
每当 SQL Server 代理启动时。
每当计算机的 CPU 使用率处于定义的空闲状态水平时。
在特定日期和时间运行一次。
按重复的计划运行。
有关详细信息,请参阅 创建计划并将计划附加到作业。
警报
“警报” 是对特定事件的自动响应。 例如,事件可以是启动的作业,也可以是达到特定阈值的系统资源。 可以定义警报产生的条件。
警报可以响应下列任一条件:
SQL Server 事件
SQL Server 性能条件
运行 SQL Server 代理的计算机上的 Microsoft Windows Management Instrumentation (WMI) 事件
警报可以执行下列操作:
通知一个或多个操作员
运行作业
有关详细信息,请参阅 “警报”。
运算符
“操作员” 定义的是负责维护一个或多个 SQL Server 实例的个人的联系信息。 在有些企业中,操作员职责被分配给一个人。 在拥有多个服务器的企业中,操作员职责可以由多人分担。 操作员不涉及安全信息,因此不会定义安全主体。
SQL Server可以通过以下一项或多项通知操作员警报:
电子邮件
寻呼程序(通过电子邮件)
net send
注意
SQL Server 代理所在的计算机必须启动 Windows Messenger 服务,才能使用net send 发送通知。
重要
SQL Server的未来版本中,将从SQL Server 代理中删除寻呼和 net send 选项。 请避免在新的开发工作中使用这些功能,并考虑修改当前使用这些功能的应用程序。
若要使用电子邮件或寻呼程序向操作员发送通知,必须将 SQL Server 代理配置为使用数据库邮件。 有关详细信息,请参阅数据库邮件。
可以将操作员定义为一组个人的别名。 这样,该组的所有成员就可以同时收到通知。 有关详细信息,请参阅运算符。
SQL Server 代理管理的安全性
SQL Server 代理使用 msdb 数据库中的 SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole 固定数据库角色来控制对不是固定服务器角色成员sysadmin
的用户SQL Server 代理的访问。 除了这些固定数据库角色之外,子系统和代理还有助于数据库管理员确保每个作业步骤运行时都具有执行其任务所需的最低权限。
角色
msdb 中 SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole 固定数据库角色的成员以及固定服务器角色的成员sysadmin
有权访问SQL Server 代理。 不属于其中任何角色的用户不能使用 SQL Server 代理。 有关用于 SQL Server 代理的角色的详细信息,请参阅实现 SQL Server 代理安全性。
子系统
子系统是预定义的对象,表示作业步骤可用的功能。 每个代理都可以访问一个或多个子系统。 子系统可以提供安全性,因为它们分隔了对可用于代理的功能的访问。 除了 Transact-SQL 作业步骤,每个作业步骤都在代理的上下文中运行。 Transact-SQL 作业步骤使用 EXECUTE AS 命令设置安全上下文。
SQL Server 定义了下表中列出的子系统:
子系统名称 | 说明 |
---|---|
Microsoft ActiveX 脚本 | 运行 ActiveX 脚本作业步骤。 **重要**在 MicrosoftSQL Server 的未来版本中,将从 SQL Server 代理 中删除 ActiveX 脚本子系统。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 |
操作系统 (CmdExec) | 运行可执行程序。 |
PowerShell | 运行 PowerShell 脚本作业步骤。 |
复制分发服务器 | 运行激活复制分发服务器代理的作业步骤。 |
复制合并 | 运行激活复制合并代理的作业步骤。 |
复制队列读取器 | 运行激活复制队列读取器代理的作业步骤。 |
复制快照 | 运行激活复制快照代理的作业步骤。 |
复制事务日志读取器 | 运行激活复制日志读取器代理的作业步骤。 |
Analysis Services 命令 | 运行 Analysis Services 命令。 |
Analysis Services 查询 | 运行 Analysis Services 查询。 |
SSIS 包执行 | 运行 SSIS 包。 |
注意
由于 Transact-SQL 作业步骤中不使用代理,因此没有用于 Transact-SQL 作业步骤的 SQL Server 代理子系统。
SQL Server 代理会强制实施子系统限制,即使代理的安全主体正常拥有在作业步骤中运行任务的权限也是如此。 例如,作为 sysadmin 固定服务器角色成员的用户的代理无法运行 SSIS 作业步骤,除非代理有权访问 SSIS 子系统,即使用户可以运行 SSIS 包。
代理
SQL Server 代理使用代理管理安全上下文。 一个代理可用于多个作业步骤。 固定服务器角色的成员 sysadmin
可以创建代理。
每个代理对应于一个安全凭据。 每个代理都可与一组子系统和一组登录名相关联。 代理仅可用于使用与该代理相关联的子系统的作业步骤。 若要创建使用特定代理的作业步骤,作业所有者必须使用与此代理相关联的登录名,或者是对代理具有无限访问权限的角色成员。 sysadmin
固定服务器角色的成员可以不受限制地访问代理。 SQLAgentUserRole、 SQLAgentReaderRole或 SQLAgentOperatorRole 的成员仅能使用授予他们特定访问权限的代理。 这些 SQL Server 代理固定数据库角色的每个成员用户必须获得访问特定代理的权限,才能创建使用那些代理的作业步骤。
Related Tasks
使用以下步骤来配置 SQL Server 代理以自动管理 SQL Server:
确定哪些管理任务或服务器事件定期执行以及这些任务或事件是否可以通过编程方式进行管理。 如果任务涉及一系列可预见的步骤并且在特定时间或响应特定事件时执行,则该任务非常适合自动化。
使用 SQL Server Management Studio、Transact-SQL 脚本或 SQL Server 管理对象 (SMO) 定义一组作业、计划、警报和操作员。 有关详细信息,请参阅 创建作业。
运行定义的SQL Server 代理作业。
注意
对于默认的 SQL Server 实例,SQL Server 服务命名为 SQLSERVERAGENT。 对于命名实例,SQL Server 代理服务将被命名为 SQLAgent$instancename。
如果运行的是SQL Server的多个实例,则可以使用多服务器管理自动执行所有实例中常见的任务。 有关详细信息,请参阅 企业范围的自动化管理。
通过以下任务以开始使用 SQL Server 代理:
说明 | 主题 |
介绍如何配置 SQL Server 代理。 | 配置 SQL Server 代理 |
介绍如何启动、停止和暂停 SQL Server 代理服务。 | 启动、停止或暂停 SQL Server 代理服务 |
介绍为 SQL Server 代理服务指定帐户时的注意事项。 | 为 SQL Server 代理服务选择帐户 |
介绍如何使用 SQL Server 代理错误日志。 | SQL Server 代理错误日志 |
介绍如何使用性能对象。 | 使用性能对象 |
介绍维护计划向导,它是一个实用工具,可用来帮助您创建作业、警报和运算符以对 SQL Server 实例进行自动管理。 | 使用维护计划向导 |
介绍如何使用 SQL Server 代理将管理任务自动化。 | 自动执行管理任务(SQL Server 代理) |