In a previous article I demonstrated how to restore Exchange Server 2013 databases using Windows Server Backup. In that scenario an entire database that had been lost needed to be recovered.
However in other recovery scenarios you may only want to recover one or several mailboxes, or even specific mailbox items, from a point in time without having to overwrite the entire database.
In Exchange Server 2013 we can do this with recovery databases, which operate basically the same as Exchange Server 2010 recovery databases. A recovery database allows us to mount a copy of a database on an Exchange server without having any impact on the live copy of that same database. In fact we can even use recovery databases to mount copies of databases from other servers within the same Exchange organization, thanks to database portability.
When a recovery database is mounted we can inspect it and restore items or mailboxes from it, but no clients can connect to it. So as the name suggests it can only be used for recovery purposes, not for active mailbox functionality.
Restoring an Exchange Server 2013 Database Using Windows Server Backup
Some backup applications have the capability to handle some or all of the process of creating a recovery database, restoring the database files, and extracting the desired mailboxes or items to a destination.
When using Windows Server Backup to perform a recovery you need to do pretty much all of the work yourself, so it is a good exercise for learning how to recovery Exchange 2013 databases.
In Windows Server Backup click Recover to start a new recovery.
Choose the location where the backup is stored. In this example my backups are stored on the same server.
Choose the backup date and time that you wish to restore.
When recovering entire databases we would normally choose “Applications” and restore every database that was backed up on the server. However when working with recovery databases we can choose Files and folders and only restore the specific database and log files we need.
Browse through the tree of available items and choose the database and log files you want to restore. I am restoring DB02 in this example. Note that restoring the database and logs will be two separate restore jobs if they are located in folders where you can’t select both at the same time.
Choose to restore to Another location, and select a folder that has enough free space to hold the restored data.
Confirm your selections and click Recover to begin the restore.
You can close the progress window if you like and the job will continue running in the background.
I’ve also run a second recovery job to restore the log files for DB02.
After you’ve completed your file restores the next step is making the database mountable.
Making the Restored Database Mountable
So far we’ve restored the database and transaction log files from a recent backup, but haven’t created the actual recovery database yet. If we created the recovery database right now, pointing it at the restored database and log files, and then tried to mount it, the database would fail to mount.
The reason for this is that the restored database is in a “dirty shutdown” state, which you can see by navigating to the restored database folder and running eseutil.exe.
F:\RecoveryDB\>eseutil /mh DB02.edb Extensible Storage Engine Utilities for Microsoft(R) Exchange Server Version 15.00 Copyright (C) Microsoft Corporation. All Rights Reserved. Initiating FILE DUMP mode... Database: DB02.edb State: Dirty Shutdown
I have abbreviated the output of the above command, but basically you are looking for the “State” shown in the command output.
So we need to get the database file to a “clean shutdown” state before it can be mounted.
In my example I have:
- A database file named DB02.edb in F:RecoveryDB
- Transaction logs with the filename prefix E01 in F:RecoveryLogs
So my eseutil “soft recovery” command line will be:
F:\RecoveryDB\>eseutil /r E01 /l F:\RecoveryLogs /d F:\RecoveryDB
What that command means:
- /r for “recovery” mode
- E01 for the log file name prefix
- /l (lower-case L) to specify the path to the log files
- /d to specify the path to the database file (but do not include the name of the file itself)
F:\RecoveryDB\>eseutil /r E01 /l F:\RecoveryLogs /d F:\RecoveryDB Extensible Storage Engine Utilities for Microsoft(R) Exchange Server Version 15.00 Copyright (C) Microsoft Corporation. All Rights Reserved. Initiating RECOVERY mode... Logfile base name: E01 Log files: F:\RecoveryLogs System files: Database Directory: F:\RecoveryDB Performing soft recovery... Restore Status (% complete) 0 10 20 30 40 50 60 70 80 90 100 |----|----|----|----|----|----|----|----|----|----| ................................................... Operation completed successfully in 2.359 seconds.
After the command has completed check the state of the database with eseutil /mh again.
F:\RecoveryDB\>eseutil /mh DB02.edb Extensible Storage Engine Utilities for Microsoft(R) Exchange Server Version 15.00 Copyright (C) Microsoft Corporation. All Rights Reserved. Initiating FILE DUMP mode... Database: DB02.edb State: Clean Shutdown
If soft recovery does not bring the database to a clean shutdown state you may consider a hard recovery, which will make the database mountable but risks some data loss in the process.
F:\RecoveryDB\>eseutil /p DB02.edb
When the database is in a clean shutdown state you can create the recovery database.
Creating a Recovery Database in Exchange Server 2013
Creating a recovery database is performed using the New-MailboxDatabase cmdlet with the -Recovery switch. Notice that in this example I am using the same database and log file locations as my restored data.
[PS] C:\>New-MailboxDatabase -Server E15MB1 -Name RecoveryDB -Recovery -EdbFilePath F:\RecoveryDB\DB02.edb -LogFolderPath F:\RecoveryLogs WARNING: Recovery database 'RecoveryDB' was created using existing file F:\RecoveryDB\DB02.edb. The database must be brought into a clean shutdown state before it can be mounted. Name Server Recovery ReplicationType ---- ------ -------- --------------- RecoveryDB E15MB1 True None WARNING: Please restart the Microsoft Exchange Information Store service on server E15MB1 after adding new mailbox databases.
For more information about the warning to restart the Information Store service read this article. For a recovery database that you are only mounting for a short period of time an Information Store service restart may not be necessary.
Mount the recovery database.
[PS] C:\>Mount-Database RecoveryDB
Working with Recovery Databases
With the recovery database mounted you can use Get-MailboxStatistics to confirm that it contains mailbox database.
[PS] C:\>Get-MailboxStatistics -Database RecoveryDB | ft -auto DisplayName ItemCount StorageLimitStatus LastLogonTime ----------- --------- ------------------ ------------- SystemMailbox{849e4450-d32d-4a1b-90cf-5d0ca8109884} 239 Administrator 102 6/02/2014 11:06:56 PM Discovery Search Mailbox 3 Aisha Bhari 14996 7/02/2014 2:05:18 AM Alison Lindsay 5848 7/02/2014 12:04:59 AM Ambrine Berry 5849 7/02/2014 1:01:17 AM Ann Parker 6107 7/02/2014 1:01:34 AM Bina Faria 15055 7/02/2014 2:03:36 AM ...snip...
After you have confirmed that data is available for restore you can begin your mailbox or item recovery.
In the next articles in this series we’ll cover different mailbox and item recovery scenarios.
Hi Paul,
I have Exchange Server 2013 working in good condition, if my Active directory hardware failure, how can up my Exchange server 2013.
Thanks for your early response.
Dear Paul
my database are in dirty shutdown when i run eseutil /ml E01 it is showing in the logs .it seems log files are corrupted “Error – JET_errLogFileCorrupt ”
i can restore and mount the database if i remove all logs files but i will lose some data which is not commited with edb file .
let me know any procedure to recover logs file and mount that database without any lose of data .
also i want to know if i delete all logs and mount database how much possibility of dataloss “a day or two”.
Hello Paul,
Hoping to get an answer as to whether or not this is possible…I have Exchange 2013 .edb and its log files that are in clean shutdown state. I have to recover it to a new domain and new server.
Built a new domain, setup new exchange and am trying to mount this .edb to no avail. It seems obvious that it cannot mount as the AD holds no GID of the original DB (at least according to event logs).
Error I am getting while trying to mount it is:
Failed to mount database “MailboxDatabase”. Error: An Active Manager operation failed. Error: The database action
failed. Error: Operation failed with message: MapiExceptionCallFailed: Unable to mount database. (hr=0x80004005,
ec=1105)
Is it even possible to restore without having original AD restored? I built AD, server, ORG using same naming but IDs in AD will obviously be different.
Any suggestion is greatly appreciated.
How can you tell if one of your current databases is a recovery database? We have Exchange 2013.
Thanks!
Hi Paul,
I am trying to create a RecoveryDB, but I have the following error:
Active Directory operation failed on DC02. This error is not retriable. Additional information: The
attribute syntax specified to the directory service is invalid.
Active directory response: 0000200B: AtrErr: DSID-031519E0, #1:
0: 0000200B: DSID-031519E0, problem 1002 (INVALID_ATT_SYNTAX), data 0, Att 200f4 (homeMDB):len 144
+ CategoryInfo : NotSpecified: (:) [New-MailboxDatabase], ADOperationException
+ FullyQualifiedErrorId : [Server=Exchange,RequestId=a00d73b3-0556-466c-8036-21c95921720f,TimeStamp=8/15/2019 2:5
9:48 PM] [FailureCategory=Cmdlet-ADOperationException] 99F29051,Microsoft.Exchange.Management.SystemConfigurationT
asks.NewMailboxDatabase
+ PSComputerName : Exchange
I am testing my backups to see if I can restore mailboxes but I found the problem above, I would like to fix it to avoid to have issues in a real needs of recovery process.
Did you ever get a solution for this.
I am also using dell EMC avamar to restore my database but it is failing with the same error.
Just to let you know that the avamar plug-in which i am using to for restore creates recovery db automatically when the restore is initiated but still fails with this error.
Paul,
Does “No, recovery databases can only be used on the same version as the server they come from.” apply to 2013 DB on a 2016 server since they are both version 15?
Based on the build numbers , Exchange 2016 could be considered 2013 sp1 😉
Nick
Looks like the answer is ‘No’ for a 2013 DB in a 2016 RDB but ‘Yes’ for a 2016 DB in a 2019 RDB’
https://docs.microsoft.com/en-us/exchange/high-availability/disaster-recovery/recovery-databases?view=exchserver-2016
https://docs.microsoft.com/en-us/exchange/high-availability/disaster-recovery/recovery-databases?view=exchserver-2019
Looks like I have answered my own question. Helps to read the Documentation.
Hi Paul,
On trying to mount the database i get this error message “Error: Operation failed with message: MapiExceptionTooManyMountedDatabases: Unable to mount database.”
Trying to force the mount won’t work either. Any ideas?
Pingback: Exchange 2013 Restore « rakhesh.com
Hi can you pls advise how do we do a hard recovery?
Wow- I will give it a try. Thank you, you Rock!
Dell Pro-support helped me get my recovery database functional. After following your instructions with eseutil, the New-MailboxDatabase commandlet created a new recovery database that was a fraction the size of the original “restored from backup” database. The Dell support engineer changed the names, first changing the small RecoveryDB.edb to OldRecoveryDB.edb and then naming the original, large “restored from backup” database, RecoveryDB. He then ran the commandlet Set-MailboxDatabase recoverydb -AllowFileRestore $true and then mounted the database. Restores worked perfectly after that.
I don’t know if this is a bug in Exchange 2013 CU21 or something peculiar to my servers. But good to put it out here on the web in case it happens to someone else.
Thank you, Paul. I continually refer to your blog for answers and have completed all but your latest PluralSight course. Managing Exchange just might be impossible if it weren’t for your excellent articles and teaching.
The Real Person!
Author Paul Cunningham acts as a real person and passed all tests against spambots. Anti-Spam by CleanTalk.
Yes. If you create the new recovery database in a path that is different to where the restored database files sit, then it will create a new database file which is very small. You then need to copy the restored files into place.
If you create the new recovery database and point it to the path where you’ve already restored the files to, it will just use those files.
Either method works. In my article above I am demonstrating the second approach.
I followed your directions – no path changes. Still got that odd result. Your instructions are perfect and very clear… as always.
Fine with me if you’d like to remote in and verify.
How can you tell if one of your current databases is a recovery database? Exchange 2013.
I’m running Exchange 2013 CU21. After restoring a database from backup & following your instructions above all works well except the new RecoveryDB has a content index state that is disabled. I have run Set-MailboxDatabase RecoveryDB -IndexEnabled $True before and after starting and stopping search services.
When I run Get-MailboxDatabase RecoveryDB | Select Name, IndexEnabled the output is IndexEnabled True. But Get-MailboxdatabaseCopyStatus still shows ContentIndexState Disabled.
Any idea how to clear this error?
The Real Person!
Author Paul Cunningham acts as a real person and passed all tests against spambots. Anti-Spam by CleanTalk.
The recovery DB doesn’t need a working index. It only exists so you can extract mailbox contents back into your mailboxes on the active database.
That is what I am trying to do. Are you saying I can restore items from the recovery database to the active database without a recovery database index?
The Real Person!
Author Paul Cunningham acts as a real person and passed all tests against spambots. Anti-Spam by CleanTalk.
Yes, it should work fine.
I have moved one of our customers Exchange Server 2007 mailboxes to Exchange Server 2013. Currently we are in the decommissioning phase of Exchange Server 2007. Due their policy they supposed to maintain the Exchange Server 2007 backup for next five years. Do we need to maintain the legacy server for next five years to restore the mailbox / items or is there any way to restore the legacy server backup to Exchange Server 2013? In this case, what would be the best option?
The Real Person!
Author Paul Cunningham acts as a real person and passed all tests against spambots. Anti-Spam by CleanTalk.
If you want to restore into that environment, then you either need to keep the server running, or be able to duplicate the same AD/Exchange into an isolated environment for restore purposes.
Alternatively, invest in tools that permit you to mount and extract data from mailbox databases without an Exchange server. The tools vary in quality, so you’ll need to do your own testing to be sure you get one that meets your needs.
Thank you very much for your recommendation. It is really appreciable
Dear Sir,
I am new in this field. I want to recover Exchange Server. I have complete backup of server. Please tell me the steps to recover that server. I have installed Windows 2012 Standardar OS on 1 system.
Please tell me rest process one by one.
Regards
Vinod Kumar
Thanks for this!
If you try doing the recovery on more than 1 database it seems to complain about the log files missing but all you need to do is use /s in the recovery command like this:
eseutil /r E01 /l F:RecoveryLogs /d F:RecoveryDB /s F:RecoveryDB
The Real Person!
Author Paul Cunningham acts as a real person and passed all tests against spambots. Anti-Spam by CleanTalk.
/s is used to control the checkpoint file, as documented on TechNet here:
https://technet.microsoft.com/en-us/library/aa998074(v=exchg.14.0).aspx
I have no idea what you mean by “try doing the recovery on more than 1 database”.
Greetings,
I watched a YouTube video from Exchange Server Pro, called “Restoring Individual Mailbox Items in Exchange Server 2010”. It was very informative and worked for me (except for one thing).
Restore-Mailbox -Identity “User Name” -RecoveryDatabase “Recovery Database” -RecoveryMailbox “User Name” -TargetFolder MailboxRestore
After running that command and continuing through the prompt, it finished with an error.
Error was found for User Name (UserName@MyDomain.net) because: Error occurred in the step: Moving messages. This mailbox exceeded the maximum number of corrupted items specified for this move mailbox operation., error code: -1056749110
+CategoryInfo : InvalidOperation: (0:Int32) [Restore-Mailbox}, RecipientTaskException
+Fully QualifiedErrorId : 80DDFEB1,Microsoft.Exchange.Management.RecipientTasks.RestoreMailbox
I have a Report File from the restore mailbox operation if you are interested in reading what it says. Basically, there are 18 items that couldn’t be moved to the target mailbox. I’m wondering why they couldn’t be moved. I assume everything else was moved. However, those items that were moved are (knowing my luck) the emails that he couldn’t find from his Inbox.
Let me know what you suggest I should do.
Many thanks,
Dylan
Actually, I’m pretty sure I know what the issue is…
The BadItemLimit was set to default and I need to set to something higher than 0.
So, I just ran the command:
Restore-Mailbox –Identity “User Name” –RecoveryDatabase “Recovery Database “User Name” –TargetFolder MailboxRestore -BadItemLimit 1000
That should fix it. 🙂
Thanks for sharing this information. Recently I faced corruption issues and recovered the data through your post.
I’m in the middle of migrating from 2010 to 2013. We have some legal discoveries that have lingered on and on. My question is can I mount a restored 2010 edb and log files as a recovery database on the 2013 server or do I need to keep my 2010 box around indefinitely to handle possible legal discovery requests?
The Real Person!
Author Paul Cunningham acts as a real person and passed all tests against spambots. Anti-Spam by CleanTalk.
No you can’t mount a 2010 database on a 2013 server, even as a recovery server.
So yes, if you anticipate this need then retaining a 2010 server would be wise.
Hi Paul,
I am getting this error when I am trying to create a new mailbox -Recovery switch.
090112846.edb -LogFolderPath F:RecoveryLogs
The term ‘New-MailboxDatabase’ is not recognized as the name of a cmdlet, function, script file, or operable program. C
heck the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:20
+ New-MailboxDatabase <<<< -Server EXCHSRV2010 -Name RecoveryDB -Recovery -EdbFilePath F:RecoveryDBMailbox_Database_
1090112846.edb -LogFolderPath F:RecoveryLogs
+ CategoryInfo : ObjectNotFound: (New-MailboxDatabase:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
thank you.
Yusuf
Hey, Paul.
Great series of articles! I need to perform a DB recovery and this really makes it easier.
One question: Can I mount a recovery DB in Exchange 2013 using a DB that I saved from my old Exchange 2007 system? The DB restore is the most difficult part of the process, because the restore job takes 1-2 days, and is prone to failure and restart over even the slightest network blip.
Thanks,
Dan
The Real Person!
Author Paul Cunningham acts as a real person and passed all tests against spambots. Anti-Spam by CleanTalk.
No, recovery databases can only be used on the same version as the server they come from.
Hello,
What about recovery databases on Exchange 2016 with different cumulative updates ?
Thanks.
Benoît
The Real Person!
Author Paul Cunningham acts as a real person and passed all tests against spambots. Anti-Spam by CleanTalk.
Probably fine in most cases but I can’t account for every possible variable there. Try it, if it doesn’t work, open an MS support case for further assistance.
That’s too bad that 2013 is the same way, with the dirty shutdown problem…
Hello Paul,
Thanks for this information. but i will like you to show me how to restore the log files. Exchange is using the default locations and i can seem to identify the logs to restore.
Thanks