前段时间在项目中做了一次Exchange 2010灾难恢复,在恢复过程感慨颇深遇到了不少的问题和麻烦,还好磕磕绊绊的修复过来了。借此我把我的恢复过程和遇到的问题和大家分享一下。在论坛中我也见到不少的朋友也遇到同样的问题,我希望该帖能帮助到大家。
环境:单台Exchange 2010,三台域控制器,系统 windows 2008 R2,域(林)构架windows 2008 R2。
灾难恢复原因:Exchange 2010系统完全崩溃。
采用灾难恢复方案:setup/m:recoverserver
灾难恢复步骤:
1. 在域控制器上重置邮件服务器帐号。
2. 重新安装Exchange 2010操作系统。必须保证硬件,计算机名,IP地址一致(据说IP不一样也无所谓)。
3. Exchange 2010新系统加入域。
4. 执行Setup /recoverserver
具体操作我不仔细讲了,网上有很多步骤。我主要讲我遇到的问题和解决方法。
问题来了:
第一次执行:
将恢复下列服务器角色
语言
集线器传输角色
客户端访问角色
邮箱角色
管理工具
正在执行 Microsoft Exchange Server 先决条件检查
语言包检查 ......................... 失败
进程 MSEXCHANGEADTOPOLOGYSERVICE.EXE (PID=3168)。拓扑发现失败,错误 0x80040a02 (DSC_E_NO_SUITABLE_CDC)。
应用程序错误ID:
ID:2114
进程 MSEXCHANGEADTOPOLOGYSERVICE.EXE (PID=3168)。拓扑发现失败,错误 0x80040a02 (DSC_E_NO_SUITABLE_CDC)。
第二次执行:
setup /m:recoverserver
将恢复下列服务器角色
语言
集线器传输角色
客户端访问角色
邮箱角色
管理工具
正在执行 Microsoft Exchange Server 先决条件检查
语言包检查 ......................... 失败
安装 HubTransport 角色时曾发生安装失败。只对此角色重新运行安装程序,或使用控制面板删除此角色。
查看了若干的帖子都无法解决,崩溃中。。。。。
Exchange 2010 正常卸载也无法成功,修复也不行。报错说需要执行完recoverserver才能卸载。
当时就一个想法,只要把数据都恢复过来就成,HUB我不装了之后我在另一台服务器搭建一个HUB Transport不就成了吗,但是前提怎么让服务器跳过HUB的检查。
还好老天眷顾我,让我找到了一个办法。
解决办法:
对于使用Setup /m:Recoverserver修复,如果在此过程中失败是没有办法正常重新安装/卸载。必须完成修复才能进行正常安装和卸载。对于该问题需要通过修改注册表和ADSI才能进行Setup /m:Recoverserver修复。之后我在进行HUB的卸载和安装。
1. 使用 regedit.exe;对于每个已成功恢复的角色,通过对其在 HKLMSoftwareMicrosoftExchangev8.0 下对应项添加 0 来将其重新命名,或者更改对应项的名称。
解析:我当前想跳过HUB Transprot检查,我就需要在V8.0注册表下把HUB Transprot名称改成0.
2. 使用 AdsiEdit (AdsiEdit.msc) 找到要恢复的服务器的 Exchange 服务器对象。例如,以下是某个服务器对象的路径:
CN=<服务器名称>,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=<组织名称>,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=<域名称>
邮箱角色 2 , 客户端访问角色 (CAS) 4, 统一消息角色 16 ,集线器传输角色 32 , 边缘传输角色 64
msExchCurrentServerRoles 的当前值减去与已恢复角色对应的值,然后将该属性修改为新值。例如,如果在安装了集线器服务器角色(值 = 32)、邮箱服务器角色(值 = 2)和 CAS 服务器角色(值 = 4)的服务器上成功恢复了邮箱角色,当前值为 38,用该值减去邮箱角色的值 2,得到msExchCurrentServerRoles 的值为 36。
解释:使用ADSIedit更改 msExchCurrentServerRoles 键值,算法:我首先要让域认为我们成功安装了 HUB Transprot ,未安装mailbox,CAS。该值就为32.
3. 重新运行Setup /m:RecoverServer
4. 成功修复完之后,我们就要考虑HUB的问题。修复完之后其实HUB Transport角色被安装的,只是跳过当前的HUB检查。但是为了安全起见,最好的办法就是在控制面板在把它删除掉,之后在重新安装HUB Transport。
5. OK,修复成功,Exchange 2010一切正常。
数据可移植性解决方案
当时在Setup /m:Recoverserver怎么都无法修复过来时哥们尝试采用了最后应急的方法,最多客户端重新配置一遍只要数据能恢复过来就成。这个办法就是使用Exchange 2010数据可移植性(该方法只能在Exchange2010中使用)。
数据可移植性就是在Exchange 组织下再搭建一台Exchange 2010服务器之后把数据库COPY到这个机器上,重新挂载数据库。在把邮箱的用户信息转移到该数据库上。
弊端:MAPI客户端需要重新配置。
1. 在Exchange 2010组织内搭建一台Exchange 2010邮件服务器
2. 在服务器上建立和原服务器对应的数据库。(不对应也无所谓了)
3. 把原服务器数据文件COPY新服务器上。
4. 之后把原服务器edb文件和新服务器数据库文件进行名字互换。
5. 删除新服务器LOG。
6. 使用ESEUTIL /mh检查数据库是否是clean.(有时候即使是干净的库也需要进行一致性的修复的)
7. 使用ESEUTIL /P “数据库文件”进行一致性修复。(必须要做)
8. 挂载数据库。
4-8步和文档不一样,因为我实在看不懂官方文档写的。
http://technet.microsoft.com/zh-cn/library/dd876926(EXCHG.140).aspx
9.数据库挂载成功后转移客户端邮箱配置信息到新数据库上。
Get-Mailbox -Database <SourceDatabase> |where {$_.ObjectClass -NotMatch '(SystemAttendantMailbox|ExOleDbSystemMailbox)'}| Set-Mailbox -Database <TargetDatabase>
实例:
Get-Mailbox -Database <datebase-bj> |where {$_.ObjectClass -NotMatch '(SystemAttendantMailbox|ExOleDbSystemMailbox)'}| Set-Mailbox -Database <batebase-new>
原来数据库:datebase-bj
新数据库:batebase-new
执行后可以选择全部转移,还是单个用户转移。比较灵活的。