Exchange 2016 – ESEUTIL Utility
One of the database issue is the dirty shutdown, When Exchange dismounts a database, the Information Store ensures that all transactions (dirty database pages) in cache are committed to the database (.edb) file. When this is allowed to happen, the database is said to be in “Clean Shutdown” and requires no transaction logs to mount because all transactions have already been replayed into the database.
To confirm the clean shutdown of the databse you should use the eseutil utility:
However, if something happens to cause the database to terminate abruptly, it is probable to result in a Dirty Shutdown state. Whether a Dirty Shutdown happens and which transaction logs may be required to recover the database is dependent entirely upon which transactions were being processed at the time of the failure.
In the previous example The DB1 database requires transaction log E0000000003.log because the transactions contained within it were either partially committed to the .edb file or are simply required to bring the database to a consistent state. It is hard to say exactly why certain logs are required without a deep programmatic understanding of JET Databases, but nonetheless the log is required and must be available before the database can be mounted.
ESEUTIL /mh command is run against a dismounted database to view database header information. The most useful data in the header is in the “State” and “Log Required” properties. State displays whether a database is in either “Dirty Shutdown” or “Clean Shutdown”. As a bit of developer geek trivia, there are four other states which are seldom seen: JustCreated, Being Converted, ForceDetach, and Illegal. Log Required displays the transaction log or logs required to be present and uncorrupted for the database to be able to replay their contents into its tables. The first step of troubleshooting a Dirty Shutdown is to run ESEUTIL /mh against the database (.edb) file and determine which logs are required for that database.
This command can be used to verify the .edb file and log folder paths so you know where all the files are located for a given database:
“Get-MailboxDatabase DB1 | Format-List Name,EdbFilePath,LogFolderPath”
If you have the missing log you can run the soft repair as following:
“ESEUTIL /r “prefix”<E00> /l <log file location> /d <database location>”
If not you can run the hard repair as following:
“ESEUTIL /p <DatabaseFileName>”
Ratish Nair
Microsoft MVP | Office Servers and Services
Team @MSExchangeGuru