SQL Server代理服务:指引你实现数据管理之道

什么是SQL Server代理服务?

SQL Server代理服务是SQL Server中的一个可选组件,它为DBA(数据库管理员)提供了一种在指定时间和日期运行SQL Server作业的机制。作业是一组可以由SQL Server代理服务在特定日期和时间自动执行的连续步骤。

与其他计划程序不同,SQL Server代理服务可以在Windows服务中以本地系统或其他安全上下文运行,因此可以执行操作系统层面的任务,例如备份文件或发送电子邮件通知。

SQL Server代理服务的组件

SQL Server代理服务中的Agent核心服务

SQL Server代理服务中的核心服务是SQL Server代理服务(C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn\SQLAGENT.EXE),它作为一个Windows服务运行,可以通过SQL Server Configuration Manager启动,暂停,重新启动,恢复和停止。

它还具有Windows事件记录集成,可在事件日志中记录重要事件,例如代理服务启动/停止,代理任务执行成功/失败等。这些事件可用于监视代理服务的操作与性能。

SQL Server代理服务中的作业

代理服务中的主要实体是作业。作业是一组一次性或定期运行的连续步骤。步骤可以是T-SQL脚本,ActiveX脚本,操作系统命令或SSIS包。

作业可以在代理服务中通过SQL Server Management Studio、Transact-SQL命令或代理服务对象模型进行创建、管理和监视。在SQL Server Management Studio中,可以使用向导来创建作业,步骤和计划,也可以手动创建每个对象。作业属性包括名称、描述、类别、扩展属性和步骤。步骤属性包括名称、类型、命令和输出文件位置。

SQL Server代理服务中的警报

代理服务中的另一个重要实体是警报。警报定义了一组条件和操作,以便代理服务可以在条件满足时执行操作,如向管理员发送电子邮件或在事件日志中生成条目。

警报可以在SQL Server Management Studio中管理,包括创建、编辑、启用和禁用。SQL Server代理提供了几个内置警报,例如SQL Server Agent错误,以便快速设置通知关键事件的方法。

SQL Server代理服务的用途

SQL Server代理服务为DBA提供了一种自动化管理SQL Server实例的方法。下面是一些SQL Server代理服务可以执行的常见任务:

自动备份数据库

使用代理服务,可以创建一个备份作业,该作业将定期运行自动备份数据库。例如,以下是一个备份作业,它以全备份和差异备份的形式每天备份AdventureWorks2017数据库。

BACKUP DATABASE [AdventureWorks2017] 

TO DISK = N'C:\Backup\AdventureWorks2017-Full.bak' WITH NOFORMAT, NOINIT,

NAME = N'AdventureWorks2017-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,

STATS = 10

BACKUP DATABASE [AdventureWorks2017]

TO DISK = N'C:\Backup\AdventureWorks2017-Diff.bak' WITH DIFFERENTIAL,

NAME = N'AdventureWorks2017-Differential Database Backup', SKIP, NOREWIND,

NOUNLOAD, STATS = 10

自动压缩和清理备份文件

如果你自动备份数据库,则通常还希望自动清理旧备份和压缩备份文件。SQL Server代理服务以及Windows命令脚本可用于执行此操作。例如,以下是一个命令脚本,可以自动压缩和清理在7天前创建的备份文件。

forfiles /p "C:\Backup" /s /d -7 /c "cmd /c 7z a @path.zip @path & del /f /s /q @path" 

运行复杂的查询

代理服务还可以在可控时间内运行复杂和长时间运行的查询,而无需从SSMS或其他工具中离开此查询。例如,以下是一个代理作业,可以每天以HTML格式发送报告并统计AdventureWorks2017数据库中的销售订单。

EXEC msdb.dbo.sp_send_dbmail

@profile_name='Adventure Works Administrator',

@recipients='yourname@yourcompany.com',

@subject='Sales Order Report',

@query='SET NOCOUNT ON;

SELECT

COUNT(*) AS [Number of Sales Orders],

SUM(TotalDue) AS [Total Sales Amount]

FROM Sales.SalesOrderHeader

WHERE OrderDate BETWEEN '2017-01-01' AND '2017-12-31'

',

@attach_query_result_as_file=1,

@query_attachment_filename='SalesOrders.html',

@query_result_separator=',',

@query_result_header=1,

@query_result_width =32767,

@query_result_to_file =1,

@query_result_no_padding=1

运行Integration Services包

代理服务可以运行Integration Services包,该包通常涉及读取和写入数据到数据库、文件和网络服务。例如,以下是一个代理作业,可以每天运行一个Integration Services包,该包从Excel文件中提取数据,并将该数据加载到AdventureWorks2017数据库表。

dtexec /F "C:\SSIS\Packages\ExcelToTable.dtsx" /SET "\Package.Variables[User::ExcelFilePath].Properties[Value]";"C:\Files\ExcelData.xlsx"

总结

通过SQL Server代理服务,DBA可以轻松自动化管理SQL Server实例。代理服务可以创建作业、警报,运行T-SQL脚本、操作系统命令和Integration Services包,从而实现各种管理和维护任务。利用代理服务可以简化通常需要手动执行的任务,节省时间并提高效率。

数据库标签