zoukankan      html  css  js  c++  java
  • sqlserver 使用脚本创建作业

    1. --【作业常用的几个步骤】  
    2. EXEC msdb.dbo.sp_delete_job  
    3. EXEC msdb.dbo.sp_add_job  
    4. EXEC msdb.dbo.sp_add_jobstep  
    5. EXEC msdb..sp_add_jobschedule  
    6. EXEC msdb.dbo.sp_add_jobserver   
    7. EXEC msdb.dbo.sp_start_job  
    8.   
    9.   
    10.   
    11. --删除作业  
    12. IF  EXISTS (SELECT JOB_ID FROM MSDB.DBO.SYSJOBS_VIEW WHERE NAME =N'作业名称')   
    13. EXECUTE MSDB.DBO.SP_DELETE_JOB @JOB_NAME=N'作业名称'   
    14.   
    15. --定义创建作业  
    16. DECLARE @jobid uniqueidentifier  
    17. EXEC msdb.dbo.sp_add_job  
    18.         @job_name = N'作业名称',  
    19.         @job_id = @jobid OUTPUT  
    20.   
    21. --定义作业步骤  
    22. DECLARE @sql nvarchar(400),@dbname sysname  
    23. SELECT  @dbname=DB_NAME(), --执行的数据库(当前)  
    24.         @sql=N'作业步骤内容' --一般定义的是使用TSQL处理的作业,这里定义要执行的Transact-SQL语句  
    25. EXEC msdb.dbo.sp_add_jobstep  
    26.         @job_id = @jobid,  
    27.         @step_name = N'作业步骤名称',  
    28.         @subsystem = 'TSQL', --步骤的类型,一般为TSQL  
    29.         @database_name=@dbname,  
    30.         @command = @sql  
    31.   
    32. --创建调度(使用后面专门定义的几种作业调度模板)  
    33. EXEC msdb..sp_add_jobschedule  
    34.         @job_id = @jobid,  
    35.         @name = N'调度名称',  
    36.         @freq_type=4,                --每天  
    37.         @freq_interval=1,            --指定每多少天发生一次,这里是1天.  
    38.         @freq_subday_type=0x8,       --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次  
    39.         @freq_subday_interval=1,     --重复周期数,这里每小时执行一次  
    40.         @active_start_date = NULL,   --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD  
    41.         @active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD  
    42.         @active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS  
    43.         @active_end_time = 235959    --作业执行的停止时间,格式为HHMMSS  
    44.   
    45. --添加目标服务器  
    46. DECLARE @servername sysname  
    47. SET @servername=CONVERT(nvarchar(128),SERVERPROPERTY(N'ServerName'))--当前SQL实例  
    48. EXEC msdb.dbo.sp_add_jobserver   
    49.         @job_id = @jobid,  
    50.         @server_name = @servername   
    51.   
    52. -----------------------------------------------------------------------------------------------  
    53. --调度模板定义 sp_add_jobschedule  
    54.   
    55. --只执行一次的作业调度  
    56. EXEC msdb..sp_add_jobschedule  
    57.         @job_id = @jobid,  
    58.         @name = N'调度名称',  
    59.         @freq_type=1,                --仅执行一次  
    60.         @active_start_date = NULL,   --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD  
    61.         @active_start_time = 00000   --作业执行的开始时间,格式为HHMMSS  
    62.   
    63. --日调度  
    64. EXEC msdb..sp_add_jobschedule  
    65.         @job_id = @jobid,  
    66.         @name = N'调度名称',  
    67.         @freq_type=4,                --每天  
    68.         @freq_interval=1,            --指定每多少天发生一次,这里是1天.  
    69.         @freq_subday_type=0x8,       --重复方式,(0x1=指定的时间;0x4=多少分钟;0x8=多少小时)执行一次  
    70.         @freq_subday_interval=1,     --重复周期数,这里每小时执行一次  
    71.         @active_start_date = NULL,   --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD  
    72.         @active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD  
    73.         @active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS  
    74.         @active_end_time = 235959    --作业执行的停止时间,格式为HHMMSS  
    75.   
    76. --周调度  
    77. EXEC msdb.dbo.sp_add_jobschedule  
    78.         @job_id = @jobid,  
    79.         @name = N'调度名称',   
    80.         @freq_type = 8,              --每周  
    81.         @freq_recurrence_factor = 1, --每多少周执行一次,这里是每周  
    82.         @freq_interval = 62,         --在星期几执行,由POWER(2,N)表示,N的值为0~6,代表星期日~星期六,如果指定两个,则将值相加,例如,值为65表示在星期天和星期日执行(POWER(2,0)+POWER(2,6))  
    83.         @freq_subday_type = 0x8,     --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次  
    84.         @freq_subday_interval = 1,   --重复周期数,这里每小时执行一次  
    85.         @active_start_date = NULL,   --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD  
    86.         @active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD  
    87.         @active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS  
    88.         @active_end_time = 235959    --作业执行的停止时间,格式为HHMMSS  
    89.   
    90. --月调度(每X个月的每月几号)  
    91. EXEC msdb.dbo.sp_add_jobschedule  
    92.         @job_id = @jobid,  
    93.         @name = N'调度名称',   
    94.         @freq_type = 16,             --每月  
    95.         @freq_recurrence_factor = 2, --每多少月执行一次,这里是每2个月  
    96.         @freq_interval = 2,          --在执行月的第几天执行,这里是第2天  
    97.         @freq_subday_type = 0x8,     --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次  
    98.         @freq_subday_interval = 1,   --重复周期数,这里每小时执行一次  
    99.         @active_start_date = NULL,   --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD  
    100.         @active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD  
    101.         @active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS  
    102.         @active_end_time = 235959    --作业执行的停止时间,格式为HHMMSS  
    103.   
    104. --月调度(每X个月的相对时间)  
    105. EXEC msdb.dbo.sp_add_jobschedule  
    106.         @job_id = @jobid,  
    107.         @name = N'调度名称',   
    108.         @freq_type = 32,             --每月  
    109.         @freq_recurrence_factor = 2, --每多少月执行一次,这里是每2个月  
    110.         @freq_interval = 9,          --在当月的那个时间执行,1~7=星期日至星期六,8=日 ,9=工作日,10=周末  
    111.         @freq_relative_interval = 1, --在第几个相对时间执行,允许的值为1,2,4,8代表第1~4个相对时间,16表示最后一个相对时间  
    112.         @freq_subday_type = 0x8,     --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次  
    113.         @freq_subday_interval = 1,   --重复周期数,这里每小时执行一次  
    114.         @active_start_date = NULL,   --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD  
    115.         @active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD  
    116.         @active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS  
    117.         @active_end_time = 235959    --作业执行的停止时间,格式为HHMMSS  
    118.   
    119. --在特定时候执行的作业调度  
    120. EXEC msdb.dbo.sp_add_jobschedule  
    121.         @job_id = @jobid,  
    122.         @name = N'调度名称',   
    123.         @freq_type = 64     --64=在SQLServerAgent 服务启动时运行,128=计算机空闲时运行  
    124.   
    125. -----------------------------------------------------------------------------------------------  


    [sql] view plain copy
     
      1. IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[DBO].SP_AUTO_CREATEJOB') AND OBJECTPROPERTY(ID, N'ISPROCEDURE') = 1)  
      2. DROP PROCEDURE [DBO].SP_AUTO_CREATEJOB  
      3. GO  
      4.   
      5. CREATE PROCEDURE DBO.SP_AUTO_CREATEJOB  
      6.                         @DBNAME VARCHAR(100),    --执行数据库     
      7.                         @JOBNAME VARCHAR(100),       
      8.                         @EXECSQL NVARCHAR(4000) --执行语句        
      9. AS       
      10. PRINT '----作业 :'+@JOBNAME  
      11. PRINT '----开始执行:'  +@EXECSQL  
      12.   
      13. BEGIN TRANSACTION     
      14. DECLARE     
      15.     @JOBID UNIQUEIDENTIFIER,         
      16.     @RETURNCODE INT      
      17.     SELECT @RETURNCODE = 0                
      18. BEGIN           
      19.     IF  EXISTS (SELECT JOB_ID FROM MSDB.DBO.SYSJOBS_VIEW WHERE NAME =@JOBNAME)   
      20.     EXECUTE MSDB.DBO.SP_DELETE_JOB @JOB_NAME=@JOBNAME   
      21.             
      22.     EXECUTE @RETURNCODE = MSDB.DBO.SP_ADD_JOB       --返回值:0成功,1失败  
      23.                         @JOB_NAME = @JOBNAME,              
      24.                         @ENABLED = 1,               --状态。默认值为 1(启用),为 0 不启用  
      25.                         @OWNER_LOGIN_NAME = 'SA',   --拥有作业的登录名。默认值为 NULL,可解释为当前登录名  
      26.                         @JOB_ID = @JOBID OUTPUT                      
      27.     IF (@@ERROR <> 0 OR @RETURNCODE <> 0) GOTO QUITWITHROLLBACK    
      28.                      
      29.     EXECUTE @RETURNCODE = MSDB.DBO.SP_ADD_JOBSTEP   
      30.                         @JOB_ID = @JOBID,                
      31.                         @STEP_NAME = N'STEP1',      --步骤名称     
      32.                         @SUBSYSTEM = 'TSQL',        --步骤的类型,一般为TSQL           
      33.                         @DATABASE_NAME = @DBNAME,   --执行数据库                
      34.                         @COMMAND = @EXECSQL         --执行语句               
      35.     IF (@@ERROR <> 0 OR @RETURNCODE <> 0) GOTO QUITWITHROLLBACK       
      36.                    
      37.     EXECUTE @RETURNCODE = MSDB.DBO.SP_UPDATE_JOB   
      38.                         @JOB_ID = @JOBID,                 
      39.                         @START_STEP_ID = 1          --作业中要执行的第一个步骤的标识号  
      40.     IF (@@ERROR <> 0 OR @RETURNCODE <> 0) GOTO QUITWITHROLLBACK   
      41.                              
      42.     EXECUTE @RETURNCODE = MSDB.DBO.SP_ADD_JOBSERVER   
      43.                         @JOB_ID = @JOBID,                     
      44.                         @SERVER_NAME = N'(LOCAL)'                           
      45.     IF (@@ERROR <> 0 OR @RETURNCODE <> 0) GOTO QUITWITHROLLBACK      
      46.           
      47. END   
      48. COMMIT TRANSACTION    
      49.      
      50. GOTO ENDSAVE    
      51.                         
      52. QUITWITHROLLBACK:           
      53.     IF (@@TRANCOUNT > 0)     
      54.     BEGIN          
      55.         ROLLBACK TRANSACTION          
      56.         RETURN 1    
      57.     END     
      58.          
      59. ENDSAVE:         
      60. EXEC @RETURNCODE = MSDB.DBO.SP_START_JOB @JOB_ID = @JOBID  --启动作业   
      61. RETURN @RETURNCODE    
  • 相关阅读:
    操作系统 第二章 进程管理
    操作系统 第一章 概述(补充)
    第六次博客作业——团队总结
    专题(十三)watch
    专题(十二)find 查找
    JVM 排查工具介绍(二)Memory Analyzer 堆内存分析工具
    Linux 学习笔记之(二)curl命令
    centos openjdk 11 安装软件包获取方式
    软件工程课程总结
    小黄衫!又一次?
  • 原文地址:https://www.cnblogs.com/footleg/p/7134048.html
Copyright © 2011-2022 走看看