我们正在使用内部工具监控数据库作业的执行,该工具在作业完成后需要进行URL调用。
对于我们的SQL作业,我们使用自定义函数(找到here)来创建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
失败。
非常感谢任何线索。