2009-12-01 99 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

相关问题