我们正在使用内部工具监控数据库作业的执行,该工具需要在作业完成后调用 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
失败。
非常感谢任何线索。