什么是不一致状态?
Exchange服务器依赖于多个组件协同工作,其中最重要的是 Active Directory (AD),AD是Exchange的“大脑”和“地址簿”,存储了所有用户、邮箱和服务器配置信息,Exchange数据库则存储着实际的邮件数据。

“不一致状态”意味着:
- AD中的信息与实际服务器状态不符:AD中某个服务器角色是健康的,但实际该服务已经停止或数据库已离线。
- 数据库本身损坏或元数据错误:数据库文件(.edb)的内部结构或其与AD的关联信息出现了问题。
- 服务配置信息错误:IIS、MSExchangeIS等服务的关键配置文件损坏或丢失。
当Exchange检测到这种不一致时,它会为了保护数据安全而进入一种“安全模式”,通常会停止提供邮件服务,并在事件查看器中记录错误。
常见原因分析
导致不一致状态的原因多种多样,以下是一些最常见的原因:
-
Active Directory 问题(最常见)
(图片来源网络,侵删)- AD数据库损坏:承载Exchange的域控AD数据库出现问题。
- AD对象属性损坏:与Exchange相关的计算机对象、用户对象或配置对象属性被错误修改或损坏。
- AD复制失败:域控之间无法正常同步,导致不同地方的Exchange服务器获取到过时或错误的信息。
-
Exchange 数据库问题
- 数据库硬故障:硬盘坏道导致数据库文件(.edb或.log)物理损坏。
- 数据库软故障/逻辑损坏:数据库的内部表结构或索引损坏,但文件本身完好。
- 检查点文件损坏:检查点文件记录了哪些事务已写入数据库,其损坏会导致数据库无法启动。
- 存储空间不足:磁盘空间耗尽,导致数据库无法写入新的日志或数据文件。
-
服务或配置问题
- 服务异常终止:关键服务(如MSExchangeIS, MSExchangeADTopology, FMS)崩溃后没有正确恢复。
- IIS 元数据库损坏:IIS的配置文件损坏,导致Web服务无法正常响应。
- Exchange 安装/更新中断:在安装Exchange CU(累积更新)或服务包时失败,导致系统处于一个“半更新”状态。
- 手动错误修改注册表或配置文件。
-
硬件问题
- 内存故障:坏的内存在运行时导致数据损坏。
- 硬盘故障:如上所述,直接导致数据库或系统文件损坏。
- RAID 控制器问题或驱动程序错误。
-
灾难恢复或迁移操作不当
(图片来源网络,侵删)- 从备份恢复时,只恢复了数据库,但没有正确恢复AD中的配置信息。
- 迁移服务器角色后,旧服务器的配置信息没有被正确清理。
排查和解决步骤(核心部分)
警告:在进行任何操作之前,请务必备份!
- 备份AD:通过系统状态备份或Windows Server Backup。
- 备份Exchange数据库:使用
eseutil /g和isinteg -fix等命令检查前,先复制一份.edb和.log文件。 - 备份整个服务器:如果可能,创建服务器的完整备份。
步骤 1:收集信息,确认问题
-
查看事件查看器:
- 打开 事件查看器 -> Windows 日志 -> 应用程序 和 系统。
- 重点查看来源为
MSExchangeIS、MSExchangeADTopology、MSExchangeMailboxReplicationService、MSExchangeTransport、ESE等的错误和警告事件,这些日志通常会直接指出问题的根源,数据库ID为XXX的数据库处于不一致状态”或“无法从AD获取服务器配置”。
-
使用Exchange命令行工具检查:
- 以 Exchange 管理员 身份打开 Exchange Management Shell (EMS)。
- 检查服务器状态:
Get-ServerState -Identity <您的服务器名>
- 检查数据库状态:
Get-MailboxDatabase -Status | Format-List Name,Server,Mounted,DatabaseSize,LogDiskSpaceRemaining,AvailableNewMailboxSpace
查看是否所有数据库都处于
Mounted(已装载) 状态,以及磁盘空间是否充足。 - 检查服务状态:
Get-Service | Where-Object {$_.Name -like "MSExchange*"}确保所有关键服务都在运行。
步骤 2:根据错误信息进行针对性修复
方案A:针对 Active Directory (AD) 问题
这是最常见的情况,因为Exchange极度依赖AD。
-
验证AD健康:
- 在域控上运行
dcdiag /v和netdiag /v命令,检查AD的完整性和复制健康状况。 - 检查AD Sites and Services,确保与问题服务器相关的站点链接和连接器都正常。
- 在域控上运行
-
修复AD中的Exchange对象:
- 重置计算机账户密码:有时服务器与AD的信任关系会出问题。
Reset-ServiceAccountPassword -Identity <您的服务器名> -Confirm:$false
- 重新运行Exchange安装程序:这听起来可能很奇怪,但这是微软官方推荐的修复AD对象权限和属性的“官方”方法,运行安装程序,选择“修复”模式,让它重新检查并修复AD中的配置。
- 重置计算机账户密码:有时服务器与AD的信任关系会出问题。
方案B:针对 Exchange 数据库问题
如果事件日志指向了数据库不一致,可以尝试以下步骤:
-
挂起数据库并尝试修复:
-
卸载数据库(如果它还处于挂载状态):
Dismount-Database -Identity <您的数据库名>
-
使用 ESEUTIL 检查数据库:
# 切换到数据库所在目录 cd "C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\<DatabaseName>" # 执行软修复(/p是硬修复,会丢失数据,慎用!) eseutil /p <数据库文件名>.edb
注意:
/p是硬修复,会尝试修复数据库结构,但极有可能导致数据丢失。在执行前必须有备份! 优先尝试/g(只读检查)和/mh(查看头信息)。 -
使用 ISINTEG 修复逻辑错误:
# 切换到Exchange安装目录的Bin文件夹 cd "C:\Program Files\Microsoft\Exchange Server\V15\Bin" # 运行修复(-Fix会修复发现的错误) .\isinteg -s <您的服务器名> -fix -test <测试名称,如: SystemFolder>
你需要根据情况运行多个测试,可以查阅MSDN文档了解所有可用的测试项。
-
-
从备份恢复:
eseutil /p和isinteg都无法解决问题,或者你不想冒险,那么从备份恢复是最后也是最可靠的选择。- 使用
Restore-Database命令或第三方备份软件(如Veeam, DPM)进行恢复。
方案C:针对服务或配置问题
- 重启服务器:这是最简单但有时最有效的方法,可以解决临时的服务或内存问题。
- 重新安装Exchange:如果怀疑是安装文件损坏,可以尝试卸载后重新安装,这是最后的手段之一,风险很高。
- 修复IIS:在命令提示符(管理员)中运行
iisreset /noforce。
预防措施
为了避免未来再次出现此类问题,请做好以下预防工作:
- 定期备份:制定并严格执行AD和Exchange的备份策略,并定期测试备份的可用性。
- 保持更新:及时安装Windows和Exchange的累积更新,以修复已知的bug和安全漏洞。
- 监控服务器健康:使用SCOM、Zabbix等监控工具,实时监控服务器CPU、内存、磁盘空间、服务状态和数据库状态。
- 硬件维护:定期检查服务器硬件状态,使用RAID阵列,并配置警报通知硬盘故障。
- 规范操作:避免在生产服务器上进行未经测试的修改,所有重大操作(如升级、迁移)都应在测试环境中先进行。
“Exchange服务器处于不一致状态”是一个系统性的
