今天公司DBA提供了一套脚本,方便在SQL Server中利用JOB来获取性能相关数据,网上翻了下,找到两篇不错的JOB相关说明,链接如下:
SQL SERVER 中如何用脚本管理作业:http://www.tuicool.com/articles/muMJV3I
如何修改 SQL Server 代理主作业 (Transact-SQL):http://www.cnblogs.com/accumulater/p/6223912.html
这里附上对应的JOB脚本:
USE [msdb]
GO
/****** Object: Job [SP_Monitor_BlockSql 监控脚本10秒] Script Date: 2017/4/19 10:48:28 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 2017/4/19 10:48:29 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]' -- 将作业分类添加到服务器中
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'SP_Monitor_BlockSql 监控脚本10秒', -- 添加作业
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'无描述。',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [SP_Monitor_BlockSql] Script Date: 2017/4/19 10:48:30 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'SP_Monitor_BlockSql', -- 添加作业步骤
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC dbo.SP_Monitor_BlockSql',
@database_name=N'Monitor_DB',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1 -- 更改原先存在的作业步骤
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'5SS', -- 创建一个可由任意数量的作业使用的计划
@enabled=1, -- 1启用, 0不启用
@freq_type=64, -- 1 = 一次 4 = 每天 8 = 每周 16 = 每月 32 = 每月,相对于 freq_interval; 64 SQLServerAgent 服务启动时运行; 128 计算机空闲时运行
@freq_interval=1, -- 执行作业的天数。这个值会需要结合 freq_type 值而不同
@freq_subday_type=2, -- freq_subday_interval 的单位 0x1:定时;2:秒钟 0x4:分钟 0x8:小时
@freq_subday_interval=10, -- 10秒钟
@freq_relative_interval=0, --freq_type=32的情况下才有意义
@freq_recurrence_factor=0, -- 作业的两次计划执行之间的间隔周数或月数。只有 freq_type 为 8、16 或 32 时,才会使用 freq_recurrence_factor。freq_recurrence_factor 的数据类型为 int,默认值为0
@active_start_date=20170123, --作业的开始执行时间
@active_end_date=99991231, -- 作业的停止时间
@active_start_time=0, -- 指示 24 小时制的上午12:00:00,并且必须使用 HHMMSS 的格式输入
@active_end_time=235959,
@schedule_uid=N'829264f9-d77f-4440-a6a3-e4934889ba1b'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)' -- 将服务器与当前的作业关联
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO