2009-12-01 3 views
0

У меня есть локальная база данных SQL 2000. Приложение My Winform неожиданно умерла, когда пыталась выполнить все сохраненное proc, которое не изменилось. Вот сообщение об ошибке:Сервер не смог загрузить ошибку DCOM

Сервер: Msg 7404, уровень 16, состояние 2, процедура RecordCurrentUser2, строка 45 Сервер не смог загрузить DCOM.

Затем я заметил, что когда я пытаюсь изменить SP с помощью Query Analyzer, я бы получил ту же ошибку, когда пытался выполнить команду 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 

Следующая служба работает в моей машине, хотя они могут быть не актуальны: Координатор распределенных транзакций (записной Забегая local db) COM ++

Я не намеренно устанавливал что-либо недавно, хотя я напоминаю, что MS-patch автоматически применяется политикой компании, не уверен, что это было или как узнать.

Как устранить эту ошибку?

+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. Чтобы избежать нехватки памяти , запустите sp_xml_removedocument , чтобы освободить память.

Edit: относится к SQL Server 2000 по 2008 год, по крайней мере

+0

Это должен быть приемлемый ответ. Это похоже на постоянное исправление – 2009-12-01 04:51:47

+1

Спасибо за комментарий. Чтобы свести к минимуму размер хранимой процедуры для целей проводки и изолировать фактический источник, вызывающий проблему, я удалил большую часть кода, удалив любой код, который не привел к сообщенной ошибке. Как бы то ни было, SP не будет очень полезен. Оригинальный SP содержит код, на который вы ссылаетесь. Спасибо за это. – ChadD

+0

@ Chad: Хорошо, я действительно задавался вопросом ... – gbn

Смежные вопросы