Goodbye IsInteg, hello new-MailboxRepairRequest

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.

18 thoughts on “Goodbye IsInteg, hello new-MailboxRepairRequest

  1. Pingback: Goodbye IsInteg, hello new-MailboxRepairRequest « EighTwOne (821) « JC’s Blog-O-Gibberish

  2. one or two mistakes here:
    “As you can see, New-MailboxMoveRequest doesn’t show any results”
    you probably meant “New-MailboxRepairRequest”
    great article
    Thanks

    Like

  3. Pingback: isinteg is now New-MailboxRepairRequest in Exchange 2010

  4. This command doesn’t even work to repair anything. I’ve run it 100 times and data still exports via New-MailboxExportRequest into corrupt PST files. ISINTEG was way better IMO. You can’t even run ISINTEG anymore, it always crashes since SP1 depreciated it.

    Like

  5. Hi mdrooij,
    Informative article!

    I have a question for you – I have been assigned a task to repair corrupt EDB and restore inaccessible mailboxes. I have gone though many top forums, some experts recommend powershell scripts to repair exchange 2010 edb file and some of them recommends third party exchange recovery tools like Stellar Phoenix Exchange Recovery, Datanumen exchange OST recovery. But I’m confused, which way to go – powershell cmdlets or third party tools? Which repairs corrupt EDB quickly and securely without data loss? Let me know your thoughts.

    Like

    • It depends. In any case, corruption is corruption and potential data loss (unless you have a backup somewhere). Exchange can often repair things itself, those 3rd party EDB tools are nice for mailbox extraction (I doubt if they can do a better job at fixing things – remember, corruption is corruption), and recovery from OST would be last resort (manual process). This is a typical example why you should have multiple database copies.

      Like

  6. Pingback: ESEUTIL to repair exchange database | Sajid Hanif's IT Blog

  7. Yep. Same issue here. Exchange 2013 SP1 CU 12. The repair request simply sits at “Queued” indefinitely. I created a repair request using the -DetectOnly parameter and after a whole week, the request status still reports as being Queued. Absolutely nothing in the logs either as to why this is the case. All mailboxes in this environment were moved from legacy Exchange 2007 to 2013 as part of a mail systems migration.

    Like

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.