什么是不一致状态?
Exchange 服务器依赖于多个组件协同工作,但这些组件之间的“信息”对不上了,这就像一个公司的不同部门(如人事、财务、销售)记录的同一个员工信息完全不同,导致公司无法正常运转。
在 Exchange 中,这些组件包括:

- Active Directory (AD): 存储所有 Exchange 对象(邮箱、数据库、服务器等)的“蓝图”和配置信息。
- Exchange 数据库: 存储实际的邮件、日历、联系人等用户数据。
- Exchange 服务: 如 MSExchangeIS, MSExchangeADTopology, MSExchangeTransport 等,负责处理数据流和逻辑。
- 文件系统: 存储数据库文件、日志文件等。
当这些组件之间的信息出现冲突或损坏时,服务器就进入了“不一致状态”。
常见症状
当服务器处于不一致状态时,你可能会遇到以下一种或多种症状:
- 服务无法启动或频繁崩溃: 尤其是 Microsoft Exchange Information Store, MTA Stack, 或 Transport Queue 服务。
- 数据库问题:
- 数据库被标记为
Dismounted(已卸载)。 - 数据库处于
Dirty Shutdown(非正常关闭) 状态,无法顺利挂载。 - 事件日志中频繁出现
Jet或ESE(Extensible Storage Engine) 相关的错误。
- 数据库被标记为
- 邮件流中断:
- 邮件无法发送或接收,队列中堆积大量邮件。
- 反向代理(如 ARR)或负载均衡器出现健康检查失败。
- 管理控制台问题:
- Exchange 管理中心 或 Exchange 命令行管理程序 无法连接到服务器。
- 在 EAC 中查看服务器状态时显示红色警告或错误。
- 客户端连接问题:
- Outlook 客户端提示“连接到 Microsoft Exchange 已失败”。
- OWA (Outlook Web App) 无法登录或显示错误页面。
- 性能严重下降: 服务器 CPU、内存或磁盘 I/O 使用率异常高。
排查和解决步骤(由简到繁)
重要提示:在进行任何重大操作(如修复数据库、从备份恢复)之前,请务必备份所有关键数据!
- 备份 Active Directory(特别是包含 Exchange 的域控制器)。
- 备份 Exchange 数据库文件和事务日志文件。
第 1 步:收集信息
-
检查事件查看器: 这是最重要的第一步,转到“事件查看器” -> “应用程序和日志服务” -> “Microsoft-Exchange-*” 和 “System” 日志,查找所有标记为“错误”和“警告”的事件,特别是来源为
MSExchangeIS,MSExchangeADTopology,MSExchangeTransport,MSExchangeRepl,MSExchangeCommon以及ESE的事件,这些错误信息是定位问题的金钥匙。 -
使用 Exchange 命令行管理程序 (EMS): 打开 EMS,运行以下基本命令来检查服务器和数据库的总体状态:

# 检查服务器健康状态 Get-ServerComponentState -Identity <你的服务器名> | Format-List # 检查所有数据库状态 Get-MailboxDatabase -Status | Format-List Name,Server,Mounted,LastBackupTime,LogFilesRemoved,LogFilesToBackup # 检查所有数据库副本状态 Get-MailboxDatabaseCopyStatus -Server <你的服务器名>
第 2 步:检查 AD 和 AD 拓扑
AD 问题是导致不一致状态的常见根源。
- 验证 AD 对象完整性:
Test-ServiceHealth -Identity <你的服务器名>
如果服务不健康,它会告诉你哪些服务有问题,然后运行:
Test-ReplicationHealth -Identity <你的服务器名>
这个命令会检查 AD 拓扑复制、链接状态、发现服务等是否正常,如果发现失败,通常意味着 AD 复制有问题。
- 重新发现 AD 中的服务器:
如果怀疑 AD 中的 Exchange 服务器对象信息过时或损坏,可以尝试让 Exchange 重新发现。
# 重新运行安装程序中的“准备模式” Setup.com /PrepareDomain # 或者重新发现服务器 Setup.com /PrepareAD # 更新服务器本地配置 Setup.com /PrepareSchema
警告: 这些命令影响范围很大,请务必在微软官方文档指导下谨慎操作,并确保有 AD 回滚计划。
第 3 步:检查 Exchange 数据库
数据库文件损坏或日志不同步是另一个主要原因。

