Мы отслеживаем выполнение задания базы данных, используя собственный инструмент, который требует URL-вызова после завершения задания.
Для наших заданий SQL мы используем пользовательскую функцию (можно найти здесь ), который создает MSXML2.ServerXMLHTTP.3.0
объект для отправки запроса URL.
Наша работа выполняется каждые 5 минут, поэтому вызов URL выполняется примерно каждые 5 минут.
В SQL Server 2005 иВ Win2k3 это решение отлично работало в течение нескольких лет.
После того, как мы недавно перенесли задания на SQL Server 2008 (также Win2k3), этот URL-вызов работает в течение примерно 3 дней, а затем завершается неудачей.
Решение для устранения проблемы заключается в следующем.перезагрузка сервера (перезапуск службы сервера sql не работает), поэтому я предлагаю утечку памяти.Однако я понятия не имею, как отладить эту утечку памяти - в журнале событий нет сообщений об ошибках или файлов журналов, что бы то ни было.
Код для пользовательской функции (свойство 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
не работает.
Любая подсказка очень ценится.