2

我们正在使用内部工具监控数据库作业的执行,该工具需要在作业完成后调用 URL。

对于我们的 SQL 作业,我们使用自定义函数(可在此处找到)创建一个MSXML2.ServerXMLHTTP.3.0对象来发送 URL 请求。

我们的作业每 5 分钟运行一次,因此大约每 5 分钟就有一次 URL 调用。
在 SQL Server 2005 和 Win2k3 下,这个解决方案可以完美运行几年。
在我们最近将作业迁移到 SQL Server 2008(也包括 Win2k3)后,此 URL 调用工作了大约 3 天,然后失败。
解决这个问题的解决方案是重启服务器(重启sql server服务不起作用),所以我建议一些内存泄漏。但是我确实不知道如何调试此内存泄漏-事件日志中没有错误消息或没有日志文件,等等。

自定义函数的代码(Adam Mechanic 的属性 - 见上文)是:

BEGIN   
  DECLARE @Object INT
  DECLARE @Return TINYINT
  DECLARE @Valid BIT
  SET @Valid = 0 --default to false
  --create the XMLHTTP object
  EXEC @Return = sp_oacreate 'MSXML2.ServerXMLHTTP.3.0', @Object OUTPUT 

  IF @Return = 0
  BEGIN 
    DECLARE @Method VARCHAR(350)
    --define setTimeouts method
    --Resolve, Connect, Send, Receive
    SET @Method = 'setTimeouts(45000, 45000, 45000, 45000)'
    --set the timeouts      
    EXEC @Return = sp_oamethod @Object, @Method

    IF @Return = 0
    BEGIN
      --define open method
      SET @Method = 'open("GET", "' + @URL + '", false)'
      --Open the connection
      EXEC @Return = sp_oamethod @Object, @Method
    END         

    IF @Return = 0      
    BEGIN   
      --SEND the request
      EXEC @Return = sp_oamethod @Object, 'send()'
    END     

    IF @Return = 0
    BEGIN           
      DECLARE @Output INT
      EXEC @Return = sp_oamethod @Object, 'status', @Output OUTPUT
      IF @Output = 200
      BEGIN         
        SET @Valid = 1
      END
    END
  END

  --destroy the object
  EXEC sp_oadestroy @Object
  RETURN (@Valid)
END

到目前为止我已经调试过了,我知道

--define open method
SET @Method = 'open("GET", "' + @URL + '", false)'              
--Open the connection           
EXEC @Return = sp_oamethod @Object, @Method

失败。

非常感谢任何线索。

4

0 回答 0