34、SQL Server Agent:自动化日常维护指南

SQL Server Agent:自动化日常维护指南

1. 启用 SQL Server Agent 通知

在开始接收通知之前,需要启用 SQL Server Agent 中的警报系统。具体操作步骤如下:
1. 配置好数据库邮件并添加操作员后,启用警报系统并指定一个故障安全操作员。该操作员将在主操作员无法联系时接收通知。
2. 在 SQL Server Management Studio 中,右键单击 SQL Server Agent,从上下文菜单中选择“属性”,打开“SQL Server Agent 属性”对话框。
3. 选择“警报系统”页面,进行以下设置:
- 在“邮件会话”部分,选择“启用邮件配置文件”,从“邮件系统”下拉列表中选择“数据库邮件”,再从“邮件配置文件”下拉列表中选择 SQL Server Agent 用于发送警报通知的配置文件。
- 在“故障安全操作员”部分,选择“启用故障安全操作员”,从下拉列表中选择在指定操作员无法联系时接收通知的操作员。选择“电子邮件”复选框,指定故障安全操作员将通过电子邮件接收通知。避免使用“寻呼机”和“网络发送”选项,因为它们在未来版本中将不再受支持。
4. 点击“确定”关闭“SQL Server Agent 属性”对话框,重启 SQL Server Agent 使新设置生效。

2. 警报

SQL Server Agent 警报是对预定义事件的自动响应。可以配置警报以响应 SQL Server 事件、SQL Server 性能计数器和 Windows Management Instrumentation (WMI) 事件。事件触发警报后,可以通过通知操作员或在事件发生后运行作业来响应警报。

2.1 创建警报示例

以创建一个名为“Fatal Error in Resource”的警报为例,该警报将通知严重性为 19 的任何致命错误。操作步骤如下:
1. 在 SQL Server Management Studio 的对象资源管理器中,展开 SQL Server Agent,右键单击“警报”文件夹,从上下文菜单中选择“新建警报”,打开“新建警报”对话框。
2. 在“常规”页面:
- 为警报提供一个描述性名称,确保选中“启用”复选框。
- 从“类型”下拉列表中选择“SQL Server 事件警报”。
- 从“数据库名称”下拉列表中选择要监控的数据库,这里选择“<所有数据库>”。
- 选择“严重性”选项以启用下拉列表,然后选择“019 - Fatal Error in Resource”。
3. 选择“响应”页面:
- 可以选择从“执行作业”下拉列表中选择现有作业运行,或选择“新建作业”按钮创建新作业。
- 在“操作员列表”区域,为每个希望在警报触发时接收通知电子邮件的操作员选中“电子邮件”列。避免使用“寻呼机”和“网络发送”选项。
4. 选择“选项”页面:
- 选中顶部的“电子邮件”复选框,使事件的错误文本包含在操作员接收的电子邮件中。
- 在“要发送的其他通知消息”文本框中输入额外信息或说明。
- 使用“响应间隔”部分设置在指定时间内暂停警报的额外响应。
5. 点击“确定”关闭“新建警报”对话框,创建警报。

也可以使用以下 T - SQL 脚本创建相同的警报:

USE msdb
GO
EXEC msdb.dbo.sp_add_alert
@name=N'Fatal Error in Resource',
@message_id=0,
@severity=19,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=1,
@notification_message=
   N'This is a Fatal Alert. Please review immediately.'  
GO
EXEC msdb.dbo.sp_add_notification
@alert_name=N'Fatal Error in Resource',
@operator_name=N'DBA Support',
@notification_method = 1  
GO
2.2 特定错误编号的警报

可以通过输入确切的错误编号为特定错误定义警报,无论其严重性如何。例如,错误 825 涉及 IO 问题,可以在 Paul Randal 的博客 上了解更多信息。

要获取消息及其严重性代码的完整列表,可以查询 sys.messages 目录视图。可以通过以下查询缩小结果范围:

SELECT *
FROM sys.messages
WHERE language_id = 1033 AND
      is_event_logged = 1 AND
      severity < 19
3. 作业

SQL Server Agent 作业可对 SQL Server 实例执行例行计划维护。作业由一系列步骤或操作组成,可将作业分类以分组性质相似的任务。可以使用预定义的计划或 msdb 中的 sp_start_job 存储过程执行作业。SQL Server Agent 可以在作业失败、成功或完成时通知操作员。

3.1 创建作业示例

