我有一个本地SQL 2000数据库。尝试所有未更改的存储过程时,我的Winform应用程序突然死亡。这是错误信息:
服务器:消息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>chad.smith@effedupcompany.com</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 :(得分:1)
你的sp_xml_removedocument
调用停止内存泄漏的位置在哪里?
解析后的文档存储在 SQL Server的内部缓存。该 MSXML解析器(Msxmlsql.dll)使用 可用总内存的八分之一 对于SQL Server。为了避免用完 记忆,运行
sp_xml_removedocument
释放记忆。
编辑:至少适用于SQL Server 2000到2008
答案 1 :(得分:0)
我已经在管理员帐户下运行SQL Server,而不是本地系统帐户,而是我的个人域帐户,该帐户是管理员。这里没有变化。
然而,我确实重新启动了,问题就消失了。我提到的补丁必须要求重启,但没有说明。令人惊讶的是,在完成安装后,安装补丁时没有警告并且没有告诉我重新启动。对于尝试管理帐户的合理建议进行了一次投票。谢谢!还要感谢火箭外科医生。