2

社内ツールを使用してデータベースジョブの実行を監視しています。このツールでは、ジョブの終了後に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

失敗します。

手がかりは大歓迎です。

4

0 に答える 0