以创建一个清理数据库邮件历史记录的作业为例,操作步骤如下:
1. 右键单击 SQL Server Agent 下的“作业”文件夹,从上下文菜单中选择“新建作业”,打开“新建作业”对话框。
2. 在“常规”页面:
- 为作业提供一个描述性名称,如“Cleanup Mail History”。
- 从“类别”下拉列表中选择“数据库维护”。如果没有该类别或想创建新类别,可以右键单击“作业”文件夹,从上下文菜单中选择“管理作业类别”。
- 提供简要描述,如“Database maintenance job used to purge mail history older than 30 days from the msdb”。如果未选中“已启用”,作业将不会按计划运行,但仍可使用 sp_start_job 存储过程执行。禁用的作业在响应警报时也会运行。
3. 选择“步骤”页面:
- 点击“新建”,打开“新建作业步骤”对话框。
- 为作业步骤提供一个描述性名称,如“Delete Mail History”。
- 从“类型”下拉列表中选择“Transact - SQL 脚本 (T - SQL)”。
- 将“数据库”选项更改为 msdb ,因为数据库邮件清理存储过程位于该数据库中。在“命令”文本框中输入以下脚本:

DECLARE @BeforeDate DateTime =  
       (SELECT DATEADD(d,-30, GETDATE()))
EXEC sysmail_delete_mailitems_sp
@sent_before = @BeforeDate
EXEC sysmail_delete_log_sp
@logged_before = @BeforeDate
- 选择“高级”页面,配置作业步骤的其他选项:
    - 使用“成功时操作”和“失败时操作”列表指定作业步骤完成后的操作。
    - 使用“重试次数”和“重试间隔”选项设置 SQL Server Agent 尝试运行步骤的次数以及重试间隔时间。
    - 指定一个输出文件来记录作业步骤返回的消息。
  1. 选择“计划”页面:
    • 点击“新建”,打开“新建作业计划”对话框。
    • 为新计划提供一个描述性名称,如“Midnight Every Sunday”,选择合适的计划。
    • 点击“确定”将作业添加到新计划中。
  2. 跳过“警报”页面,选择“通知”页面:
    • 为作业完成时的不同状态(失败、成功、完成)指定操作,如通知操作员、写入 Windows 应用程序事件日志或自动删除作业。这里选择在作业失败时向 DBA Support 操作员发送电子邮件。
    • 点击“确定”创建新作业。
  3. 只有在使用 SQL Server Agent 中的主服务器和目标服务器时才需要关注“目标”页面。可以将 SQL Server 实例指定为主 (MSX) 服务器,并将作业推送到目标 (TSX) 服务器。
4. 代理

可以创建代理帐户,使 SQL Server Agent 能够以指定 Windows 用户帐户的凭据执行作业步骤。代理帐户可用于使用 Windows 凭据访问 SQL Server 外部的子系统,但不能用于 T - SQL 作业步骤。创建代理帐户的步骤如下:
1. 创建一个映射到 Windows 用户帐户的凭据:
- 在 SQL Server Management Studio 中,展开“安全性”节点,右键单击“凭据”文件夹,从上下文菜单中选择“新建凭据”,打开“新建凭据”对话框。
- 为凭据输入一个描述性名称,输入有效的 Windows 用户帐户,可点击“标识”字段旁边的省略号搜索和验证 Windows 用户帐户。输入 Windows 用户帐户的密码,点击“确定”创建新凭据。
2. 创建新代理:
- 展开 SQL Server Agent,右键单击“代理”文件夹,从上下文菜单中选择“新建代理”,打开“新建代理帐户”对话框。
- 为新代理帐户提供一个描述性名称,输入之前创建的凭据名称,可点击“凭据名称”文本框旁边的省略号搜索凭据。
- 为新代理帐户输入描述,选择新代理帐户将使用的子系统,如“操作系统 (CmdExec)”和“PowerShell”。
- 选择“主体”页面,管理可以在作业步骤中使用新代理帐户的主体。

操作流程图

graph LR
    A[开始] --> B[启用 SQL Server Agent 通知]
    B --> C[配置警报系统]
    C --> D[创建警报]
    D --> E[创建作业]
    E --> F[创建代理]
    F --> G[结束]

总结

通过启用 SQL Server Agent 通知、创建警报和作业以及使用代理帐户,可以实现 SQL Server 实例的自动化日常维护,提高系统的可靠性和可管理性。在创建警报和作业时,要根据实际需求进行合理配置,同时注意避免使用未来版本中可能被移除的功能。

SQL Server Agent:自动化日常维护指南

5. 操作要点总结

