Update (2/23/2010): Adjusted request limits to SP1 RTM.
Update (8/24/2010): The Exchange team at EHLO posted a blog on IsInteg replacements. This article has been updated with the information that there is also a cmdlet to integrity check public folder databases.
Note: The following information is based on Exchange 2010 SP1 Beta and subject to change in the final product.
As of Exchange 2010 the well-known IsInteg tool was dropped. The IsInteg tool could be used with earlier versions of Exchange to detect and repair inconsistencies in the Exchange databases also known as information stores. IsInteg was complimentary to ESEUtil; Where ESEutil is used for maintaining, verifying and repairing ESE databases (which could happen to be Exchange databases), IsInteg is used to check and repair the integrity of Exchange databases. Note that for the tools to work you had to take your Exchange databases offline. Also, the process could take a while with large databases.
Then came Exchange 2010’s with it’s online database maintance. The database maintenance runs 24 x 7 on your Exchange 2010 databases in the background, without the need to take databases offline. The ESEUtil is still installed when you install an Exchange 2010 Mailbox Server role. Its purpose shifted from maintenance (which is now done 24 x 7) to inspecting and recovering ESE databases. Jaap Wesselius has written a nice article on using ESEUtil in Exchange 2010.
IsInteg is also installed with the Mailbox Server role (default location C:\Program Files\Microsoft\Exchange Server\V14\Bin). But please, don’t use it. IsInteg hasn’t been updated to understand Exchange 2010’s new database structure. But I hear you asking, without IsInteg, how can you (manually) check database integrity?
This is where the SP1’s new cmdlet New-MailboxRepairRequest comes into play. This cmdlet is meant to be a replacement for IsInteg ability to check & repair the integrity of mailbox databases integrity. New-MailboxRepairRequest can be used to detect and fix mailbox corruption, per mailbox or per database. This functionality is an improvement over IsInteg, since you can not only check databases but individual mailboxes as well without taking databases offline. Even better, only the mailbox that is currently being checked becomes unavailable; all other mailboxes in the databases remain fully operational.
The syntax of New-MailboxRepairRequest is as follows (left common parameters like Confirm and WhatIf out):
new-MailboxRepairRequest [-Mailbox <MailboxID> | -Database <DatabaseID>] -CorruptionType <CorruptionType> [-DetectOnly] [-DomainController <FQDN>]
which dissects into:
- With Mailbox or Database you select if you want to perform the check against a mailbox or database (i.e. all mailboxes in a database) and against what identity;
- CorruptionType specifies the sort of checks you want to perform (multiple can be specified, comma seperated). Possible values are:
- SearchFolder: Search for folder corruption;
- AggregateCounts: Check aggregate counts on folders;
- ProvisionedFolder: Check for provisioned folders with unprovisioned parent folders;
- FolderView: Check folder views returning incorrect results.
- DetectOnly specifies if you want the cmdlet to fix problems it finds (similar to IsInteg’s fix parameter);
- DomainController can be used to specify a preferred domain controller to update changes.
For example, to run all checks on the mailbox of ‘Michel’, without automatic repair, execute the following from the Exchange Management Shell:
New-MailboxRepairRequest -Mailbox <MailboxID> -CorruptionType SearchFolder,AggregateCounts,ProvisionedFolder,FolderView -DetectOnly
To run the SearchFolder check on the mailbox database ” with automatic repair, execute the following from the Exchange Management Shell:
New-MailboxRepairRequest -Database <DatabaseID> -CorruptionType SearchFolder
As you can see, New-MailboxRepairRequest doesn’t show any results. For that, you need to open the application eventlog of the Exchange Server hosting the mailbox or (active) database you checked or repaired and look for ‘MSExchangeIS Mailbox Store’ events. Use the RequestID the cmdlet new-MailboxMoveRequest returned to look up the events. It will log when it started (and what parameters were specified) and log results. In the example above, New-MailboxRepairRequest returned 2661da49- … for the mailbox check. As we can see, the integrity check of the mailbox was succesful.
Exchange 2010 SP1 will also introduce a new cmdlet to repair public folder replication issues. The cmdlet to use is:
New-PublicFolderDatabaseRepairRequest -Database <DatabaseID> -CorruptionType <CorruptionType> [-DetectOnly]
where CorruptionType can be ReplState (no other values possible).
Be advised that, like ESEUtil and IsInteg, repairing an Exchange database or mailbox might cause data loss. To bring the mailbox or database back to a readable and consistent state the utility might cut out the parts it doesn’t understand .. with an axe.
And finally a quick note that to avoid possible performance issues the number of repair requests is 1 for database-level repairs and 100 for mailbox-level repairs per server.