sqlserver 作业调度(作业常用的几个步骤)
发布时间:2020-12-12 14:12:22 所属栏目:MsSql教程 来源:网络整理
导读:--【作业常用的几个步骤】EXEC msdb.dbo.sp_delete_jobEXEC msdb.dbo.sp_add_jobEXEC msdb.dbo.sp_add_jobstepEXEC msdb..sp_add_jobscheduleEXEC msdb.dbo.sp_add_jobserver EXEC msdb.dbo.sp_start_job--删除作业IF EXISTS (SELECT JOB_ID FROM MSDB.DBO.S
--【作业常用的几个步骤】 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 --删除作业 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,@freq_type=1,--仅执行一次 @active_start_date = NULL,格式为YYYYMMDD @active_start_time = 00000 --作业执行的开始时间,格式为HHMMSS --日调度 EXEC msdb..sp_add_jobschedule @job_id = @jobid,(0x1=指定的时间;0x4=多少分钟;0x8=多少小时)执行一次 @freq_subday_interval=1,格式为HHMMSS --周调度 EXEC msdb.dbo.sp_add_jobschedule @job_id = @jobid,@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,0x8=多少小时执行一次 @freq_subday_interval = 1,格式为HHMMSS --月调度(每X个月的每月几号) EXEC msdb.dbo.sp_add_jobschedule @job_id = @jobid,@freq_type = 16,--每月 @freq_recurrence_factor = 2,--每多少月执行一次,这里是每2个月 @freq_interval = 2,--在执行月的第几天执行,这里是第2天 @freq_subday_type = 0x8,格式为HHMMSS --月调度(每X个月的相对时间) EXEC msdb.dbo.sp_add_jobschedule @job_id = @jobid,@freq_type = 32,这里是每2个月 @freq_interval = 9,--在当月的那个时间执行,1~7=星期日至星期六,8=日,9=工作日,10=周末 @freq_relative_interval = 1,--在第几个相对时间执行,允许的值为1,2,4,8代表第1~4个相对时间,16表示最后一个相对时间 @freq_subday_type = 0x8,格式为HHMMSS --在特定时候执行的作业调度 EXEC msdb.dbo.sp_add_jobschedule @job_id = @jobid,@freq_type = 64 --64=在SQLServerAgent 服务启动时运行,128=计算机空闲时运行 ----------------------------------------------------------------------------------------------- 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |