Restore einer Exchange 2010 Mailbox mit Bordmitteln

Zuletzt aktualisiert am 25. Dezember 2023 von Lars

Ausgangslage

Wir haben eine Datensicherung und müssen aus dieser Daten einer einzelnen
Mailbox Recovern. Wie geht das mit Windows Boardmitteln?

Alternativen

Wer nicht mit Bordmitteln arbeiten will, der sollte sich unbedingt auch das Stellar Exchange Recovery Tool anschauen.

Soft-Recovery vs. Hard-Recovery

Beim Soft-Recovery ist die Datenbank und die Logfiles noch in Ordnung und am
ursprünglichen Ort. Würde eine solche Datenbank von Exchange neu gemountet
werden, würde erst die Checkpoint-Datei überprüft und die Logs neu eingespielt
werden. Fehlt eine Checkpoint-Datei, beginnt das Replay bei der ältesten,
verfügbaren Log-Datei.

Hard-Recovery braucht es nach dem Restore von einem Online-Backup, also auch
in unserem Fall. Der Prozess ist ähnlich wie beim Soft-Recovery. Zusätzlich gilt
aber

  • Checkpoint-Datei wird ignoriert
  • Log-Replay funktioniert auch aus einem anderen Ordner heraus
  • Datenbank kann auch repariert werden, wenn andere Datenbanken in der
    gleichen Gruppe fehlen.

Restore

Gehen wir davon aus, wir haben eine Exchange-Datenbank gesichert und müssen
nun einzelne Mails daraus restaurieren. Der komplette Ordner (Datenbank und
Logfiles) liegt bereits auf dem Server vor.

Gewusst? Ein Restore ist nur auf einem Server der gleichen Exchange-Organisation möglich.

Hierzu sind mehrere Schritte nötig:

Überprüfen der Datenbank auf "Clean Shutdown"

Hierzu nutzen wir eseutil in der Exchange Management Shell. Am besten hierzu
erst in das Verzeichnis mit der Datenbank wechseln.

[PS] D:restoreexchdb> eseutil /mh '.Mailbox Database 01.edb'

Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 14.03
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating FILE DUMP mode...
Database: .MailboxDatabase.edb

DATABASE HEADER:
Checksum Information:
Expected Checksum: 0x11827340
Actual Checksum: 0x11827340

Fields:
File Type: Database
Checksum: 0x11827340
Format ulMagic: 0x89abcdef
Engine ulMagic: 0x89abcdef
Format ulVersion: 0x620,17
Engine ulVersion: 0x620,17
Created ulVersion: 0x620,17
DB Signature: Create time:05/30/2013 16:42:11 Rand:36349257 Computer:
cbDbPage: 32768
dbtime: 40747 (0x9f2b)
State: Dirty Shutdown
Log Required: 76-76 (0x4c-0x4c)

Log Committed: 0-77 (0x0-0x4d)
Log Recovering: 0 (0x0)
GenMax Creation: 08/16/2013 13:40:01
Shadowed: Yes
Last Objid: 659
Scrub Dbtime: 0 (0x0)
Scrub Date: 00/00/1900 00:00:00
Repair Count: 0
Repair Date: 00/00/1900 00:00:00
Old Repair Count: 0
Last Consistent: (0x4A,81,1ED) 08/16/2013 13:39:43
Last Attach: (0x4C,9,86) 08/16/2013 13:40:01
Last Detach: (0x0,0,0) 00/00/1900 00:00:00
Dbid: 1
Log Signature: Create time:05/30/2013 16:42:11 Rand:36339974 Computer:
OS Version: (6.1.7601 SP 1 NLS ffffffff.ffffffff)

Previous Full Backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00

Previous Incremental Backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00

Previous Copy Backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00

Previous Differential Backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00

Current Full Backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00

Current Shadow copy backup:
Log Gen: 0-0 (0x0-0x0)
Mark: (0x0,0,0)
Mark: 00/00/1900 00:00:00

cpgUpgrade55Format: 0
cpgUpgradeFreePages: 0
cpgUpgradeSpaceMapPages: 0

ECC Fix Success Count: none
Old ECC Fix Success Count: none
ECC Fix Error Count: none
Old ECC Fix Error Count: none
Bad Checksum Error Count: none
Old bad Checksum Error Count: none

Last checksum finish Date: 00/00/1900 00:00:00
Current checksum start Date: 00/00/1900 00:00:00
Current checksum page: 0

Operation completed successfully in 0.32 seconds.

Hier haben wir leider einen "Dirty Shutdown". D. h., es wurden noch nicht alle Logfiles in die Datenbank eingespielt.

In der Rubrik "Log Required stehen die Log-Files, die fehlen. Überprüfen Sie erst, ob die Logfiles überhaupt da sind. Eventuell finden Sie diese ja in älteren Backups?

Überprüfen der Log-Files

Haben Sie einen "Dirty Shutdown" und die erforderlichen Log-Files sind im richtigen Verzeichnis vorhanden, dann überprüfen Sie diese mit eseutil. In einigen Artikeln kann man etwas in der Art nachlesen:

[PS] D:restoreexchdb>eseutil /ml
D:restoreexchdb

Extensible Storage Engine Utilities
for Microsoft(R) Exchange Server
Version 14.03
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating FILE DUMP mode...

Base name: exc
Log file: D:restoreexchdb
ERROR: Cannot open log file (D:restoreexchdb). Error -1032.

Operation terminated with error
-1032 (JET_errFileAccessDenied, Cannot access file, the file is locked or in use)
after
0.62 seconds.

Da ging wohl etwas komplett schief. Manchmal hilft ein Blick in das Ereignisprotokoll, was in diesem Fall allerdings auch nicht mehr sagt.

Generell sollt man im Zweifelsfall die Hilfe von ESEUTIL zu Rate ziehen, bevor man mit Kanonen auf Spatzen schiesst, bzw. ein Hard-Recovery mit Datenverlust durchzieht.

Korrekt muss der Befehl lauten:

[PS] D:restoreexchdb>eseutil /ml ./E00

Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 14.03
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating FILE DUMP mode...

Verifying log files...
Base name: E00

Log file: D:restoreexchdbe0000000001.log - OK
Log file: D:restoreexchdbe0000000002.log - OK
Log file: D:restoreexchdbe0000000003.log - OK
Log file: D:restoreexchdbe0000000004.log - OK
Log file: D:restoreexchdbe0000000005.log - OK
Log file: D:restoreexchdbe0000000006.log - OK
Log file: D:restoreexchdbe0000000007.log - OK
Log file: D:restoreexchdbe0000000008.log - OK
Log file: D:restoreexchdbe0000000009.log - OK
Log file: D:restoreexchdbe000000000a.log - OK
Log file: D:restoreexchdbe000000000b.log - OK
Log file: D:restoreexchdbe000000000c.log - OK
Log file: D:restoreexchdbe000000000d.log - OK
Log file: D:restoreexchdbe000000000e.log - OK
Log file: D:restoreexchdbe000000000f.log - OK
Log file: D:restoreexchdbe0000000010.log - OK
Log file: D:restoreexchdbe0000000011.log - OK
Log file: D:restoreexchdbe0000000012.log - OK
Log file: D:restoreexchdbe0000000013.log - OK
Log file: D:restoreexchdbe0000000014.log - OK
Log file: D:restoreexchdbe0000000015.log - OK
Log file: D:restoreexchdbe0000000016.log - OK
Log file: D:restoreexchdbe0000000017.log - OK
Log file: D:restoreexchdbe0000000018.log - OK
Log file: D:restoreexchdbe0000000019.log - OK
Log file: D:restoreexchdbe000000001a.log - OK
Log file: D:restoreexchdbe000000001b.log - OK
Log file: D:restoreexchdbe000000001c.log - OK
Log file: D:restoreexchdbe000000001d.log - OK
Log file: D:restoreexchdbe000000001e.log - OK
Log file: D:restoreexchdbe000000001f.log - OK
Log file: D:restoreexchdbe0000000020.log - OK
Log file: D:restoreexchdbe0000000021.log - OK
Log file: D:restoreexchdbe0000000022.log - OK
Log file: D:restoreexchdbe0000000023.log - OK
Log file: D:restoreexchdbe0000000024.log - OK
Log file: D:restoreexchdbe0000000025.log - OK
Log file: D:restoreexchdbe0000000026.log - OK
Log file: D:restoreexchdbe0000000027.log - OK
Log file: D:restoreexchdbe0000000028.log - OK
Log file: D:restoreexchdbe0000000029.log - OK
Log file: D:restoreexchdbe000000002a.log - OK
Log file: D:restoreexchdbe000000002b.log - OK
Log file: D:restoreexchdbe000000002c.log - OK
Log file: D:restoreexchdbe000000002d.log - OK
Log file: D:restoreexchdbe000000002e.log - OK
Log file: D:restoreexchdbe000000002f.log - OK
Log file: D:restoreexchdbe0000000030.log - OK
Log file: D:restoreexchdbe0000000031.log - OK
Log file: D:restoreexchdbe0000000032.log - OK
Log file: D:restoreexchdbe0000000033.log - OK
Log file: D:restoreexchdbe0000000034.log - OK
Log file: D:restoreexchdbe0000000035.log - OK
Log file: D:restoreexchdbe0000000036.log - OK
Log file: D:restoreexchdbe0000000037.log - OK
Log file: D:restoreexchdbe0000000038.log - OK
Log file: D:restoreexchdbe0000000039.log - OK
Log file: D:restoreexchdbe000000003a.log - OK
Log file: D:restoreexchdbe000000003b.log - OK
Log file: D:restoreexchdbe000000003c.log - OK
Log file: D:restoreexchdbe000000003d.log - OK
Log file: D:restoreexchdbe000000003e.log - OK
Log file: D:restoreexchdbe000000003f.log - OK
Log file: D:restoreexchdbe0000000040.log - OK
Log file: D:restoreexchdbe0000000041.log - OK
Log file: D:restoreexchdbe0000000042.log - OK
Log file: D:restoreexchdbe0000000043.log - OK
Log file: D:restoreexchdbe0000000044.log - OK
Log file: D:restoreexchdbe0000000045.log - OK
Log file: D:restoreexchdbe0000000046.log - OK
Log file: D:restoreexchdbe0000000047.log - OK
Log file: D:restoreexchdbe0000000048.log - OK
Log file: D:restoreexchdbe0000000049.log - OK
Log file: D:restoreexchdbe000000004a.log - OK
Log file: D:restoreexchdbe000000004b.log - OK
Log file: D:restoreexchdbE000000004C.log - OK
Log file: D:restoreexchdbE00.log - OK

