T-SQL语句实现数据库备份与还原功能(三)

 4.--创建作业
   

  调用示例


--每月执行的作业 
  exec p_createjob @jobname=’mm’,@sql=’select * from syscolumns’,@freqtype=’month’ 
  --每周执行的作业 
  exec p_createjob @jobname=’ww’,@sql=’select * from syscolumns’,@freqtype=’week’ 
  --每日执行的作业 
  exec p_createjob @jobname=’a’,@sql=’select * from syscolumns’ 
  --每日执行的作业,每天隔4小时重复的作业 
  exec p_createjob @jobname=’b’,@sql=’select * from syscolumns’,@fsinterval=4 


if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[p_createjob]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1) 
  drop procedure [dbo].[p_createjob] 
  GO 
  create proc p_createjob 
  @jobname varchar(100), --作业名称 
  @sql varchar(8000), --要执行的命令 
  @dbname sysname=’’, --默认为当前的数据库名 
  @freqtype varchar(6)=’day’, --时间周期,month 月,week 周,day 日 
  @fsinterval int=1, --相对于每日的重复次数 
  @time int=170000 --开始执行时间,对于重复执行的作业,将从0点到23:59分 
  as 
  if isnull(@dbname,’’)=’’ set @dbname=db_name() 
  --创建作业 
  exec msdb..sp_add_job @job_name=@jobname 
  --创建作业步骤 
  exec msdb..sp_add_jobstep @job_name=@jobname, 
  @step_name = ’数据处理’, 
  @subsystem = ’TSQL’, 
  @database_name=@dbname, 
  @command = @sql, 
  @retry_attempts = 5, --重试次数 
  @retry_interval = 5 --重试间隔 
  --创建调度 
  declare @ftype int,@fstype int,@ffactor int 
  select @ftype=case @freqtype when ’day’ then 4 
  when ’week’ then 8 
  when ’month’ then 16 end 
  ,@fstype=case @fsinterval when 1 then 0 else 8 end 
  if @fsinterval<>1 set @time=0 
  set @ffactor=case @freqtype when ’day’ then 0 else 1 end 
  exec msdb..sp_add_jobschedule @job_name=@jobname, 
  @name = ’时间安排’, 
  @freq_type=@ftype , --每天,8 每周,16 每月 
  @freq_interval=1, --重复执行次数 
  @freq_subday_type=@fstype, --是否重复执行 
  @freq_subday_interval=@fsinterval, --重复周期 
  @freq_recurrence_factor=@ffactor, 
  @active_start_time=@time --下午17:00:00分执行 
  go 

  应用案例--备份方案:

  完整备份(每个星期天一次)+差异备份(每天备份一次)+日志备份(每2小时备份一次)

  调用上面的存储过程来实现

declare @sql varchar(8000) 
  --完整备份(每个星期天一次) 
  set @sql=’exec p_backupdb @dbname=’’要备份的数据库名’’’ 
  exec p_createjob @jobname=’每周备份’,@sql,@freqtype=’week’ 
  --差异备份(每天备份一次) 
  set @sql=’exec p_backupdb @dbname=’’要备份的数据库名’’,@bktype=’DF’’ 
  exec p_createjob @jobname=’每天差异备份’,@sql,@freqtype=’day’ 
  --日志备份(每2小时备份一次) 
  set @sql=’exec p_backupdb @dbname=’’要备份的数据库名’’,@bktype=’LOG’’ 
  exec p_createjob @jobname=’每2小时日志备份’,@sql,@freqtype=’day’,@fsinterval=2 

posted @ 2008-07-24 17:13  浪子の无悔  阅读(481)  评论(0编辑  收藏  举报