由于内部专用队列问题导致消息队列服务无法启动。
使用命令行备份和还原消息队列消息
在命令提示符下,键入以下内容,然后按 ENTER:
mqbkup {-bfolderpath | -rfolderpath| -?}[-y] [-cmsmq_resource_name]
Â
值 | 说明 |
-bfolderpath | 将文件备份到指定文件夹 |
-rfolderpath | 从指定文件夹还原文件 |
-y | 不提示(所有问题均为“是”) |
-cmsmq_resource_name | 在 MSMQ 配置为群集资源时使用,指定群集 MSMQ 资源名称 |
-? | 显示实用程序的帮助 |
此问题可能是由于 MSMQ\Storage\LQS 目录中的某个文件损坏所致。该目录包含计算机中所有专用队列的定义。
在还原消息之前,您必须关闭“控制面板”以及所有消息队列应用程序或者打开 HKLM\Software\MSMQ\Parameters 注册表项的注册表项句柄的任何应用程序。此类应用程序通常包括计算机管理控制台(如果加载了消息消息队列单元)、MSMQ 触发器服务、消息队列服务以及一些第三方应用程序。
注意:关闭控制面板在 Windows XP 及更高版本上不是问题,因为这些版本的 Windows 不包括 MSMQ 控制面板扩展。 |
其他考虑事项
Mqbkup 实用程序无法用于备份或还原 Active Directory 域服务中存储的对象。因此,Mqbkup 实用程序无法备份或还原公用队列,因为公用队列是 Active Directory 域服务中的对象。Mqbkup 实用程序会备份或还原本地计算机上存储的由公用队列引用的任何消息队列消息,但是公用队列本身必须独立于 Mqbkup 实用程序进行备份或还原。
该实用程序将备份可恢复事务性消息,包括传出队列中的消息。不会备份或还原快速消息。
证书和加密密钥信息不使用此实用程序备份。
执行还原操作后,您必须注册新的用户证书。有关如何注册证书的信息,请参阅“附加引用”。
该实用程序将停止并重新启动消息队列服务,这将导致丢失所有快速消息。有关快速消息的详细信息,请参阅“附加引用”。
如果 COM+ 应用程序已由绑定到触发器的规则调用,则还原消息将会失败,并显示“拒绝访问”错误。要解决此问题,请执行下列步骤:
在 Windows Vista® 计算机上,从使用本地管理员权限运行的命令提示符处启动 mqbkup。
确保使用 MSMQ API 的所有用户应用程序和服务已停止。
如果还原消息仍然失败,请等待 10 分钟,然后重试。释放所有对象后,COM+ 应用程序需要 10 分钟时间从内存中卸载。
有关详细信息,请参阅“备份和还原消息”( http://technet.microsoft.com/en-us/library/cc771016(WS.10).aspx)。
有关详细信息,请参阅“注册消息队列的证书”( http://technet.microsoft.com/en-us/library/cc753651(WS.10).aspx)。
有关详细信息,请参阅“消息传递方法”( http://technet.microsoft.com/en-us/library/cc771721(WS.10).aspx)。
Target | Microsoft.MSMQ.6.3.Servers | ||
Category | AvailabilityHealth | ||
Enabled | False | ||
Event_ID | 2020 | ||
Event Source | $Target/Property[Type="Microsoft.MSMQ.6.3.ServerRole"]/ServiceName$ | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Remotable | True | ||
Alert Message |
| ||
Event Log | Application |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
DS | DataSource | Microsoft.Windows.EventProvider | Default |
GenerateAlert | WriteAction | System.Health.GenerateAlert | Default |
<Rule ID="Microsoft.MSMQ.6.3.Rule.Alert.Event2020" Enabled="false" Target="Microsoft.MSMQ.6.3.Servers" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>AvailabilityHealth</Category>
<DataSources>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.EventProvider">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Target/Property[Type="Microsoft.MSMQ.6.3.ServerRole"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>2020</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertOwner/>
<AlertMessageId>$MPElement[Name="Microsoft.MSMQ.6.3.Rule.Alert.Event2020.AlertName"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>