No damaged log files were found.

Operation completed successfully in 1.497 seconds.

Soft Recovery durchführen

Sind alle Logfiles vorhanden und OK, können Sie ein Soft Recovery durchführen.

Traut man den Quellen, gibt man ein:

[PS] D:restoreexchdb>eseutil /R E00 /l
"d:restoreexchdb" /d "d:restoreexchdb"

Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 14.03
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating RECOVERY mode...
Logfile base name: E00
Log files: d:restoreexchdb
System files: <current directory>
Database Directory: d:restoreexchdb

Performing soft recovery...
Restore Status (% complete)

0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................

Operation completed successfully in 2.714 seconds.

Ein Parameter /i ist bei Exchange 2010 nicht nötig! Ebensowenig darf man bei /d den Pfad mit Datei angeben!

Jetzt gibt man erneut

[PS] D:restoreexchdb> eseutil /mh '.Mailbox Database 01.edb'

und und bekommt hoffentlich den "Clean Shutdown" hat.

Ist dies nicht der Fall, ist zu prüfen, ob die notwendigen Logdateien ("Log Required") wirklich vorhanden sind.

Hard Recovery - die letzte Option

Hard Recovery sollte nur nötig sein, wenn es keine passenden Logfiles gibt. Oft steht geschrieben, wenn es halt nicht klappt mit dem Soft-Recovery...

Viel häufiger liegt es an falscher Anwendung von ESEUTIL. Pauschal gesagt gilt: Wenn das Logfile vorhanden ist, Soft Recovery!

[PS] Y:sharedexchangemailboxMailbox
Database 01>eseutil /P ".Mailbox Database 01.edb"

Extensible Storage Engine Utilities for
Microsoft(R) Exchange Server
Version 14.03
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating REPAIR mode...
Database: .Mailbox Database 01.edb
Temp. Database: TEMPREPAIR5012.EDB

Checking database integrity.

The database is not up-to-date. This
operation may find that
this database is corrupt because data from the log files has
yet to be placed in the database.

To ensure the database is up-to-date please
use the 'Recovery' operation.

Scanning Status (% complete)

0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................

Scanning the database.

Scanning Status (% complete)

0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................

Repairing damaged tables.

Scanning Status (% complete)

0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|

Deleting unicode fixup table.

Deleting MSObjids.

Deleting MSysLocales.
...................................................

Repair completed. Database corruption has
been repaired!

Note:
It is recommended that you immediately perform a full backup
of this database. If you restore a backup made before the
repair, the database will be rolled back to the state
it was in at the time of that backup.

Operation completed successfully with 595 (JET_wrnDatabaseRepaired, Database
corruption has been repaired) after 339.676
seconds.

