在 Microsoft Exchange Server 2016 中,将归档的数据库文件(.edb 文件)重新挂载到 Exchange 管理中心 (ECP) 上,可以通过以下步骤实现。此过程主要包括还原数据库、将其挂载到Exchange,并在 ECP 中管理用户归档邮箱。以下是具体步骤:
---
步骤 1:确保文件准备就绪
1. 确认 `.edb` 文件以及相关日志文件(如果有)完整无损。
2. 确认归档数据库的物理路径位置,并确保文件权限允许 Exchange 服务访问。
---
步骤 2:恢复数据库到 Exchange
1. **打开 Exchange 管理外壳 (EMS):**
使用管理员权限打开 Exchange Management Shell。
2. **检查数据库状态:**
eseutil /mh "C:\Path\To\YourDatabase.edb"
- 确认数据库状态是 `Clean Shutdown`。
- 如果状态是 `Dirty Shutdown`,需要修复数据库:
eseutil /r E10 /l "C:\Path\To\LogFiles" /d "C:\Path\To\YourDatabase.edb"
- 替换 `E10` 为日志文件的前缀。
这里报错说没找到日志文件的路径,使用/p恢复
eseutil /p "E:\ExchV15\Mailbox\IDC-ArchDB-11-20220822\IDC-ArchDB-11-20220822.edb"
再次验证数据库状态
eseutil /mh "C:\Path\To\YourDatabase.edb"
3. **创建恢复数据库:**
使用以下命令创建一个恢复数据库(RDB):
New-MailboxDatabase -Recovery -Name "ArchiveDB_Restore" -Server "YourServerName" -EdbFilePath "C:\Path\To\YourDatabase.edb" -LogFolderPath "C:\Path\To\LogFiles"
在这一步可能会报错
移走目录下的*.log文件再次挂载就行
重启exchange服务
Restart-Service MsexchangeIS
设置RDB可以Restore:
Set-MailboxDatabase -Identity RDB -AllowFileRestore $true
4. **挂载恢复数据库:**
挂载恢复数据库到 Exchange:
Mount-Database -Identity "ArchiveDB_Restore"
这一步可能报错:
报错说挂载的数据库邮箱太多,
a、移除一些不必要的数据库(特别是之前回挂的归档数据库 经测试一次在一台Host 只能挂一个Recovery状态数据库)
或者
b、删除了一些没用的数据库依旧这个报错,查看到KB说是由存在日志文件,所有*.log文件都需要移走,重复新建数据库步骤,再挂载。
运行以下命令列出恢复数据库中的邮箱
Get-MailboxStatistics -Database "IDC-ArchDB-11-20220822" | Select DisplayName,ItemCount,MailboxGuid
有了上面的数据后,我们就可以还原邮件了
这里新创建一个数据库,用于新建目标邮箱(也可以使用生产中正常邮箱)
注意磁盘空间大小
新建邮箱账号(archiveuser133)与数据库(archiveuser133-re)时
把页面中所有size限制都设置为 “unlimited”。
步骤 3:将归档邮箱恢复到用户邮箱
1. **列出恢复数据库中的邮箱:**
Get-MailboxStatistics -Database "IDC-ArchDB-11-20220822" |ft displayname,mailboxguid,itemcount
DisplayName MailboxGuid ItemCount
----------- ----------- ---------
SystemMailbox{773d9152-5edf-412b-9499-2f95411886e6} 9386c5a1-57cf-4888-aa6e-a79019f7ad9f 27
HealthMailbox-IDC-SR-MAIL-06-IDC-ArchDB-11-20220822 98dc413a-0cb0-49df-af11-783ec091064f 186
就地存档 - HealthMailbox-IDC-SR-MAIL-06-IDC-ArchDB-11-20220822 23dbbdd3-957c-462e-9e2f-14d0e3dfa161 33
邮件存档033 0069759e-39cd-430e-9d09-4685ddb6379b 106017
2. **恢复邮箱到目标邮箱:**
使用以下命令将恢复数据库中的邮箱归档数据合并到用户的主邮箱:
New-MailboxRestoreRequest -SourceDatabase "ArchiveDB_Restore" -SourceStoreMailbox "MailboxGuidOrDisplayName" -TargetMailbox "TargetMailbox"
- 替换 `MailboxGuidOrDisplayName` 为要恢复的邮箱的 GUID 或显示名称。
- 替换 `TargetMailbox` 为目标用户邮箱。
这里报错了,按照提示命令后面添加 -AllowLegacyDNMismatch
3. **检查恢复进度:**
Get-MailboxRestoreRequest | Get-MailboxRestoreRequestStatistics
### 注意事项
- 如果归档数据库涉及旧版本 Exchange 或迁移场景,请确保与当前 Exchange 版本兼容。
- 确保有完整备份,特别是在修复或挂载数据库之前,以防数据损坏。
- 如果数据库过大,恢复可能需要较长时间,请确保有足够磁盘空间和计算资源。
-恢复邮件数据时 可以查看下有没有速率限制
Set-Mailbox -Identity xxx@some.com -ThrottlingPolicy CMMigratePolicy
微软官网步骤: 使用恢复数据库还原数据:Exchange 2013 帮助 | Microsoft Learn
Eseutil: Exchange 2007 帮助 | Microsoft Learn
后续:
由于在挂载邮箱数据库时未开启循环日志,把文件系统撑爆了,无法正常完成恢复邮件的任务
1. 检查邮箱是否已禁用或存在损坏
检查邮箱启用状态:
Get-Recipient -Identity "archiveuser135"
确认邮箱是否处于禁用状态。如果没有返回信息,可能需要进一步检查邮箱是否被隐藏或禁用。
检测邮箱是否损坏:
New-MailboxRepairRequest -Mailbox "archiveuser135" -CorruptionType ProvisionedFolder,SearchFolder,AggregateCounts,FolderView
这将启动邮箱修复过程,用于修复常见的邮箱损坏问题。
2. 测试邮箱访问和连接
使用 Test-MAPIConnectivity 检查邮箱数据库:
Test-MAPIConnectivity -Database "archiveuser135-re"
Test-MAPIConnectivity -Identity "archiveuser125"
此命令会验证邮箱的 MAPI 连接是否正常。如果返回错误,请根据错误消息进一步排查。
邮箱故障
3. 检查邮箱是否被隔离
使用以下命令确认邮箱隔离状态:
Get-MailboxStatistics -Identity "archiveuser135" | Select DisplayName, IsQuarantined
如果 IsQuarantined
返回 True
,邮箱已被隔离。
4. 手动解除邮箱隔离
方法一:直接删除隔离状态
删除隔离状态的注册表项:
-
打开注册表编辑器 (
regedit
) - 导航到以下路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\<ServerName>\Private-<Database GUID>\QuarantinedMailboxes
- 找到
archiveuser135
对应的键并删除。(我在注册表中没找到对应服务名)
方法二:通过 PowerShell 停止隔离
可以使用 PowerShell 解除隔离:
Stop-Service MSExchangeIS
Remove-Item "HKLM:\SYSTEM\CurrentControlSet\Services\MSExchangeIS\<ServerName>\Private-<Database GUID>\QuarantinedMailboxes\<Mailbox GUID>" -Force Start-Service MSExchangeIS
Start-Service MSExchangeIS
再次验证邮箱及数据库连通性,这里等待2分钟
重建恢复请求
这里会接着上次的进度恢复
后续2:
进度已完成100%,但是StatusDetail报错failedOther
使用命令查看详细:
Get-MailboxRestoreRequest | Get-MailboxRestoreRequestStatistics -IncludeReport | Format-List
2024/12/2 9:45:50 [IDC-SR-MAIL-06] 出现致命错误 TooManyBadItemsPermanentException。
使用命令调大BadItemPermanentException的值
Set-MailboxRestoreRequest -Identity "MailboxRestore" -BadItemLimit 50 -AcceptLargeDataLoss
查看进度
Get-MailboxRestoreRequest | Get-MailboxRestoreRequestStatistics -IncludeReport | Format-List
进度恢复
最后删除任务
Get-MailboxRestoreRequest | Where-Object {$_.Status -eq "Completed"} | Remove-MailboxRestoreRequest -Confirm:$false