luck_eyes 发表于 2010-9-10 14:07:25

Exchange 2010灾难恢复(排错)+数据可移植性

前段时间在项目中做了一次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;对于每个已成功恢复的角色,通过对其在 HKLM\Software\Microsoft\Exchange\v8.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&nbsp;的当前值减去与已恢复角色对应的值,然后将该属性修改为新值。例如,如果在安装了集线器服务器角色(值 = 32)、邮箱服务器角色(值 = 2)和 CAS 服务器角色(值 = 4)的服务器上成功恢复了邮箱角色,当前值为 38,用该值减去邮箱角色的值 2,得到msExchCurrentServerRoles&nbsp;的值为 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
      执行后可以选择全部转移,还是单个用户转移。比较灵活的。


钉子 发表于 2012-3-24 16:50:09

好。加精华。
页: [1]
查看完整版本: Exchange 2010灾难恢复(排错)+数据可移植性