SQL SERVER数据库的作业的脚本及存储过程
IFEXISTS(SELECTname FROMsysobjects WHEREname=N'cg_DoBackupJob' ANDtype='P') DROPPROCEDUREcg_DoBackupJob GO CREATEPROCEDURE[cg_DoBackupJob] @DataBaseNamevarchar(100), @FileHeadvarchar(50), @isFullBackupbit,--0差量备份1完整备份 @FolderPathvarchar(50)='f:\db_backup\', @BackNamevarchar(100)='unknown',--描述字串 @isAppendMediabit=1--0覆盖媒体1追加到媒体 AS declare@filePathvarchar(150) declare@sqlvarchar(1000) select@filePath=@FolderPath+@FileHead+'_'+case@isFullBackupwhen1then'FullBackup'when0then'DifferBackup'end+'_'+convert(nvarchar(11),getdate(),112) +case@isFullBackupwhen1then''when0thenreplace(convert(nvarchar(15),getdate(),114),':','')end --print(@filePath) select@sql='BACKUPDATABASE['+@DataBaseName+']TODISK=''' +@filePath+'''WITH' +case@isAppendMediawhen0then'INIT'when1then'NOINIT'end +',NOUNLOAD,' +case@isFullBackupwhen0then'DIFFERENTIAL,'when1then''end +'NAME=N'''+@BackName+'备份'',NOSKIP,STATS=10,NOFORMAT' execute(@sql) --print(@sql) GO --============================================= --exampletoexecutethestoreprocedure --============================================= EXECUTEcg_DoBackupJob'cg_access911','access911',1 GO
用系统存储过程去创建作业,代码如下:
BEGINTRANSACTION DECLARE@JobIDBINARY(16) DECLARE@ReturnCodeINT SELECT@ReturnCode=0 IF(SELECTCOUNT(*)FROMmsdb.dbo.syscategoriesWHEREname=N'[Uncategorized(Local)]')<1 EXECUTEmsdb.dbo.sp_add_category@name=N'[Uncategorized(Local)]' --删除同名的警报(如果有的话)。 SELECT@JobID=job_id FROMmsdb.dbo.sysjobs WHERE(name=N'access911_每2周备份一次') IF(@JobIDISNOTNULL) BEGIN --检查此作业是否为多重服务器作业 IF(EXISTS(SELECT* FROMmsdb.dbo.sysjobservers WHERE(job_id=@JobID)AND(server_id<>0))) BEGIN --已经存在,因而终止脚本 RAISERROR(N'无法导入作业“access911_每2周备份一次”,因为已经有相同名称的多重服务器作业。',16,1) GOTOQuitWithRollback END ELSE --删除[本地]作业 EXECUTEmsdb.dbo.sp_delete_job@job_name=N'access911_每2周备份一次' SELECT@JobID=NULL END BEGIN --添加作业 EXECUTE@ReturnCode=msdb.dbo.sp_add_job@job_id=@JobIDOUTPUT,@job_name=N'access911_每2周备份一次',@owner_login_name=N'Access911\access911',@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<>0OR@ReturnCode<>0)GOTOQuitWithRollback --添加作业步骤 EXECUTE@ReturnCode=msdb.dbo.sp_add_jobstep@job_id=@JobID,@step_id=1,@step_name=N'2周备份',@command=N'EXECUTEcg_DoBackupJob''a9SupperDatabase'',''a9SupperDatabase'',1 ',@database_name=N'master',@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<>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_jobschedule@job_id=@JobID,@name=N'diaodu',@enabled=1,@freq_type=8,@active_start_date=20061009,@active_start_time=0,@freq_interval=64,@freq_subday_type=1,@freq_subday_interval=0,@freq_relative_interval=0,@freq_recurrence_factor=2,@active_end_date=99991231,@active_end_time=235959 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)ROLLBACKTRANSACTION EndSave:
Transact-SQL参考
sp_add_jobschedule 创建作业调度。 语法 sp_add_jobschedule[@job_id=]job_id,|[@job_name=]'job_name', [@name=]'name' [,[@enabled=]enabled] [,[@freq_type=]freq_type] [,[@freq_interval=]freq_interval] [,[@freq_subday_type=]freq_subday_type] [,[@freq_subday_interval=]freq_subday_interval] [,[@freq_relative_interval=]freq_relative_interval] [,[@freq_recurrence_factor=]freq_recurrence_factor] [,[@active_start_date=]active_start_date] [,[@active_end_date=]active_end_date] [,[@active_start_time=]active_start_time] [,[@active_end_time=]active_end_time] 参数 [@jobid=]job_id 将向其中添加调度的作业的作业标识号。job_id的数据类型为uniqueidentifier,默认设置为NULL。 [@job_name=]'job_name' 作业的名称,调度即添加到该作业中。job_name的数据类型为sysname,默认设置为NULL。 说明必须指定job_id或job_name,但不能两个都指定。 [@name=]'name' 调度的名称。name的数据类型为sysname,没有默认设置。 [@enabled=]enabled 指明调度的当前状态。enabled的数据类型为tinyint,默认设置为1(启用)。如果为0,则不启用调度。禁用该调度时,不运行作业。 [@freq_type=]freq_type 用于指明何时将执行作业的值。freq_type的数据类型为int,默认设置为0,可以是下列值之一。 值描述 1一次 4每天 8每周 16每月 32每月,与freqinterval相关 64当SQLServerAgent服务启动时运行 128计算机空闲时运行 [@freq_interval=]freq_interval 作业执行的天数。freq_interval的数据类型为int,默认设置为0,依赖于freq_type的值。 freq_type的值对freq_interval的影响 1(一次)未使用freq_interval。 4(每天)每个freq_interval日。 8(每周)freq_interval为下面的一个或多个值(与OR逻辑运算符结合使用): 1=星期日 2=星期一 4=星期二 8=星期三 16=星期四 32=星期五 64=星期六 16(每月)每月的freq_interval日。 32(每月相对)freq_interval为下列值之一: 1=星期日 2=星期一 3=星期二 4=星期三 5=星期四 6=星期五 7=星期六 8=日 9=工作日 10=周末 64(当SQLServerAgent服务启动时)未使用freq_interval。 128未使用freq_interval。 [@freq_subday_type=]freq_subday_type 指定freq_subday_interval的单位。freq_subday_type为int类型,其默认值为0,且可以取下列值之一。 值描述(单位) 0x1在指定的时间 0x4分钟 0x8小时 [@freq_subday_interval=]freq_subday_interval 作业每次执行之间要出现的freq_subday_type周期数。freq_subday_interval的数据类型为int,默认设置为0。 [@freq_relative_interval=]freq_relative_interval 如果freq_interval是32(每月相对),则为每月中已调度作业的freq_interval的发生情况。freq_relative_interval的数据类型为int,默认设置为0,可以是下列值之一。 值描述(单位) 1第一页 2秒 4第三个 8第四个 16最后一页 [@freq_recurrence_factor=]freq_recurrence_factor 作业的已调度执行之间的周数或月数。只有当freq_type是8、16或32时,才使用freq_recurrence_factor。freq_recurrence_factor的数据类型为int,默认设置为0。 [@active_start_date=]active_start_date 作业可开始执行的日期。active_start_date的数据类型为int,默认设置为NULL,该值表示当天的日期。日期的格式为YYYYMMDD。如果active_start_date不为NULL,则日期必须大于或等于19900101。 [@active_end_date=]active_end_date 作业可停止执行的日期。active_end_date的数据类型为int,默认设置为99991231,该值表示9999年12月31日。格式为YYYYMMDD。 [@active_start_time=]active_start_time 在active_start_date和active_end_date之间的任何一天开始执行作业的时间。active_start_time的数据类型为int,默认设置为000000,该值表示24小时制的上午12:00:00,并且必须使用格式HHMMSS进行输入。 [@active_end_time=]active_end_time 在active_start_date和active_end_date之间的任何一天停止执行作业的时间。active_end_time的数据类型为int,默认设置为235959,该值表示24小时制的下午11:59:59,并且必须使用格式HHMMSS进行输入。 返回代码值 0(成功)或1(失败) 结果集 无 注释 SQLServer企业管理器提供易于使用的图形方法来管理作业,建议使用该方法创建和管理作业基本结构。 权限 执行权限默认授予public角色。 示例 此示例假设已经创建用来备份数据库的NightlyBackup作业。它将作业添加到名为ScheduledBackup的调度中,并且在每天上午1:00执行。 USEmsdb EXECsp_add_jobschedule@job_name='NightlyBackup', @name='ScheduledBackup', @freq_type=4,--daily @freq_interval=1, @active_start_time=10000 请参见 修改和查看作业 sp_delete_jobschedule sp_help_jobschedule sp_update_jobschedule 系统存储过程
本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。