问题描述

因人员递增及业务发展需要,需要对现阶段Exchange前后端及数据库进行全新规划,并根据实际需要扩容现有数据库。在挂载数据库时发生报错MapiExceptionTooManyMountedDatabases: Unable to mount database。

环境描述

Windows Server 2012R2 + Exchange CU17

问题分析:

Microsoft Exchange Server 2013在两个服务器版本中可用:标准版和企业版。企业版可以在发布到制造(RTM)和累积更新1(CU1)版本中扩展到每个服务器50个装载数据库,累积更新2(CU2)和更高版本CU18中每个服务器装载100个数据库; 标准版仅限于每台服务器安装5个数据库。挂载的数据库是正在使用的数据库。挂载的数据库可以是安装为供客户端使用的活动邮箱数据库,也可以是安装在恢复中的用于日志复制和重放的被动邮箱数据库。虽然可以创建比上述限制更多的数据库,但只能装载上面指定的最大数目。恢复数据库不计入此限制。

这些许可版本由产品密钥定义。输入有效的许可证产品密钥时,会建立服务器的受支持版本。产品密钥只能用于相同版本的密钥交换和升级; 他们不能用于降级。您可以使用有效的产品密钥将Exchange 2013的评估版(试用版)移至标准版或企业版。您也可以使用有效的产品密钥从标准版转移到企业版。

您也可以使用相同版本的产品密钥重新授权服务器。例如,如果您有两台带有两个密钥的Standard Edition服务器,但意外在两台服务器上使用了同一个密钥,则可以将其中一个密钥更改为您发布的另一个密钥。您可以执行这些操作,而无需重新安装或重新配置任何内容。输入产品密钥并重新启动Microsoft Exchange Information Store服务后,将反映与该产品密钥对应的版本。

当试用版过期时,不会发生功能损失,因此您可以在120天内维护实验室,演示版,培训版和其他非生产环境,而无需重新安装Exchange 2013试用版。

如前所述,您不能使用产品密钥从企业版降级到标准版,也不能使用它们还原到试用版。这些类型的降级只能通过卸载Exchange 2013,重新安装Exchange 2013以及输入正确的产品密钥来完成。

解决思路

1.在ECP网页管理界面执行数据库挂载操作,报错信息如下:

装入数据库"DB17"失败。错误: 活动管理器操作失败。错误: 数据库操作失败。错误: 尝试为可能的激活操作选择数据库副本时发生错误。错误: 未装载数据库'DB17',因为验证数据库副本是否可激活时,或者试图激活另一个副本时出现了错误。详细错误: mbx04: 活动管理器操作失败。错误: 操作失败,出现消息: MapiExceptionTooManyMountedDatabases: Unable to mount database. (hr=0x8004060e, ec=-2147219954) Diagnostic context: Lid: 65256 Lid: 10722 StoreEc: 0x8004060E Lid: 1494 -- Remote Context Beg -- Lid: 37952 dwParam: 0x3C1A048E Lid: 39576 StoreEc: 0x977 Lid: 35200 dwParam: 0x1970 Lid: 58864 StoreEc: 0x8004060E Lid: 43248 StoreEc: 0x8004060E Lid: 35388 StoreEc: 0x8004060E Lid: 54336 dwParam: 0x3C1A048E Lid: 35200 dwParam: 0x1970 Lid: 1750 -- Remote Context End -- Lid: 1047 StoreEc: 0x8004060E [服务器: MBX04.***.com] [数据库: DB17, 服务器: MBX02.***.com]

2.此时查看服务器日志:

邮箱数据库 DB17 的索引遇到意外异常。错误详细信息: Microsoft.Exchange.Search.Core.Abstraction.OperationFailedException: The component operation has failed. ---> Microsoft.Exchange.Search.Core.Abstraction.ComponentFailedPermanentException: Failed to read notifications, MDB: 6fbcc62c-b4ad-45a8-b512-d1daac1090b7. ---> Microsoft.Mapi.MapiExceptionMdbOffline: MapiExceptionMdbOffline: Unable to read events. (hr=0x80004005, ec=1142)

Diagnostic context:

Lid: 49384

Lid: 51176 StoreEc: 0x476

Lid: 40680 StoreEc: 0x476

Lid: 43980

