如何恢复 Exchange Server 邮箱数据库
Exchange Server 崩溃了,并且无法再启动。我们希望将邮箱数据库安装在第二台 Exchange 服务器上。不幸的是,没有安装邮箱数据库的按钮。在本文中,您将了解如何在不丢失任何数据的情况下还原 Exchange Server 邮箱数据库。
介绍
我们有一个无法启动的失败的 Exchange Server 2019 (EX01-2019) 和一个稳定的 Exchange Server 2019 (EX03-2019)。
有两个邮箱数据库:
推荐阅读:使用 PowerShell 列出和删除 Exchange 邮箱中的日历事件
- 邮箱数据库DB01是 EX01-2019 上使用的唯一邮箱数据库。不幸的是,现在EX01-2019已离线,数据库邮箱挂载状态为未知(离线),没有任何效果。
- 邮箱数据库邮箱数据库安装到 EX03-2019 且未使用。它的健康状况良好。
那么我们如何将Exchange邮箱数据库恢复到新的Exchange Server EX03-2019呢?
我们有邮箱数据库DB01(.edb) 文件。但是我们如何将邮箱数据库 (.edb) 文件挂载到新的 Exchange Server 上呢?没有选项可以从 Exchange 管理中心的文件路径或使用 PowerShell 装载数据库。
Exchange Server 有一个功能称为数据库可移植性。这允许将一台邮箱服务器上的邮箱数据库移动并安装到同一组织内的另一台邮箱服务器上。
重要的:使用数据库可移植性恢复邮箱数据库时,源和目标 Exchange 服务器上的操作系统版本和 Exchange Server 版本必须相同。例如,如果 Exchange 2016 邮箱数据库之前安装在运行 Windows Server 2016 的服务器上,则仅当将数据库迁移到同时运行 Windows Server 2016 和 Exchange 2016 的服务器时,数据库可移植性才起作用。
步骤1.获取源邮箱数据库关闭状态
我们必须检查数据库关闭状态来决定下一步做什么。
启动命令提示符并运行以下命令。
eseutil /mh "C:BackupDB01DB01.edb"
您还可以运行以下命令以仅显示状态财产。
eseutil /mh "C:BackupDB01DB01.edb" | findstr "State:"
输出将显示该值干净关机或一个脏关机。
State: Clean Shutdown
步骤2.对源邮箱数据库执行软恢复
如果邮箱数据库处于干净关闭状态或者您没有事务日志,则可以跳过此步骤。
当数据库处于脏关闭状态且所有事务日志文件可用时,执行数据库的软恢复。这会将所有未提交的事务日志提交到数据库中,以便不会丢失数据。
在命令提示符中运行以下命令对邮箱数据库执行软恢复。
- /r: 日志前缀
- /l: 日志文件路径
- /d: 数据库文件路径
- /秒:检查点文件的路径
eseutil /r E00 /l "C:BackupDB01 Logs" /d "C:BackupDB01" /s "C:BackupDB01 Logs"
将出现以下输出。
Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 15.02
Copyright (C) Microsoft Corporation. All Rights Reserved.
Initiating RECOVERY mode...
Logfile base name: E00
Log files: C:BackupDB01 Logs
System files: C:BackupDB01 Logs
Database Directory: C:BackupDB01
Performing soft recovery...
Restore Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................
Operation completed successfully in 3.78 seconds.
步骤3.创建目标邮箱数据库
以管理员身份运行 Exchange 命令行管理程序。在将用于装载数据库的 Exchange Server 上创建新的邮箱数据库。指定数据库文件和事务日志的路径。
笔记:它将在路径中创建文件夹,但邮箱数据库文件或数据库日志不会出现在那里。仅当您挂载邮箱数据库时才会出现。但是,您现在不会装载数据库,因为您需要在后续步骤之一中将其替换为备份。
New-MailboxDatabase -Name "DB01-Recovered" -Server "EX03-2019" -EdbFilePath "E:DB01-RecoveredDB01.edb" -LogFolderPath "F:DB01-Recovered"
将出现以下输出。
Name Server Recovery ReplicationType
---- ------ -------- ---------------
DB01-Recovered EX03-2019 False None
WARNING: Please restart the Microsoft Exchange Information Store service on server EX03-2019 after adding new mailbox
databases.
将数据库标记为可覆盖。这-允许文件恢复参数指定是否允许从备份恢复数据库。
Set-MailboxDatabase "DB01-Recovered" -AllowFileRestore:$true
重要的:不要挂载邮箱数据库。首先,您必须移动源邮箱数据库文件。
步骤 4. 移动源邮箱数据库和日志文件
从备份或非启动 Exchange Server 获取邮箱数据库。
将源邮箱数据库和日志文件移动到您在上一步中创建的目标路径。
复制邮箱数据库DB01.edb。
将其粘贴到路径中E:DB01-已恢复关于 EX03-2019。
复制邮箱数据库DB01日志。如果您没有邮箱数据库事务日志,则可以跳过此步骤。
将其粘贴到路径中F:DB01-已回收。
步骤5.挂载目标数据库
挂载数据库DB01-已恢复。
Mount-Database "DB01-Recovered"
验证您是否看到邮箱数据库 DB01-Recovered 已安装在 Exchange 管理中心中。
步骤 6. 设置用户邮箱数据库
让我们重新定位邮箱DB01到DB01-已恢复。
获取数据库中的邮箱DB01。
Get-Mailbox -Database "DB01" -ResultSize Unlimited
它向用户显示他们已连接到 EX01-2019,这是完全正常的。
Name Alias ServerName ProhibitSendQuota
---- ----- ---------- -----------------
Administrator Administrator ex01-2019 Unlimited
Max Fraser Max.Fraser ex01-2019 Unlimited
Richard Hunter Richard.Hunter ex01-2019 Unlimited
Boris Campbell Boris.Campbell ex01-2019 Unlimited
Alysia Maverick Alysia.Maverick ex01-2019 Unlimited
Christopher Payne Christopher.Payne ex01-2019 Unlimited
Nicholas Murray Nicholas.Murray ex01-2019 Unlimited
James Paterson James.Paterson ex01-2019 Unlimited
sharedmailboxonprem sharedmailboxonprem ex01-2019 Unlimited
您必须将邮箱设置为新的数据库名称DB01-已恢复。
更改单个用户的邮箱数据库。这会将属性设置为邮箱数据库DB01-已恢复并自动设置服务器名称EX03-2019也。
Set-Mailbox -Identity "Boris.Campbell" -Database "DB01-Recovered" -Force
为所有用户设置。
Get-Mailbox -Database "DB01" -ResultSize Unlimited | Set-Mailbox -Database "DB01-Recovered" -Force
如果环境出现问题,获取邮箱cmdlet 将不会显示邮箱。因此,您需要使用拿来了cmdlet 代替。
Get-ADUser -Filter * -Properties msExchHomeServerName, homeMDB | Select-Object Name, msExchHomeServerName, homeMDB | Sort-Object Name | Out-GridView
这将显示所有用户。
并非所有用户都有邮箱,并且他们可以位于不同的数据库中。因此,我们仅筛选来自 Exchange Server EX01-2019 和邮箱数据库 DB01 的用户。
# Define variables
$msExchHomeServerName = "/o=EXOIP/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=EX01-2019"
$homeMDB = "CN=DB01,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=EXOIP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exoip,DC=local"
# Get users matching the specified criteria
Get-ADUser -Filter {msExchHomeServerName -eq $msExchHomeServerName -and homeMDB -eq $homeMDB} -Properties msExchHomeServerName, homeMDB | Select-Object Name, msExchHomeServerName, homeMDB | Sort-Object Name | Out-GridView
这就是输出的样子。
让我们设置新的邮箱数据库DB01-已恢复对于所有过滤的用户。
# Define variables
$msExchHomeServerName = "/o=EXOIP/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=EX01-2019"
$homeMDB = "CN=DB01,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=EXOIP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exoip,DC=local"
# Get users matching the specified criteria
$users = Get-ADUser -Filter {msExchHomeServerName -eq $msExchHomeServerName -and homeMDB -eq $homeMDB} -Properties SamAccountName, msExchHomeServerName, homeMDB
# Iterate through each user and set the mailbox database
foreach ($user in $users) {
Set-Mailbox -Identity $user.SamAccountName -Database "DB01-Recovered" -Force
Write-Host "Mailbox database set for user $($user.SamAccountName)" -ForegroundColor Green
}
上述命令仅重新定位邮箱,而不是存档邮箱。要重新定位存档邮箱,必须更改 msExchArchiveDatabaseLink 属性值。
查找邮箱数据库 DB01 上的存档邮箱。
$msExchArchiveDatabaseLink = "CN=DB01,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=EXOIP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exoip,DC=local"
# Get users matching the specified criteria
Get-ADUser -Filter { msExchArchiveDatabaseLink -eq $msExchArchiveDatabaseLink } -Properties SamAccountName, msExchArchiveDatabaseLink, msExchHomeServerName | Select-Object Name, msExchArchiveDatabaseLink, msExchHomeServerName | Sort-Object Name | Out-GridView
让我们设置新的邮箱数据库DB01-已恢复对于所有存档邮箱。
# Define variable
$msExchArchiveDatabaseLink = "CN=DB01,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=EXOIP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exoip,DC=local"
$msExchArchiveDatabaseLinkNew = "CN=DB01-Recovered,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=EXOIP,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exoip,DC=local"
# Get users matching the specified criteria
$users = Get-ADUser -Filter { msExchArchiveDatabaseLink -eq $msExchArchiveDatabaseLink } -Properties msExchArchiveDatabaseLink
# Update the msExchArchiveDatabaseLink attribute for each user
foreach ($user in $users) {
Set-ADUser -Identity $user -Replace @{msExchArchiveDatabaseLink = $msExchArchiveDatabaseLinkNew }
Write-Host "Mailbox database set for user $($user.SamAccountName)" -ForegroundColor Green
}
步骤 7. 获取目标数据库上的邮箱
验证邮箱是否托管在邮箱数据库 DB01-Recovered 中。
Get-Mailbox -ResultSize Unlimited -Database "DB01-Recovered"
Get-Mailbox -ResultSize Unlimited | Where-Object {$_.ArchiveDatabase -like "DB01-Recovered"}
检查数据库DB01是否有邮箱,不会有结果。
Get-Mailbox -ResultSize Unlimited -Database "DB01"
Get-Mailbox -ResultSize Unlimited | Where-Object {$_.ArchiveDatabase -like "DB01"}
接下来怎么办?
邮箱数据库DB01-已恢复在线,每个人都可以连接到 Exchange Server 并继续工作。
您现在可以恢复 EX01-2019 服务器。请按照以下文章之一恢复 Exchange Server:
- 恢复 Exchange Server(独立)
- 恢复 Exchange DAG 成员服务器
如果您不使用/模式:恢复服务器交换机,如两篇文章所示,您将在组织中安装新的 Exchange Server。虽然这不是推荐的方法,但它会起作用。但是,您必须从 ADSI 编辑中删除旧的 Exchange Server,并在 Exchange Server 上设置更多后期配置。
就是这样!
结论
您学习了如何还原 Exchange Server 邮箱数据库。备份邮箱数据库始终至关重要,因为这是存储所有邮箱信息的地方。按照以下步骤将备份的邮箱数据库安装到另一台 Exchange Server。
您喜欢这篇文章吗?您可能还喜欢在 Exchange Server 中创建用户邮箱。不要忘记关注我们并分享这篇文章。
