2009-12-01 1147 views
0

我有一個本地SQL 2000數據庫。嘗試所有未更改的存儲過程時,我的Winform應用突然死亡。以下是錯誤消息:服務器無法加載DCOM錯誤

服務器:消息7404,級別16,狀態2,過程RecordCurrentUser2,行45 服務器無法加載DCOM。

然後,我注意到,當我嘗試使用查詢分析器來更改SP時,當我試圖執行ALTER命令時,會出現相同的錯誤。我修剪下來的存儲過程,離開執行時導致該錯誤的核心代碼:

SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_NULLS ON 
GO 


ALTER PROCEDURE dbo.RecordCurrentUser2 
(
@xmlUser   varchar(8000) 
) 
AS 

BEGIN 

    DECLARE @Now    datetime 
    DECLARE @ChangedRecordCount int 

    --Normally this is commented out, but for testing, we'll hard code a param value: 
    SET @xmlUser = '<User> 
    <User>  
    <EmailId>[email protected]</EmailId> 
    <LastName>Chad</LastName> 
    <FirstName>Smith</FirstName> 
    <Initials /> 
    <DomainName>NA</DomainName> 
    <Account>SMITH</Account> 
    <TelephoneNumber>179-1458</TelephoneNumber> 
    <PeoplesoftId>031X45</PeoplesoftId> 
    <Department>Order to Collect BI Reporting</Department> 
    <StreetAddress>58 Hill Road</StreetAddress> 
    <PostalCode>06333</PostalCode> 
    <Location>MAIN</Location> 
    <State>AK</State> 
    <Country>United States</Country> 
    </User> 
</User>' 


    DECLARE @DocHandle  int 

    SET @Now = GETUTCDATE() 

    -- Create an internal representation of the XML document. 

    EXEC sp_xml_preparedocument @DocHandle OUTPUT, @xmlUser 

    --Put the contents of the XML string into a temp table 

    SELECT 
      EmailId   
     ,LastName   
     ,FirstName  
     ,Initials As Initials 
     ,DomainName   
     ,Account   
     ,TelephoneNumber  
     ,PeoplesoftId  
     ,Department   
     ,StreetAddress  
     ,PostalCode   
     ,Location   
     ,State    
     ,Country    
     ,OtherTelephone 
     ,NonUnisysDomainName 
     ,NonUnisysAccount 
    INTO 
     #TempItems 
    FROM 
     OPENXML (@DocHandle, '/User/User', 2) 
      WITH 
      (
      EmailId    nvarchar(80) 
      ,LastName    nvarchar(50) 
      ,FirstName    nvarchar(50) 
      ,Initials    nvarchar(30) 
      ,DomainName    nvarchar(10) 
      ,Account    nvarchar(10) 
      ,TelephoneNumber  nvarchar(50) 
      ,PeoplesoftId   nvarchar(50) 
      ,Department    nvarchar(50) 
      ,StreetAddress   nvarchar(50) 
      ,PostalCode    nvarchar(50) 
      ,Location    nvarchar(80) 
      ,State     char(2) 
      ,Country    nvarchar(30) 
      ,OtherTelephone   nvarchar(50) 
      ,NonUnisysDomainName nvarchar(10) 
      ,NonUnisysAccount  nvarchar(10) 
      ) 

END 

以下服務在我的機器上運行,儘管他們可能不相關: 分佈式事務處理協調器(注意,運行本地數據庫) COM ++

我最近沒有故意安裝任何東西,但我記得看到一個MS補丁被公司政策自動應用,不知道它是什麼或如何找出。

如何解決此錯誤?

+0

閱讀有關SQL錯誤7404之後,它看起來像SQL服務器有一些內部緩存文件操作的問題。對不起,如果我的評論太寬泛,並沒有幫助。 – 2009-12-01 03:40:27

回答

0

我已經在管理員帳戶下運行SQL Server,而不是本地系統帳戶,但我的個人域帳戶是管理員。這裏沒有變化。

我做了重啓,但問題消失了。我提到的補丁程序必須要求重新啓動,但並未表明如此。令人驚訝的是,安裝補丁後沒有警告,沒有告訴我重新啓動。

一個投票的合理建議,嘗試管理acct。謝謝!還要感謝火箭外科醫生。

1

你的sp_xml_removedocument呼叫在哪裏停止內存泄漏?

解析後的文檔存儲在SQL Server的內部緩存中。 MSXML分析器(Msxmlsql.dll)使用 SQL Server的可用內存總量的1/。爲避免耗盡內存,請運行sp_xml_removedocument 以釋放內存。

編輯:適用於SQL Server 2000〜2008年至少

+0

這應該是一個可以接受的答案。它看起來像一個永久修復 – 2009-12-01 04:51:47

+1

感謝您的評論。爲了最大限度地減少發佈目的的存儲過程的大小並隔離導致問題的實際源,我刪除了大部分代碼,刪除了任何不會導致報告錯誤的代碼。就目前來看,SP不會很有用。原始SP包含您所指的代碼。謝謝你的加入。 – ChadD 2009-12-01 13:37:56

+0

@查德:好的,我確實想知道...... – gbn 2009-12-01 16:08:30