Lid: 16354 StoreEc: 0x476

Lid: 38985 StoreEc: 0x476

Lid: 20098

Lid: 20585 StoreEc: 0x476

在 Microsoft.Mapi.MapiExceptionHelper.InternalThrowIfErrorOrWarning(String message, Int32 hresult, Boolean allowWarnings, Int32 ec, DiagnosticContext diagCtx, Exception innerException)

在 Microsoft.Mapi.MapiExceptionHelper.ThrowIfError(String message, Int32 hresult, IExInterface iUnknown, Exception innerException)

在 Microsoft.Mapi.MapiEventManager.ReadEvents(Int64 startCounter, Int32 eventCountWanted, Int32 eventCountToCheck, Restriction filter, ReadEventsFlags flags, Boolean includeSid, Int64& endCounter)

在 Microsoft.Exchange.Search.Mdb.NotificationsEventSource.<>c__DisplayClass3.<ReadEvents>b__1()

在 Microsoft.Exchange.Search.Mdb.MapiUtil.<>c__DisplayClass1`1.<TranslateMapiExceptionsWithReturnValue>b__0()

在 Microsoft.Exchange.Search.Mdb.MapiUtil.TranslateMapiExceptions(IDiagnosticsSession tracer, LocalizedString errorString, Action mapiCall)

--- 内部异常堆栈跟踪的结尾 ---

在 Microsoft.Exchange.Search.Mdb.MapiUtil.TranslateMapiExceptions(IDiagnosticsSession tracer, LocalizedString errorString, Action mapiCall)

在 Microsoft.Exchange.Search.Mdb.MapiUtil.TranslateMapiExceptionsWithReturnValue[TReturnValue](IDiagnosticsSession tracer, LocalizedString errorString, Func`1 mapiCall)

在 Microsoft.Exchange.Search.Mdb.NotificationsEventSource.ReadEvents(Int64 startCounter, Int32 eventCountWanted, ReadEventsFlags flags, Int64& endCounter)

在 Microsoft.Exchange.Search.Mdb.NotificationsEventSource.ReadFirstEventCounter()

在 Microsoft.Exchange.Search.Engine.NotificationsEventSourceInfo..ctor(IWatermarkStorage watermarkStorage, INotificationsEventSource eventSource, IDiagnosticsSession diagnosticsSession, MdbInfo mdbInfo)

在 Microsoft.Exchange.Search.Engine.SearchFeedingController.DetermineFeederStateAndStartFeeders()

在 Microsoft.Exchange.Search.Engine.SearchFeedingController.InternalExecutionStart()

在 Microsoft.Exchange.Search.Core.Common.Executable.InternalExecutionStart(Object state)

--- 内部异常堆栈跟踪的结尾 ---

在 Microsoft.Exchange.Search.Core.Common.Executable.EndExecute(IAsyncResult asyncResult)

在 Microsoft.Exchange.Search.Engine.SearchRootController.ExecuteComplete(IAsyncResult asyncResult)

3.根据报错MapiExceptionTooManyMountedDatabases及系统日志分析,回想我们在添加新的邮箱后端后并未输入生产密钥,评估版邮箱默认可安装5个数据库。

Ps.可通过如下命令查看正在运行的Exchange 2013版本的内部版本号:

Get-ExchangeServer | fl name,edition,admindisplayversion

4.正常录入Exchange企业版授权密钥:

5.重启Microsoft Exchange Information Store (Microsoft Exchange 信息存储)服务。

6.重新尝试添加数据库,此时可正常添加。本次排错操作完成。

补充:

Exchange 2013许可证类型

Exchange 2013在服务器/客户端访问许可证(CAL)模型中获得许可,与Exchange 2010的许可方式类似。以下是许可证的类型:

  • 服务器许可证:必须为正在运行的服务器软件的每个实例分配许可证。服务器许可证以两种服务器版本销售:标准版和企业版。

  • 客户端访问许可证(CAL):Exchange 2013还包含两个客户端访问许可证(CAL)版本,这两个版本称为标准CAL和企业CAL。您可以将服务器版本与CAL类型混合搭配使用。例如,您可以使用Exchange 2013标准版的Enterprise CAL。同样,您可以使用Exchange 2013企业版的标准CAL。