创建sql作业(JOB)
在SQL Server日常需求处理中,会遇到定时执行或统计数据的需求,这时我们可以通过作业(JOB)来处理,从而通过代理的方式来实现数据的自动处理。一下为SQL Server中创建作业的脚本,供大家参考使用。
一、创建作业(JOB)
-- SQL SERVER2000 作业(JOB)T-SQL创建脚本
-- author: jiajia
-- 服务器: (local)
--参数说明:
-- daily_pr_stat_test (作业名称:测试JOB名称,可根据需求进行修改)
-- @command = N'exec pr_stat_test' (作业调用可执行存储过程或SQL语句:pr_stat_test--执行数据统计的可运行存储过程,当然你也可以换成可执行的SQL语句)
-- @database_name = N'test' (运行数据库:test--存储过程所在库)
-- @active_start_date = 20121207 (作业执行的开始日期:为NULL时表示当前日期,格式为YYYYMMDD。20121207--该作业开始执行日期)
-- @active_end_date = 99991231 (作业执行的停止日期:默认为99991231,格式为YYYYMMDD)
-- @active_start_time = 84100 (作业执行的开始时间:格式为HHMMSS,84100--该作业开始执行时间)
-- @active_end_time = 235959 (作业执行的停止时间:格式为HHMMSS,235959--该作业执行结束时间)
-- @freq_type = 4 (作业执行时间的值:1--一次;4--每天;8--每周;16--每月;32--每月,相对于 freqinterval;64--SQLServerAgent 服务启动时运行;128--计算机空闲时运行)
-- @freq_interval = 1 (重复执行次数:1--每天执行一次)
-- @freq_subday_type = 1 (重复方式:0x1--在指定的时间;0x2--秒;0x4--分钟;0x8--小时)
-- @freq_subday_interval = 0 (重复周期数:0--不重复,1--每小时执行一次)
-- @freq_relative_interval = 0 (第几个相对时间执行:允许的值为1,2,4,8代表第1~4个相对时间,16表示最后一个相对时间)
-- @freq_recurrence_factor = 0 (作业的两次计划执行之间的间隔周数或月数:只有 freq_type 为 8、16 或 32 时,才会使用 freq_recurrence_factor)
BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
--判断本地作业类别是否存在,不存在则添加
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1
EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'
--判断作业是否存在,如存在则提示处理,不存在则新建
IF (SELECT COUNT(*) FROM msdb.dbo.sysjobs WHERE name = N'daily_pr_stat_test') > 0
PRINT N'作业“daily_pr_stat_test”已经存在,因而将不被替换。'
ELSE
BEGIN
-- 添加作业
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'daily_pr_stat_test', @owner_login_name = N'sa',
@description = N'没有可用的描述。', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page
= 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- 添加作业步骤
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'1', @command = N'exec pr_stat_test',
@database_name = N'test', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0,
@retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0,
@on_fail_action = 2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- 添加作业调度
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'1', @enabled = 1, @freq_type = 4, @active_start_date =
20121207, @active_start_time = 84100, @freq_interval = 1, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0,
@freq_recurrence_factor = 0, @active_end_date = 99991231, @active_end_time = 235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- 添加目标服务器
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
二、删除作业(JOB)
1、使用 SQL Server Management Studio删除
删除单个作业:
在“对象资源管理器”中,连接到 SQL Server 数据库引擎实例,再展开该实例。
依次展开“SQL Server 代理”和“作业”,右键单击要删除的作业,再单击“删除”。
在“删除对象”对话框中,确认选择了要删除的作业。
单击“确定”。
删除多个作业:
在“对象资源管理器”中,连接到 SQL Server 数据库引擎实例,再展开该实例。
展开“SQL Server 代理”。
右键单击“作业活动监视器”,然后单击“查看作业活动”。
在作业活动监视器中,选择要删除的作业,右键单击选择的作业,然后选择“删除作业”。
2、使用SQL语句删除
USE msdb ;
GO
EXEC sp_delete_job
@job_name = N'daily_pr_stat_test' ;
GO
三、查看作业(JOB)的相关信息
-- 查看作业是否存在
SELECT COUNT(*) FROM msdb.dbo.sysjobs WHERE name = N'daily_pr_stat_test'
--查询作业运行状态信息(run_status: 0=出错失败,1=成功,3=已取消,5=状态未知),SQL Server2005以上
exec msdb.dbo.sp_help_jobactivity @job_name=N'daily_pr_stat_test'
-- 查看数据库中当前定义的所有作业的全部属性
exec msdb..sp_help_job
--查看作业历史
select a.*,b.name
from msdb.dbo.sysjobhistory a
inner join msdb.dbo.sysjobs b
on a.job_id=b.job_id
and b.name='daily_pr_stat_test'
--and a.run_status=0 --作业失败信息
order by a.run_time desc
-- 查看指定作业的全部属性
exec msdb..sp_help_job @job_name=N'daily_pr_stat_test'
-- 可查看执行语句或者存储过程等等
exec msdb..sp_help_jobstep @job_name=N'daily_pr_stat_test'
-- 查看作业历史执行时间等信息
A、SQL Server2000版本中:
SELECT j.name AS 'JobName',
s.step_id AS 'Step',
s.step_name AS 'StepName',
run_date,
run_time,
convert(varchar(32),left(run_date,4)+'-'+substring(convert(varchar(10),run_date),5,2)+'-'+right(run_date,2),120)+' '
+substring(convert(varchar(10),run_time),1,len(run_time)-4)+':'+substring(convert(varchar(10),run_time),len(run_time)-3,2)+':'+right(run_time,2) AS 'RunDateTime',
((run_duration /10000 * 3600 + (run_duration / 100 ) % 100 * 60 + run_duration % 100 + 31) / 60) AS 'RunDurationMinutes'
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobsteps s ON j.job_id = s.job_id
INNER JOIN msdb.dbo.sysjobhistory h ON s.job_id = h.job_id
AND s.step_id = h.step_id
AND h.step_id <> 0
WHERE j.enabled = 1 --Only Enabled Jobs
and j.name like '%vip_report%'
ORDER BY JobName,RunDateTime DESC
B、SQL Server2005以上版本中:
SELECT j.name AS 'JobName' ,
s.step_id AS 'Step' ,
s.step_name AS 'StepName' ,
msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime' ,
(( run_duration / 10000 * 3600 + (run_duration / 100) % 100 * 60 + run_duration % 100 + 31) / 60) AS 'RunDurationMinutes'
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobsteps s ON j.job_id = s.job_id
INNER JOIN msdb.dbo.sysjobhistory h ON s.job_id = h.job_id
AND s.step_id = h.step_id
AND h.step_id <> 0
WHERE j.enabled = 1 --Only Enabled Jobs
ORDER BY JobName,RunDateTime DESC
四、修改指定作业(JOB)相关属性值
1、修改作业开始执行日期和时间
update a
set a.active_start_date='20141010',a.active_start_time='082000'
from msdb.dbo.sysschedules a,msdb.dbo.sysjobschedules b,msdb.dbo.sysjobs c
where a.schedule_id=b.schedule_id
and b.job_id=c.job_id
and c.name=N'daily_pr_stat_test'
2、修改指定作业下次执行时间
update a
set next_run_time='114000'
from msdb.dbo.sysjobschedules a,msdb.dbo.sysjobs b
where a.job_id=b.job_id
and b.name=N'daily_pr_stat_test'
3、启用作业
exec msdb.dbo.sp_update_job @job_name='daily_pr_stat_test',@enabled=1
4、禁用作业
exec msdb.dbo.sp_update_job @job_name='daily_pr_stat_test',@enabled=0
5、立即运行作业
exec msdb.dbo.sp_start_job N'daily_pr_per_test'
6、立即停止正在运行中的作业(可能导致不可预知的结果)
exec msdb.dbo.sp_stop_job N'daily_pr_per_test'
7、修改作业其他参数
exec msdb..sp_update_job @job_name=N'daily_pr_stat_test'
更多相关参数请参考:http://technet.microsoft.com/zh-cn/magazine/ms188745(SQL.105).aspx
创建sql作业(JOB)的更多相关文章
- 创建SQL作业错误的解决方法(不能将值 NULL 插入列 'owner_sid',表 'msdb.dbo.sysjobs';列不允许有空值。)
在用SQL语句创建SQL Server作业时有时出现如下错误: 消息 515,级别 16,状态 2,过程 sp_add_job,第 137 行 不能将值 NULL 插入列 'owner_sid',表 ...
- 通过存储过程创建SQL作业
USE dbNameGO/****** Object: StoredProcedure [dbo].[usp_Createjob] Script Date: 03/26/2014 14:36:30 * ...
- 如何跑通第一个 SQL 作业
简介: 本文由阿里巴巴技术专家周凯波(宝牛)分享,主要介绍如何跑通第一个SQL. 一.SQL的基本概念 1.SQL 分类 SQL分为四类,分别是数据查询语言(DQL).数据操纵语言(DML).数据定义 ...
- 实习笔记-1:sql 2008r2 如何创建定时作业
在公司实习了近一个月,学了很多东西.这一篇是一些比较基础的东西,本人是小菜鸟,不喜欢大神来喷.大神欢迎出门点右上角.谢谢~ 说大实话,对于数据库,我在还没出来实习的时候就是只懂写一些sql语句以及知道 ...
- SQL Server 如何创建定时作业
在做SQL server 管理时,往往需要每日执行定时任务,但是如果每天都去人工执行,非常不方便,而且一般定时操作,都应该是在数据库压力不大时,一般是在夜间.所以我们需要创建定时作业来代替人工的执行定 ...
- SQL Server2012 创建定时作业——图文并茂,教你轻松快速创建
SQL Server2012 如何创建定时作业?有兴趣的可以来看下,图文并茂哦! 1.首先我们打开SQL Server代理,里面选择作业 2.右键作业,选择新建作业 3.填写一些相应的内容,名称和说明 ...
- SQL Server—— 如何创建定时作业
在做SQL server 管理时,往往需要每日执行定时任务,但是如果每天都去人工执行,非常不方便,而且一般定时操作,都应该是在数据库压力不大时,一般是在夜间.所以我们需要创建定时作业来代替人工的执行定 ...
- SQL Server Alwayson创建代理作业注意事项
介绍 Always On 可用性组活动辅助功能包括支持在辅助副本上执行备份操作. 备份操作可能会给 I/O 和 CPU 带来很大的压力(使用备份压缩). 将备份负荷转移到已同步或正在同步的辅助副本后, ...
- 创建 Transact-SQL 作业步骤
创建 Transact-SQL 作业步骤 在对象资源管理器中,连接到 SQL Server 数据库引擎实例,再展开该实例. 展开"SQL Server 代理",创建一个新作业或右键 ...
随机推荐
- 兼容IE9以下的获取兄弟节点
function fileCheck(ele){ function getNextElement(node){ //兼容IE9以下的 获取兄弟节点 var NextElementNode = node ...
- 使用ABAP批量下载有道云笔记中的图片
Jerry喜欢用有道云笔记这款软件做自己的知识管理和知识体系的构建. 当您看到一篇好的有道云笔记分享时,可能会想将其精美的图片下载到本地.作为程序猿,我们不会去手动一张张下载.写个程序帮我们自动下载吧 ...
- topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
A题,熊孩子测视力,水题,题意就是判断一下两个数对应位不相同的数字有多少个. #include<bits/stdc++.h> using namespace std; class Bear ...
- uoj#300.【CTSC2017】吉夫特
题面:http://uoj.ac/problem/300 一道大水题,然而我并不知道$lucas$定理的推论.. $\binom{n}{m}$为奇数的充要条件是$n&m=n$.那么我们对于每个 ...
- js倒计时小插件(兼容大部分浏览器)
精确到天的倒计时 <script language="JavaScript"> <!-- // (c) Henryk Gajewski var urodz= ne ...
- 面试题-谈谈你对Java平台的理解
平台无关性 GC 语言特性 面向对象 类库 异常处理 一次编译到处运行 JVM如何加载Class文件 Java反射 ClassLoader 种类 双亲委派机制 loadcalss和forName
- CVE-2014-1767
[0x00].简介 CVE-2014-1767漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的double ...
- VS Code:设置多行注释快捷键
多行注释,也叫块注释. 如何查看,并修改VS Code中的多行注释快捷键呢? 1). 点击 首选项 - 键盘快捷方式 2). 在搜索框中输入 comment 3). 这个时候可以看到“切换块注释”的信 ...
- vscode的eslint插件不起作用
最近在用vue进行开发,但是vsCode中的eslint插件装上之后不起作用 1.vsCode打开“设置”,选择"settings.json" 2.输入一段脚本 "esl ...
- php 计算当天凌晨时间戳 以及获取其他常用时间戳
php 计算当日凌晨时间戳 以及获取其他常用时间戳(持续补充中...) 获取当天凌晨时间戳: echo strtotime(date('Y-m-d')); 以下再列举一些获取其他常用时间戳的方法 获取 ...