社内ツールを使用してデータベースジョブの実行を監視しています。このツールでは、ジョブの終了後にURL呼び出しが必要です。
SQLジョブでは、URL要求を送信するオブジェクトを作成するカスタム関数(ここにあります)を使用します。MSXML2.ServerXMLHTTP.3.0
私たちの仕事は5分ごとに実行されるため、およそ5分ごとにURL呼び出しがあります。
SQL Server 2005およびWin2k3では、このソリューションは数年間完全に機能していました。
最近ジョブをSQLServer2008(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
失敗します。
手がかりは大歓迎です。