您的位置:首页 > 数据库

sqlserver 作业调度(作业常用的几个步骤)

2016-12-26 19:55 260 查看
--【作业常用的几个步骤】
EXECmsdb.dbo.sp_delete_job
EXECmsdb.dbo.sp_add_job
EXECmsdb.dbo.sp_add_jobstep
EXECmsdb..sp_add_jobschedule
EXECmsdb.dbo.sp_add_jobserver
EXECmsdb.dbo.sp_start_job

--删除作业
IFEXISTS(SELECTJOB_IDFROMMSDB.DBO.SYSJOBS_VIEWWHERENAME=N'作业名称')
EXECUTEMSDB.DBO.SP_DELETE_JOB@JOB_NAME=N'作业名称'

--定义创建作业
DECLARE@jobiduniqueidentifier
EXECmsdb.dbo.sp_add_job
@job_name=N'作业名称',
@job_id=@jobidOUTPUT

--定义作业步骤
DECLARE@sqlnvarchar(400),@dbnamesysname
SELECT@dbname=DB_NAME(),--执行的数据库(当前)
@sql=N'作业步骤内容'--一般定义的是使用TSQL处理的作业,这里定义要执行的Transact-SQL语句
EXECmsdb.dbo.sp_add_jobstep
@job_id=@jobid,
@step_name=N'作业步骤名称',
@subsystem='TSQL',--步骤的类型,一般为TSQL
@database_name=@dbname,
@command=@sql

--创建调度(使用后面专门定义的几种作业调度模板)
EXECmsdb..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@servernamesysname
SET@servername=CONVERT(nvarchar(128),SERVERPROPERTY(N'ServerName'))--当前SQL实例
EXECmsdb.dbo.sp_add_jobserver
@job_id=@jobid,
@server_name=@servername

-----------------------------------------------------------------------------------------------
--调度模板定义sp_add_jobschedule

--只执行一次的作业调度
EXECmsdb..sp_add_jobschedule
@job_id=@jobid,
@name=N'调度名称',
@freq_type=1,--仅执行一次
@active_start_date=NULL,--作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD
@active_start_time=00000--作业执行的开始时间,格式为HHMMSS

--日调度
EXECmsdb..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

--周调度
EXECmsdb.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个月的每月几号)
EXECmsdb.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个月的相对时间)
EXECmsdb.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

--在特定时候执行的作业调度
EXECmsdb.dbo.sp_add_jobschedule
@job_id=@jobid,
@name=N'调度名称',
@freq_type=64--64=在SQLServerAgent服务启动时运行,128=计算机空闲时运行

-----------------------------------------------------------------------------------------------


IFEXISTS(SELECT*FROMDBO.SYSOBJECTSWHEREID=OBJECT_ID(N'[DBO].SP_AUTO_CREATEJOB')ANDOBJECTPROPERTY(ID,N'ISPROCEDURE')=1)
DROPPROCEDURE[DBO].SP_AUTO_CREATEJOB
GO

CREATEPROCEDUREDBO.SP_AUTO_CREATEJOB
@DBNAMEVARCHAR(100),--执行数据库
@JOBNAMEVARCHAR(100),
@EXECSQLNVARCHAR(4000)--执行语句
AS
PRINT'----作业:'+@JOBNAME
PRINT'----开始执行:'+@EXECSQL

BEGINTRANSACTION
DECLARE
@JOBIDUNIQUEIDENTIFIER,
@RETURNCODEINT
SELECT@RETURNCODE=0
BEGIN
IFEXISTS(SELECTJOB_IDFROMMSDB.DBO.SYSJOBS_VIEWWHERENAME=@JOBNAME)
EXECUTEMSDB.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=@JOBIDOUTPUT
IF(@@ERROR<>0OR@RETURNCODE<>0)GOTOQUITWITHROLLBACK

EXECUTE@RETURNCODE=MSDB.DBO.SP_ADD_JOBSTEP
@JOB_ID=@JOBID,
@STEP_NAME=N'STEP1',--步骤名称
@SUBSYSTEM='TSQL',--步骤的类型,一般为TSQL
@DATABASE_NAME=@DBNAME,--执行数据库
@COMMAND=@EXECSQL--执行语句
IF(@@ERROR<>0OR@RETURNCODE<>0)GOTOQUITWITHROLLBACK

EXECUTE@RETURNCODE=MSDB.DBO.SP_UPDATE_JOB
@JOB_ID=@JOBID,
@START_STEP_ID=1--作业中要执行的第一个步骤的标识号
IF(@@ERROR<>0OR@RETURNCODE<>0)GOTOQUITWITHROLLBACK

EXECUTE@RETURNCODE=MSDB.DBO.SP_ADD_JOBSERVER
@JOB_ID=@JOBID,
@SERVER_NAME=N'(LOCAL)'
IF(@@ERROR<>0OR@RETURNCODE<>0)GOTOQUITWITHROLLBACK

END
COMMITTRANSACTION

GOTOENDSAVE

QUITWITHROLLBACK:
IF(@@TRANCOUNT>0)
BEGIN
ROLLBACKTRANSACTION
RETURN1
END

ENDSAVE:
EXEC@RETURNCODE=MSDB.DBO.SP_START_JOB@JOB_ID=@JOBID--启动作业
RETURN@RETURNCODE





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