-
检查数据库状态: 如第 1 步所述,使用
Get-MailboxDatabase -Status查看数据库是否已挂载,如果未挂载,尝试手动挂载:Mount-Database -Identity "你的数据库名"
如果失败,通常会给出错误原因,Dirty Shutdown”。
-
修复“Dirty Shutdown”数据库: 这是最常见的数据库修复场景,这需要使用 ESEUTIL 工具。
# 1. 检查数据库完整性 eseutil /mh "E:\ExchangeDB\DB.edb" # 2. 如果状态是 "Dirty Shutdown",恢复日志 eseutil /r "E01" (E01 是事务日志前缀,请根据实际情况修改) # 3. 检查数据库碎片 eseutil /ms "E:\ExchangeDB\DB.edb" # 4. 如果碎片化严重,进行碎片整理(需要卸载数据库) Dismount-Database -Identity "你的数据库名" eseutil /d "E:\ExchangeDB\DB.edb" Mount-Database -Identity "你的数据库名"
注意: ESEUTIL 是一个强大的工具,但操作不当可能会破坏数据库,请确保你理解每一步的作用,并优先考虑从备份恢复。
第 4 步:检查服务配置
- 重新启动服务: 有时服务只是暂时性故障,尝试在服务管理器中重启所有 Exchange 相关服务。
- 检查服务依赖项: 确保每个 Exchange 服务的所有依赖项都已启动并且运行正常。
第 5 步:高级方案(谨慎使用)
如果以上步骤都无法解决问题,可能需要更激进的修复。
- 从备份恢复:
这是最安全、最可靠的恢复方式,如果你有最新的、成功的备份(包括 AD 和 Exchange 数据库),这是首选方案。
- 恢复 AD: 从域控制器的系统状态备份中恢复。
- 恢复数据库: 使用 Exchange 的备份和恢复工具(如 Windows Server Backup 或第三方备份软件)恢复数据库文件和日志,然后通过
eseutil /r或Restore-Database进行恢复。
- 重新安装 Exchange: 这是一个“核武器”级别的选项,可以尝试保留现有数据和配置,通过运行 Exchange 安装程序并选择“修复”或“重新安装”模式,但这有风险,可能会导致数据丢失或配置更混乱。此操作前必须有完整备份。
预防措施
为了避免未来再次出现此类问题,请做好以下几点:
- 定期备份: 建立并严格执行 AD 和 Exchange 数据库的备份策略,定期测试备份的可用性。
- 保持更新: 及时安装 Windows 和 Exchange 的最新服务包和累积更新。
- 监控: 使用 SCOM 或其他监控工具,对 Exchange 服务器的健康状况、服务状态、数据库状态和邮件流进行 24/7 监控。
- 规范操作: 对服务器的任何变更(如安装补丁、修改配置)都应在维护窗口进行,并做好记录。
- 冗余设计: 部署 DAG (数据库可用性组) 和负载均衡,确保在单点故障时,服务可以快速切换,减少业务中断。
“Exchange 服务器处于不一致状态”是一个复杂的问题,没有一蹴而就的解决方案,解决它的关键在于:
- 耐心排查: 从事件日志和基本命令开始,逐步缩小范围。
- 找到根源: 是 AD 问题、数据库问题还是服务问题?
- 谨慎操作: 尤其是在使用 ESEUTIL 或进行 AD 修复时,备份永远是第一位的。
- 寻求专业帮助: 如果问题非常严重或你不确定如何操作,请及时联系 Microsoft 支持或