为了更清晰地展示 SQL Server Agent 自动化日常维护的关键操作,下面通过表格形式进行总结:
|操作类型|操作步骤|注意事项|
| ---- | ---- | ---- |
|启用通知|1. 配置数据库邮件并添加操作员
2. 右键单击 SQL Server Agent 选择属性,打开“SQL Server Agent 属性”对话框
3. 在“警报系统”页面进行邮件配置文件和故障安全操作员设置
4. 点击确定并重启 SQL Server Agent|避免使用“寻呼机”和“网络发送”选项,未来版本不再支持|
|创建警报|1. 在对象资源管理器中展开 SQL Server Agent,右键单击“警报”文件夹选择“新建警报”
2. 在“常规”页面设置警报名称、类型、监控数据库和严重性
3. 在“响应”页面选择执行作业和通知操作员
4. 在“选项”页面设置电子邮件包含错误文本和响应间隔
5. 点击确定创建警报|可以使用 T - SQL 脚本创建警报,查询 sys.messages 视图筛选消息|
|创建作业|1. 右键单击“作业”文件夹选择“新建作业”
2. 在“常规”页面设置作业名称、类别和描述
3. 在“步骤”页面创建作业步骤,选择 T - SQL 脚本并输入清理脚本
4. 在“高级”页面配置作业步骤完成操作和重试设置
5. 在“计划”页面创建作业计划
6. 在“通知”页面设置作业完成通知方式
7. 点击确定创建作业|禁用的作业可通过 sp_start_job 执行,响应警报时也会运行|
|创建代理|1. 展开“安全性”节点,右键单击“凭据”文件夹选择“新建凭据”,输入 Windows 用户信息创建凭据
2. 展开 SQL Server Agent,右键单击“代理”文件夹选择“新建代理”,输入凭据名称和子系统信息
3. 在“主体”页面管理可使用代理的主体|代理帐户不能用于 T - SQL 作业步骤|

6. 常见问题及解决方法

在使用 SQL Server Agent 进行自动化日常维护过程中,可能会遇到一些常见问题,以下是部分问题及解决方法:
- 问题 1:警报未触发
- 可能原因 :警报配置错误,如严重性设置不正确、数据库选择错误等;SQL Server Agent 未启动或未正确重启。
- 解决方法 :检查警报配置,确保各项设置正确;重启 SQL Server Agent 并检查服务状态。
- 问题 2:作业执行失败
- 可能原因 :作业步骤中的脚本存在语法错误;数据库连接问题;作业计划设置错误。
- 解决方法 :检查作业步骤中的脚本,确保语法正确;检查数据库连接信息;重新设置作业计划。
- 问题 3:代理帐户无法使用
- 可能原因 :凭据信息错误;代理帐户未正确关联子系统。
- 解决方法 :检查凭据中的 Windows 用户信息是否正确;在代理帐户中重新选择子系统。

7. 性能优化建议

为了提高 SQL Server Agent 自动化日常维护的性能,可以考虑以下优化建议:
- 合理设置警报响应间隔 :对于可能频繁出现的错误消息,设置适当的响应间隔,避免短时间内发送大量通知。例如,在创建警报的“选项”页面设置“响应间隔”,防止操作员在短时间内收到过多邮件。
- 优化作业步骤 :减少作业步骤中的不必要操作,避免长时间运行的脚本。例如,在清理数据库邮件历史记录的作业中,确保脚本高效执行,避免资源浪费。
- 定期清理日志 :定期清理作业执行日志和数据库邮件日志,减少磁盘空间占用。可以创建一个定期运行的作业来执行日志清理操作。

操作流程详细图

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B(启用 SQL Server Agent 通知):::process
    B --> C{配置是否成功?}:::decision
    C -->|是| D(配置警报系统):::process
    C -->|否| B
    D --> E(创建警报):::process
    E --> F{警报创建是否成功?}:::decision
    F -->|是| G(创建作业):::process
    F -->|否| E
    G --> H{作业创建是否成功?}:::decision
    H -->|是| I(创建代理):::process
    H -->|否| G
    I --> J{代理创建是否成功?}:::decision
    J -->|是| K([结束]):::startend
    J -->|否| I

总结

通过全面了解 SQL Server Agent 的各项功能,包括启用通知、创建警报、作业和代理,以及掌握操作要点、常见问题解决方法和性能优化建议,可以更好地实现 SQL Server 实例的自动化日常维护。合理运用这些技术,能够提高系统的稳定性和可管理性,减少人工干预,为数据库的正常运行提供有力保障。在实际操作过程中,要根据具体情况进行灵活配置和调整,确保各项功能的正常使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值