The "Officially Correct" Process to use ESEUTIL & ISINTEG against a Busted Exchange Database
I was called to a client company last week to help them with an Exchange 2003 database that had dumped its brains and would no longer mount either private or public store. Becuase of the way in which the server had lost its brains, it was not possible to complete an ESEUTIL /R to recover the database. A much-more scary ESEUTIL /P was needed to do a repair.
In researching the exact procedure necessary to fully complete the repair, I found quite a bit of differing information about which of the steps were actually necessary for the repair. Some newsgroups said the ESEUTIL /P was the only step necessary. For others, a multi-step process was necessary. In an attempt to be thorough (and having an available no-cost PSS case available) I contacted Microsoft to get the correct fix. This is their official response:
Step 1 - Repair the Database
Run Eseutil /p {Path to EDB file}
This process takes about an hour per 8GB of database size. If you haven't partitioned your Exchange stores into multiple, smaller stores, this process will have you saying, "I should have done that" before its fully done.
Note that although some very nice progress graphs will appear to show you how far it has left to go, I have found that it hangs by far the longest at the step of "deleting unicode fixup table" which has no progress graph. DO NOT stop the process if it hangs here. Let it complete.
Step 2 - Defrag the Database & Rebuild Indices
Run Eseutil /d {Path to EDB file} /t {Path to Temp EDB file}
You must have an additional 110% free space on the actual drive where this will occur or the process will not complete properly, leaving you to re-try and wait longer. This 110% includes the STM file size as well! This process can also take up to an hour per 8GB of database size.
If you do not have enough space to complete this task on the Exchange server, you can move the database files to an alternate location and run the defragmentation there. To do this, copy the files Eseutil.exe, Ese.dll, Jcb.dll, Exosal.dll, and Exchmem.dll files from the Exchange Server 2003 to the remote location along with the Exchange Database (edb & stm). Then, run ESEUTIL /D from the remote location. When complete, move the completed files back. Note that /t is the path to the Temp Drive with the 110% available free space.
Step 3 - Fix Removed Linkages
Run isinteg -s servername -fix -test alltests
You will need to run this third command may times until the result is “0 Error and 0 Fixes”. If you do not get this result after the first passthrough, continue running it until the result is correct. The ISINTEG command will only be able to fix a certain number of problems per run-through. So, many times may be necessary, depending on the level of corruption. If possible, also try to fix any warnings as well, depending on the time you have available. This command will take about 20 minutes to complete, depending on database size, per run-through.