SqlServer代理作业
来源:互联网 发布:php forreach 编辑:程序博客网 时间:2024/05/17 06:24
最近一直在学习SqlServer 作业方面的知识,总结一下。
一:作业存在的库。
msdb use msdb
Msdb数据库是代理服务数据库,为其报警、任务调度和记录操作员的操作提供存储空间。
二:查看作业分类
EXEC msdb.dbo.sp_help_category; SELECT category_id ,--作业类别ID category_class ,--类别中项目类型:1=作业2=警报 3=操作员 category_type ,--类别中类型:=本地、=多服务器、=无 name --分类名称 from msdb.dbo.syscategories
三:作业常用的几个步骤:
EXEC msdb.dbo.sp_delete_job EXEC msdb.dbo.sp_add_job EXEC msdb.dbo.sp_add_jobstep EXEC msdb..sp_add_jobschedule EXEC msdb.dbo.sp_add_jobserver EXEC msdb.dbo.sp_start_job四:写一个简单的案例:
begin transaction--申明变量declare @ReturnCode INT--赋值select @ReturnCode = 0--如果不包含 if not exists (select * 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)]' --上一条语句是否有错 @ReturnCode 是否赋值 QuitWithRollback 回滚事务 if (@@ERROR<>0 or @ReturnCode<>0) GOTO QuitWithRollback end declare @jobId BINARY(16) --名字 第一步 sp_add_job EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Proc_SyncBaseData', @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)]', --登录名称 @jobId有返回值 @owner_login_name=N'sa', @job_id = @jobId OUTPUT IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback --第二部 sp_add_jobstep exec @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Proc_SyncBaseData', --作业名称 @step_id=1, @cmdexec_success_code=0, @on_success_action=3, @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 Proc_SyncBaseData', --执行的作业 @database_name=N'TOPK_DATA', @flags=0 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback --处理基础数据 exec @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'处理基础数据', @step_id=2, @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'DECLARE @num INT=1 @database_name=N'TOPK_DATA', --数据库名称 @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'1', @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=1, @freq_subday_interval=0, @freq_relative_interval=0, @freq_recurrence_factor=0, @active_start_date=20151231, @active_end_date=99991231, @active_start_time=10000, @active_end_time=235959, @schedule_uid=N'81392edd-5c9d-4bf0-a306-4ff22a0920cf' 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 EndSaveQuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTIONEndSave:
--删除作业 IF EXISTS (SELECT JOB_ID FROM MSDB.DBO.SYSJOBS_VIEW WHERE NAME =N'作业名称') EXECUTE MSDB.DBO.SP_DELETE_JOB @JOB_NAME=N'作业名称' --定义创建作业 DECLARE @jobid uniqueidentifier EXEC msdb.dbo.sp_add_job @job_name = N'作业名称', @job_id = @jobid OUTPUT --定义作业步骤 DECLARE @sql nvarchar(400),@dbname sysname SELECT @dbname=DB_NAME(), --执行的数据库(当前) @sql=N'作业步骤内容' --一般定义的是使用TSQL处理的作业,这里定义要执行的Transact-SQL语句 EXEC msdb.dbo.sp_add_jobstep @job_id = @jobid, @step_name = N'作业步骤名称', @subsystem = 'TSQL', --步骤的类型,一般为TSQL @database_name=@dbname, @command = @sql --创建调度(使用后面专门定义的几种作业调度模板) EXEC msdb..sp_add_jobschedule @job_id = @jobid, @name = N'调度名称', @freq_type=4, --每天 @freq_interval=1, --指定每多少天发生一次,这里是1天. @freq_subday_type=0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次 @freq_subday_interval=1, --重复周期数,这里每小时执行一次 @active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD @active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD @active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS @active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS --添加目标服务器 DECLARE @servername sysname SET @servername=CONVERT(nvarchar(128),SERVERPROPERTY(N'ServerName'))--当前SQL实例 EXEC msdb.dbo.sp_add_jobserver @job_id = @jobid, @server_name = @servername ----------------------------------------------------------------------------------------------- --调度模板定义 sp_add_jobschedule --只执行一次的作业调度 EXEC msdb..sp_add_jobschedule @job_id = @jobid, @name = N'调度名称', @freq_type=1, --仅执行一次 @active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD @active_start_time = 00000 --作业执行的开始时间,格式为HHMMSS --日调度 EXEC msdb..sp_add_jobschedule @job_id = @jobid, @name = N'调度名称', @freq_type=4, --每天 @freq_interval=1, --指定每多少天发生一次,这里是1天. @freq_subday_type=0x8, --重复方式,(0x1=指定的时间;0x4=多少分钟;0x8=多少小时)执行一次 @freq_subday_interval=1, --重复周期数,这里每小时执行一次 @active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD @active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD @active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS @active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS --周调度 EXEC msdb.dbo.sp_add_jobschedule @job_id = @jobid, @name = N'调度名称', @freq_type = 8, --每周 @freq_recurrence_factor = 1, --每多少周执行一次,这里是每周 @freq_interval = 62, --在星期几执行,由POWER(2,N)表示,N的值为0~6,代表星期日~星期六,如果指定两个,则将值相加,例如,值为65表示在星期天和星期日执行(POWER(2,0)+POWER(2,6)) @freq_subday_type = 0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次 @freq_subday_interval = 1, --重复周期数,这里每小时执行一次 @active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD @active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD @active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS @active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS --月调度(每X个月的每月几号) EXEC msdb.dbo.sp_add_jobschedule @job_id = @jobid, @name = N'调度名称', @freq_type = 16, --每月 @freq_recurrence_factor = 2, --每多少月执行一次,这里是每2个月 @freq_interval = 2, --在执行月的第几天执行,这里是第2天 @freq_subday_type = 0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次 @freq_subday_interval = 1, --重复周期数,这里每小时执行一次 @active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD @active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD @active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS @active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS --月调度(每X个月的相对时间) EXEC msdb.dbo.sp_add_jobschedule @job_id = @jobid, @name = N'调度名称', @freq_type = 32, --每月 @freq_recurrence_factor = 2, --每多少月执行一次,这里是每2个月 @freq_interval = 9, --在当月的那个时间执行,1~7=星期日至星期六,8=日 ,9=工作日,10=周末 @freq_relative_interval = 1, --在第几个相对时间执行,允许的值为1,2,4,8代表第1~4个相对时间,16表示最后一个相对时间 @freq_subday_type = 0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次 @freq_subday_interval = 1, --重复周期数,这里每小时执行一次 @active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD @active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD @active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS @active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS --在特定时候执行的作业调度 EXEC msdb.dbo.sp_add_jobschedule @job_id = @jobid, @name = N'调度名称', @freq_type = 64 --64=在SQLServerAgent 服务启动时运行,128=计算机空闲时运行 ----------------------------------------------------------------------------------------------- [sql] view plain copy在CODE上查看代码片派生到我的代码片 IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[DBO].SP_AUTO_CREATEJOB') AND OBJECTPROPERTY(ID, N'ISPROCEDURE') = 1) DROP PROCEDURE [DBO].SP_AUTO_CREATEJOB GO CREATE PROCEDURE DBO.SP_AUTO_CREATEJOB @DBNAME VARCHAR(100), --执行数据库 @JOBNAME VARCHAR(100), @EXECSQL NVARCHAR(4000) --执行语句 AS PRINT '----作业 :'+@JOBNAME PRINT '----开始执行:' +@EXECSQL BEGIN TRANSACTION DECLARE @JOBID UNIQUEIDENTIFIER, @RETURNCODE INT SELECT @RETURNCODE = 0 BEGIN IF EXISTS (SELECT JOB_ID FROM MSDB.DBO.SYSJOBS_VIEW WHERE NAME =@JOBNAME) EXECUTE MSDB.DBO.SP_DELETE_JOB @JOB_NAME=@JOBNAME EXECUTE @RETURNCODE = MSDB.DBO.SP_ADD_JOB --返回值:0成功,1失败 @JOB_NAME = @JOBNAME, @ENABLED = 1, --状态。默认值为 1(启用),为 0 不启用 @OWNER_LOGIN_NAME = 'SA', --拥有作业的登录名。默认值为 NULL,可解释为当前登录名 @JOB_ID = @JOBID OUTPUT IF (@@ERROR <> 0 OR @RETURNCODE <> 0) GOTO QUITWITHROLLBACK EXECUTE @RETURNCODE = MSDB.DBO.SP_ADD_JOBSTEP @JOB_ID = @JOBID, @STEP_NAME = N'STEP1', --步骤名称 @SUBSYSTEM = 'TSQL', --步骤的类型,一般为TSQL @DATABASE_NAME = @DBNAME, --执行数据库 @COMMAND = @EXECSQL --执行语句 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_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) BEGIN ROLLBACK TRANSACTION RETURN 1 END ENDSAVE: EXEC @RETURNCODE = MSDB.DBO.SP_START_JOB @JOB_ID = @JOBID --启动作业 RETURN @RETURNCODE
创建作业的步骤:
创建作业的步骤一般如下所示:
- 执行 sp_add_job 来创建作业。
执行 sp_add_jobstep 来创建一个或多个作业步骤。
执行 sp_add_schedule 来创建计划。
执行 sp_attach_schedule 将计划附加到作业。
执行 sp_add_jobserver 来设置作业的服务器。
阅读全文
0 0
- SQLServer 代理作业
- SQLserver创建代理作业
- SqlServer代理作业
- 查看SQLServer 代理作业的历史信息
- SqlServer中代理作业实现总结
- 【Sql码农】Sqlserver代理所有作业出现挂起现象
- sqlserver 使用脚本创建Sql Server代理作业
- SQLServer代理新建或者编辑作业报错
- sqlserver作业
- SSIS实践入门2:批量包的调度和SQLServer代理作业配置
- SQLServer 手动创建作业
- SqlServer启动作业计划
- SQLServer删除复制作业
- SqlServer创建作业流程
- haproxy代理sqlserver
- nagios监控sqlserver作业运行
- sqlserver作业设置定时任务
- SqlServer发送邮件,定时作业
- Delphi中GDI+和ImageList使用的正确姿势
- 在mysql中,多个CSV文件导入到一个表的方法
- 14个你可能不知道的JavaScript调试技巧
- 手把手教你webpack3(3)入口(多入口)entry
- 前端学习心得-javascript设计模式与开发实践-命令封装模式
- SqlServer代理作业
- 大数据平台建设经验
- 给Django日志加上request_id
- 对于Java后端技术自己做的还不够好!更多Java学习平台请看这里!
- Openwrt 之 Makefile框架分析
- 关于Java手机号验证
- Css的样式的引入与选择器
- img加载错误设置默认图片
- 【arm】ubuntu mate下配置qt与opencv最快捷的方法