none
sql Agent Job Daily Information RRS feed

  • 问题

  • 请教:怎么捕获Agent Job 中 某一个作业执行失败捕获的错误信息 例如: 作业名称时 daily 执行过程中出现错误,错误信息为:日期  2011-11-22 8:57:49
    日志  作业历史记录 (daily)

    步骤 ID  1
    服务器    SDB
    作业名称  daily
    步骤名称  job1
    持续时间  00:01:10
    SQL 严重性  0
    SQL 消息 ID  0
    已通过电子邮件通知的操作员  
    已通过网络发送通知的操作员  
    已通过寻呼通知的操作员  
    重试次数  0

    消息
    已以用户 SDB\SYSTEM 的身份执行。 Microsoft (R) SQL Server 执行包实用工具  Version 10.50.2500.0 for 64-bit  版权所有 (C) Microsoft Corporation 2010。保留所有权利。    开始时间:  8:57:49  错误: 2011-11-22 08:58:36.57     代码: 0xC0202009     源: Load T_INDIV_CONTRACT_BENE OLE DB Destination [27]     说明: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80004005。  已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 说明:“违反了 PRIMARY KEY 约束“PK_T_CONTRACT_LOG”。不能在对象“dbo.T_CONTRACT_LOG”中插入重复键。重复键值为 (0000000111, 0100005566)。”。  错误结束  错误: 2011-11-22 08:58:36.57

    我想这样的错误信息以邮件的形式发送出来,目前我不知道怎么去捕获作业执行失败时候错误的历史纪录信息

     


    星光总能为我指引方向
    2011年11月22日 1:50

答案

全部回复

  • Better to build it in ssis package.
    2011年11月22日 2:24
  • WHY ! Build it in ssis  package    I don't think so
    星光总能为我指引方向
    2011年11月22日 2:39
  • 如果以上大家没有明白我的意思,我举一个具体实例 如:

    CREATE TABLE TEST_ID(ID INT PRIMARY KEY,NAME VARCHAR)
    INSERT INTO TEST_ID SELECT 1,'W'

    /*------------------------
    select * from TEST_ID
    ------------------------*/
    ID          NAME
    ----------- ----
    1           W

    (1 行受影响)

    那么如果我再次执行一次语句 INSERT INTO TEST_ID SELECT 1,'W'

    肯定会报 键值重复 形式如下:

    BEGIN TRY
    INSERT INTO TEST_ID SELECT 1,'W'
    END TRY
    BEGIN CATCH
    INSERT INTO ErrorLog SELECT ERROR_NUMBER(),ERROR_SEVERITY() ,
    ERROR_STATE() ,
    ERROR_PROCEDURE(),
    ERROR_LINE() ,
    ERROR_MESSAGE()
    END CATCH
    /*------------------------
    SELECT * FROM ErrorLog
    ------------------------*/
    Error_Number Error_SEVERITY ERROR_State Error_Procedure Error_Line  Error_Message
    ------------ -------------- ----------- --------------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    2627         14             1           NULL            2           违反了 PRIMARY KEY 约束“PK__TEST_ID__3214EC2735DCF99B”。不能在对象“dbo.TEST_ID”中插入重复键。重复键值为 (1)。

    (1 行受影响)

    那么我就是要把这段错误信息,录入数据库中,之后以邮件形式发送出来: 问题就在于,之前的应用程序没有 BEGIN   CATCH 这样的块,很难去捕获错误信息录入到数据表,最后通过邮件形式发送出来,所以我怎么改造能可以把错误信息录入到数据表中?

    这回大家明白我的意图了


    星光总能为我指引方向
    2011年11月22日 2:56
  • 多谢大家,目前我已经有思路去解决这样的问题了。


    星光总能为我指引方向
    2011年11月22日 3:05