Alle Logfiles aus dem Verzeichnis löschen, dann sollte sich die Datenbank als
Recovery-Datenbank mounten lassen.

Recovery Database anlegen

[PS] C:>New-MailboxDatabase RecoveryDB
-Server LABEXCHANGE -Recovery:$true -EdbFilePath "D:restoreexchdbMailboxDatab
ase.edb" -LogFolderPath "D:restoreexchdb"
WARNING: Recovery database 'RecoveryDB' was created using existing file D:restoreexchdbMailboxDatabase.edb.
The
database must be brought into a clean shutdown state before it can be mounted.

Name Server Recovery ReplicationType
---- ------ -------- ---------------
RecoveryDB LABEXCHANGE True None

Recovery Database mounten

[PS] C:>Mount-Database RecoveryDB

Übersicht über vorhandene Mailboxen nehmen

[PS] C:>Get-MailboxStatistics -Database
RecoveryDB

DisplayName
ItemCount     StorageLimitStatus
-----------
---------     ------------------
William T. Riker
2
BelowLimit
Hikaru Sulu
2
BelowLimit
Microsoft Exchange
2
NoChecking
Discovery Search Mailbox        2
BelowLimit
Administrator
6
BelowLimit
Microsoft Exchange App...       2
BelowLimit
SystemMailbox{cef86524...       2
BelowLimit
James T. Kirk
5
BelowLimit
Microsoft Exchange App...       2
NoChecking
Spock
3
BelowLimit
Leonard McCoy
3
BelowLimit

Eigentliches Recovery der Daten

[PS] C:>Restore-Mailbox -Identity "James
T. Kirk" -RecoveryDatabase RecoveryDB -RecoveryMailbox "James T. Kirk" -Target
Folder Restore

Confirm
Are you sure you want to perform this action?
Recovering mailbox content from mailbox 'James T. Kirk' in the recovery database
'RecoveryDB' to the mailbox for 'James
T. Kirk (jkirk@one.local)'. This operation may take a long time to complete.
[Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is "Y"): y

RunspaceId :
333d86bd-252c-4fb2-9cbc-2472cc824deb
Identity : ONE.LOCAL/One/James T. Kirk
DistinguishedName : CN=James T. Kirk,OU=One,DC=ONE,DC=LOCAL
DisplayName : James T. Kirk
Alias : jkirk
LegacyExchangeDN : /o=First Organization/ou=Exchange Administrative Group
(FYDIBOHF23SPDLT)/cn=Recipien
ts/cn=James T. Kirk4a5
PrimarySmtpAddress : jkirk@one.local
SourceServer : LABEXCHANGE.ONE.LOCAL
SourceDatabase : RecoveryDB
SourceGlobalCatalog : LABDC2012
SourceDomainController :
TargetGlobalCatalog : LABDC2012
TargetDomainController :
TargetMailbox : ONE.LOCAL/One/James T. Kirk
TargetServer : LABEXCHANGE.ONE.LOCAL
TargetDatabase : Mailbox Database 0353679515
MailboxSize : 798.4 KB (817,604 bytes)
IsResourceMailbox : False
SIDUsedInMatch :
SMTPProxies :
SourceManager :
SourceDirectReports :
SourcePublicDelegates :
SourcePublicDelegatesBL :
SourceAltRecipient :
SourceAltRecipientBL :
SourceDeliverAndRedirect :
MatchedTargetNTAccountDN :
IsMatchedNTAccountMailboxEnabled :
MatchedContactsDNList :
TargetNTAccountDNToCreate :
TargetManager :
TargetDirectReports :
TargetPublicDelegates :
TargetPublicDelegatesBL :
TargetAltRecipient :
TargetAltRecipientBL :
TargetDeliverAndRedirect :
Options : Default
SourceForestCredential :
TargetForestCredential :
TargetFolder : RestoreRecovered Data - James T. Kirk - 08/16/2013 14:39:33
PSTFilePath :
RecoveryMailboxGuid : 8389fb86-b3ca-447a-af47-a819f9d14ba7
RecoveryMailboxLegacyExchangeDN : /O=FIRST ORGANIZATION/OU=EXCHANGE
ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIEN
TS/CN=JAMES T. KIRK4A5
RecoveryMailboxDisplayName : James T. Kirk
RecoveryDatabaseGuid : b4cff0d5-3f34-4c7f-b955-386b5576316e
StandardMessagesDeleted : 0
AssociatedMessagesDeleted : 0
DumpsterMessagesDeleted : 0
MoveType : Restore
MoveStage : Completed
StartTime : 16.08.2013 14:39:36
EndTime : 16.08.2013 14:39:38
StatusCode : 0
StatusMessage : Dieses in der Datenbank für die Wiederherstellung enthaltene
Postfach wurde im Zielb
enutzerpostfach wiederhergestellt.
ReportFile :
D:exchange2010LoggingMigrationLogsrestore-Mailbox20130816-143933-5022022.xml
ServerName : LABEXCHANGE.ONE.LOCAL

Die Daten sind jetzt im Kirk-Postfach im Unterordner Restore zu finden.
Exchange 2010 LAB - Wiederherstellung einer Mailbox

Sollen die Daten in ein anderes Postfach wiederhergestellt werden, dann heisst der Befehl z.B.

[PS] C:>Restore-Mailbox -Identity
"Administrator" -RecoveryDatabase RecoveryDB -RecoveryMailbox "James T. Kirk"
-Target
Folder "Restore"

Confirm
Are you sure you want to perform this action?
Recovering mailbox content from mailbox 'James T. Kirk' in the recovery database
'RecoveryDB' to the mailbox for
'Administrator (Administrator@one.local)'. This operation may take a long time
to complete.
[Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is "Y"): y

RunspaceId : 39d6cec3-60df-4fc5-b935-021f169f0b50
Identity : ONE.LOCAL/Users/Administrator
DistinguishedName : CN=Administrator,CN=Users,DC=ONE,DC=LOCAL
DisplayName : Administrator
Alias : Administrator
LegacyExchangeDN : /o=First Organization/ou=Exchange Administrative Group
(FYDIBOHF23SPDLT)/cn=Recipien
ts/cn=Administrator
PrimarySmtpAddress : Administrator@one.local
SourceServer : LABEXCHANGE.ONE.LOCAL
SourceDatabase : RecoveryDB
SourceGlobalCatalog : LABDC2012
SourceDomainController :
TargetGlobalCatalog : LABDC2012
TargetDomainController :
TargetMailbox : ONE.LOCAL/Users/Administrator
TargetServer : LABEXCHANGE.ONE.LOCAL
TargetDatabase : Mailbox Database 0353679515
MailboxSize : 798.4 KB (817,604 bytes)
IsResourceMailbox : False
SIDUsedInMatch :
SMTPProxies :
SourceManager :
SourceDirectReports :
SourcePublicDelegates :
SourcePublicDelegatesBL :
SourceAltRecipient :
SourceAltRecipientBL :
SourceDeliverAndRedirect :
MatchedTargetNTAccountDN :
IsMatchedNTAccountMailboxEnabled :
MatchedContactsDNList :
TargetNTAccountDNToCreate :
TargetManager :
TargetDirectReports :
TargetPublicDelegates :
TargetPublicDelegatesBL :
TargetAltRecipient :
TargetAltRecipientBL :
TargetDeliverAndRedirect :
Options : Default
SourceForestCredential :
TargetForestCredential :
TargetFolder : RestoreRecovered Data - James T. Kirk - 08/16/2013 19:20:19
PSTFilePath :
RecoveryMailboxGuid : 8389fb86-b3ca-447a-af47-a819f9d14ba7
RecoveryMailboxLegacyExchangeDN : /O=FIRST ORGANIZATION/OU=EXCHANGE
ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIEN
TS/CN=JAMES T. KIRK4A5
RecoveryMailboxDisplayName : James T. Kirk
RecoveryDatabaseGuid : b4cff0d5-3f34-4c7f-b955-386b5576316e
StandardMessagesDeleted : 0
AssociatedMessagesDeleted : 0
DumpsterMessagesDeleted : 0
MoveType : Restore
MoveStage : Completed
StartTime : 16.08.2013 19:20:22
EndTime : 16.08.2013 19:20:24
StatusCode : 0
StatusMessage : Dieses in der Datenbank für die Wiederherstellung enthaltene
Postfach wurde im Zielb
enutzerpostfach wiederhergestellt.
ReportFile : D:exchange2010LoggingMigrationLogsrestore-Mailbox20130816-192018-7449354.xml
ServerName : LABEXCHANGE.ONE.LOCAL

Die Datenbank können Sie nach erfolgtem Export (z.B. mittels PST) mittels

Remove-MailboxDatabase

wieder löschen.

Quellen

Du willst meine Arbeit unterstützen? Dann freue ich mich über eine kleine Spende!

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert