• T-SQL创建作业


    /*1.--创建作业
    
    */
    
    /*--调用示例
    
    --每月执行的作业 
    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
    
    /*--应用案例2
    
    生产数据核心库:PRODUCE
    
    备份方案如下: 
    1.设置三个作业,分别对PRODUCE库进行每日备份,每周备份,每月备份 
    2.新建三个新库,分别命名为:每日备份,每周备份,每月备份 
    3.建立三个作业,分别把三个备份库还原到以上的三个新库。
    
    目的:当用户在produce库中有任何的数据丢失时,均可以从上面的三个备份库中导入相应的TABLE数据。 
    --*/
    
    declare @sql varchar(8000)
    
    --1.建立每月备份和生成月备份数据库的作业,每月每1天下午16:40分进行: 
    set @sql=' 
    declare @path nvarchar(260),@fname nvarchar(100) 
    set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_m.bak'' 
    set @path=dbo.f_getdbpath(null)+@fname
    
    --备份 
    exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname
    
    --根据备份生成每月新库 
    exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_月''
    
    --为周数据库恢复准备基础数据库 
    exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_周'',@retype=''DBNOR''
    
    --为日数据库恢复准备基础数据库 
    exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_日'',@retype=''DBNOR'' 
    ' 
    exec p_createjob @jobname='每月备份',@sql,@freqtype='month',@time=164000
    
    --2.建立每周差异备份和生成周备份数据库的作业,每周日下午17:00分进行: 
    set @sql=' 
    declare @path nvarchar(260),@fname nvarchar(100) 
    set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_w.bak'' 
    set @path=dbo.f_getdbpath(null)+@fname
    
    --差异备份 
    exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname,@bktype=''DF''
    
    --差异恢复周数据库 
    exec p_backupdb @bkfile=@path,@dbname=''PRODUCE_周'',@retype=''DF'' 
    ' 
    exec p_createjob @jobname='每周差异备份',@sql,@freqtype='week',@time=170000
    
    --3.建立每日日志备份和生成日备份数据库的作业,每周日下午17:15分进行: 
    set @sql=' 
    declare @path nvarchar(260),@fname nvarchar(100) 
    set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_l.bak'' 
    set @path=dbo.f_getdbpath(null)+@fname
    
    --日志备份 
    exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname,@bktype=''LOG''
    
    --日志恢复日数据库 
    exec p_backupdb @bkfile=@path,@dbname=''PRODUCE_日'',@retype=''LOG'' 
    ' 
    exec p_createjob @jobname='每周差异备份',@sql,@freqtype='day',@time=171500 
  • 相关阅读:
    sync.waitGroup的wait可以多次wait,同时通知
    广播与服务(2)
    Android中的广播与服务(包含代码)
    Android的Activity的页面跳转和数据传递
    Android基础4(get、post乱码解决、Asynchttpclient的GET_POST访问网络、上传文件、多线程下载、多线程下载的Android移植、XUtils实现多线程下载)
    Android3的知识点补充
    Android基础3(数据库创建、增删改查、事务、listView)
    Android基础2(包含测试、保存数据、获取目录等)
    关于Android的基础概念
    c++与c几点比较
  • 原文地址:https://www.cnblogs.com/xiangzhong/p/4255251.html
Copyright © 2020-2023  润新知