设为首页 收藏本站
查看: 954|回复: 0

[经验分享] SQL Server -- 作业(Job) 浅析1

[复制链接]

尚未签到

发表于 2018-10-14 07:07:55 | 显示全部楼层 |阅读模式
  作业介绍
  SQL SERVER的作业是一系列由SQLSERVER代理按顺序执行的指定操作。作业可以执行一系列活动,包括运行Transact-SQL脚本、命令行应用程序、Microsoft ActiveX脚本、IntegrationServices 包、Analysis Services 命令和查询或复制任务。作业可以运行重复任务或那些可计划的任务,它们可以通过生成警报来自动通知用户作业状态,从而极大地简化了SQL Server 管理[参见MSDN]。
  创建作业、删除作业、查看作业历史记录....等所有操作都可以通过SSMS管理工具GUI界面操作,有时候也确实挺方便的。但是当一个实例有多个作业或多个数据库实例时,通过图形化的界面去管理、维护作业也是个头痛的问题,对于SQL脚本与GUI界面管理维护作业熟优熟劣这个问题,只能说要看场合。下面主要介绍通过SQL脚本来管理、维护作业。
  作业分类
  创建作业时,往往需要指定作业类别,如果不指定新建作业类别,就会默认为“[未分类(本地)]”,如下截图所示:
DSC0000.png

  当然,你可以查看、添加、删除、修改作业分类。请看下面操作。
  1:查看作业分类
  Code Snippet
  --method 1:
  EXECmsdb.dbo.sp_help_category;
  GO
  --method 2:
  SELECT  category_id            ,--作业类别ID
  category_class         ,--类别中项目类型:1=作业2=警报 3=操作员
  category_type          ,--类别中类型:=本地、=多服务器、=无
  name                    --分类名称
  FROMmsdb.dbo.syscategories
  有兴趣的可以研究一下存储过程msdb.dbo.sp_help_category
  SETQUOTED_IDENTIFIER OFF
  SET ANSI_NULLS ON
  GO
  CREATEPROCEDUREsp_help_category
  @class  VARCHAR(8)  ='JOB',
  @type   VARCHAR(12)  =NULL,
  @name  sysname      =NULL,
  @suffixBIT         =0
  AS
  BEGIN
  DECLARE@retval        INT
  DECLARE@type_in       VARCHAR(12)
  DECLARE@category_type  INT
  DECLARE@category_classINT
  DECLARE@where_clause   NVARCHAR(255)
  DECLARE@cmd           NVARCHAR(255)
  SET NOCOUNT ON
  SELECT@class=LTRIM(RTRIM(@class))
  SELECT@type  =LTRIM(RTRIM(@type))
  SELECT@name  =LTRIM(RTRIM(@name))
  IF (@type='') SELECT@type=NULL
  IF (@name= N'') SELECT@name=NULL
  IF (@class='JOB') AND (@typeISNULL)
  SELECT@type_in='LOCAL'
  ELSE
  IF (@class'JOB') AND (@typeISNULL)
  SELECT@type_in='NONE'
  ELSE
  SELECT@type_in=@type
  EXECUTE@retval= sp_verify_category@class,
  @type_in,
  NULL,
  @category_class OUTPUT,
  @category_type  OUTPUT
  IF (@retval0)
  RETURN(1)
  IF (@suffix0)
  SELECT@suffix=1
  IF@nameISNOTNULLAND
  NOTEXISTS(SELECT*FROMmsdb.dbo.syscategories WHERE name =@name
  AND category_class=@category_class)
  BEGIN
  DECLARE@category_class_stringNVARCHAR(25)
  SET@category_class_string=CAST(@category_classASnvarchar(25))
  RAISERROR(14526, -1, -1, @name, @category_class_string)
  RETURN(1)
  END
  SELECT@where_clause= N'WHERE (category_class= '+CONVERT(NVARCHAR, @category_class) + N') '
  IF (@nameISNOTNULL)
  SELECT@where_clause=@where_clause+ N'AND (name = N'+QUOTENAME(@name, '''') + N') '
  IF (@typeISNOTNULL)
  SELECT@where_clause=@where_clause+ N'AND (category_type= '+CONVERT(NVARCHAR, @category_type) + N') '
  SELECT@cmd= N'SELECTcategory_id, '
  IF (@suffix=1)
  BEGIN
  SELECT@cmd=@cmd+ N'''category_type''= '
  SELECT@cmd=@cmd+ N'CASEcategory_type '
  SELECT@cmd=@cmd+ N'WHEN 0 THEN''NONE'''
  SELECT@cmd=@cmd+ N'WHEN 1 THEN''LOCAL'''
  SELECT@cmd=@cmd+ N'WHEN 2 THEN''MULTI-SERVER'''
  SELECT@cmd=@cmd+ N'WHEN 3 THEN''NONE'''
  SELECT@cmd=@cmd+ N'ELSEFORMATMESSAGE(14205) '
  SELECT@cmd=@cmd+ N'END, '
  END
  ELSE
  BEGIN
  SELECT@cmd=@cmd+ N'category_type,'
  END
  SELECT@cmd=@cmd+ N'name '
  SELECT@cmd=@cmd+ N'FROMmsdb.dbo.syscategories '
  EXECUTE (@cmd+@where_clause+ N'ORDER BYcategory_type, name')
  RETURN(@@error)
  END
  GO
  sp_help_category
  2:添加作业分类
  如下所示,添加一个叫"DBA_MONITORING"的作业分类
  Code Snippet
  EXECmsdb.dbo.sp_add_category
  @class=N'JOB',
  @type=N'LOCAL',
  @name=N'DBA_MONITORING' ;
  GO
  SELECT * FROMmsdb.dbo.syscategories WHERE NAME='DBA_MONITORING'
  category_id category_class category_type    name
  ------------------------- ------------- -------------
  102         1              1             DBA_MONITORING
  有兴趣的可以研究一下存储过程msdb.dbo.sp_add_category
  SET QUOTED_IDENTIFIER OFF
  SET ANSI_NULLS ON
  GO
  CREATEPROCEDUREsp_add_category
  @classVARCHAR(8)  ='JOB',
  @type  VARCHAR(12)  ='LOCAL',
  @name  sysname
  AS
  BEGIN
  DECLARE@retval         INT
  DECLARE@category_type  INT
  DECLARE@category_classINT
  SET NOCOUNT ON
  SELECT@class=LTRIM(RTRIM(@class))
  SELECT@type  =LTRIM(RTRIM(@type))
  SELECT@name  =LTRIM(RTRIM(@name))
  EXECUTE@retval= sp_verify_category @class,
  @type,
  @name,
  @category_class OUTPUT,
  @category_type  OUTPUT
  IF (@retval0)
  RETURN(1)
  IF (EXISTS (SELECT*
  FROM msdb.dbo.syscategories
  WHERE (category_class =@category_class)
  AND (name =@name)))
  BEGIN
  RAISERROR(14261, -1, -1, '@name', @name)
  RETURN(1)
  END
  INSERTINTOmsdb.dbo.syscategories (category_class, category_type, name)
  VALUES (@category_class, @category_type, @name)
  RETURN(@@error)
  END
  GO
  3:删除作业分类
  如下所示,删除一个叫"DBA_MONITORING" 的作业分类
  Code Snippet
  EXECmsdb.dbo.sp_delete_category
  @name=N'DBA_MONITORING',
  @class=N'JOB';
  GO
  有兴趣的可以研究一下存储过程msdb.dbo.sp_delete_category


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-621269-1-1.html 上篇帖子: SQL SERVER 2000个人版下载 下篇帖子: SQL Server -- How to fix Database goes to suspect mode
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表