| Microsoft includes two command line utilities with | | | | completely different utility function, and the results |
| Exchange Server that are designed to accomplish | | | | to an Exchange database can be disastrous. |
| various maintenance functions within the Exchange | | | | Below are a few of the many different available |
| database. They are limited, complex, tedious, and | | | | modes and options for ESEutil, each of which can |
| time consuming when compared to the | | | | have very different results on a database. NOTE: |
| functionality contained within GOexchange. The | | | | For brevity we have not included entire command |
| best time to learn how to use these tools is in a | | | | statements. |
| lab environment before you need them. Like | | | | - "ESEutil /d" will defragment the designated |
| firearms and prescription medications, these tools | | | | database and is a fairly straight forward mode of |
| can be dangerous if you don't understand how | | | | operation that is commonly used. |
| they work and when to use them. Imagine | | | | Running a manual offline defragmentation is only |
| shooting a shotgun at a container full of water-a | | | | part of the process that should be completed in |
| graphic demonstration of what can happen when | | | | order to keep the databases healthy. Many |
| you mishandle a powerful tool. These two utilities | | | | administrators run ESEutil on a database to |
| are named ESEutil and ISinteg. | | | | remove deleted items and regain white space |
| ESEutil checks and fixes individual database tables | | | | then, mistakenly assume that by doing so, the |
| and ISinteg checks and fixes the links between | | | | process is complete. Performing this task, |
| tables. | | | | however, doesn't check or address issues that |
| To better understand the difference between | | | | may exist within the mail data itself, and it won't |
| ESEutil and ISinteg, let's use a building construction | | | | fix the links between the tables of an ESE |
| analogy. | | | | database. The database now contains a higher |
| - Running ESEutil is like having a structural engineer | | | | percentage of errors, warnings, and minor |
| check your house's foundation. The engineer | | | | inconsistencies than it did prior to defragmentation. |
| doesn't care what's inside the house. The engineer | | | | NOTE: Running ESEutil repeatedly without |
| cares only whether the underlying structure is | | | | implementing a complete offline maintenance |
| sound. | | | | process is certain recipe for disaster. |
| - Running ISinteg is like having an interior | | | | - "ESEutil /d /p" will have a slightly different result. |
| decorator come inside your house to check the | | | | The "/d" tells ESEutil to defragment the |
| way you've laid out your furnishings. The | | | | designated database. The "/p" option used with |
| decorator doesn't care about the house's | | | | the "/d" instructs ESEutil to leave the newly |
| foundation. The decorator cares only whether the | | | | created defragmented database in the temporary |
| rooms' layout and decor meet with their approval. | | | | work area and not to overwrite the original |
| As you can see from the analogy above, both | | | | database. |
| ESEutil and ISinteg are vastly different utilities, but | | | | - Now slightly modify the command to "ESEutil /p" |
| they are complimentary and in some ways | | | | and the actions taken on the designated database |
| dependent upon each other to provide proper | | | | are extremely different. The "/p" evokes the |
| Exchange maintenance. In the next section, we | | | | Exchange "Repair" mode. At first glance this |
| will provide a more in-depth description of these | | | | sounds like a great thing to do, and it couldn't hurt |
| two Microsoft Exchange utilities. | | | | to try because repairing the database should be |
| About ESEutil | | | | beneficial right? Wrong! |
| ESEutil checks and fixes individual database tables | | | | This command actually invokes a "Hard Repair" |
| but does not check the mail data contained in the | | | | mode of ESEutil. This means that ESEutil will |
| Extensible Storage Engine (ESE) database. | | | | attempt to repair corrupt pages, but it makes no |
| Object-oriented databases like Microsoft Exchange | | | | attempt to put the database in a consistent state. |
| consist of big, structured sequential files | | | | If it finds problems that cannot be corrected, then |
| connected by a set of indexes. The underlying | | | | those pages will be discarded. Each page contains |
| database technology that controls these files is | | | | data therefore each discarded page represents |
| called Indexed Sequential Access Method, or | | | | data loss. Discarding certain pages of the |
| ISAM. The ESE database engine exposes the flat | | | | database can actually render it useless. In other |
| ISAM structure as a hierarchy of objects. | | | | words, wave goodbye to your data. |
| The function of ESEutil is to examine these | | | | Sometimes, using the repair mode is the only |
| individually indexed object pages, check them for | | | | way to fix a database. In the vast majority of |
| correctness by comparing a computed checksum | | | | situations, however, it should be avoided except |
| against a checksum stored in the page header, | | | | as a last resort and there are specific steps that |
| and verify that each page's data is consistent. | | | | should be taken pre and post use of "Repair /p" |
| ESEutil isn't for casual use. So, don't use ESEutil | | | | mode. |
| unless you absolutely need to run it and you | | | | About ISinteg |
| understand what it does. To understand ESEutil, | | | | The purpose of the Microsoft ISinteg utility is to |
| you need to know about the format of the ESE | | | | inspect and fix weaknesses within the information |
| database in which ESEutil works and you need to | | | | store (IS). ISinteg looks at the mailboxes, public |
| be familiar with ESEutil's many modes of | | | | folders, and other parts of the IS, checking for |
| operation. | | | | anything that appears to be out of place. ISinteg |
| ESEutil is a useful tool because it can operate in | | | | scans the tables and B-trees that organize the |
| many modes. Each mode, however performs | | | | ESE pages into their logical structures. In addition, |
| different functions with limitations or caveats. | | | | the tool looks for orphaned objects, or objects |
| - Defragmentation: ESEutil /d [options] | | | | that have incorrect values or references. |
| - Recovery: ESEutil /r [options] | | | | Because ISinteg focuses on the logical level rather |
| - Integrity: ESEutil /g | | | | than physical database structure, it can repair and |
| - Repair: ESEutil /p [options] | | | | recover data that ESEutil can't. When looking at |
| - Checksum: ESEutil /k [options] | | | | the physical database level, ESEutil might find the |
| The way that each of these functions is | | | | data to be valid because it looks for things such |
| executed within the utility is to use a cryptic | | | | as page integrity and B-Tree structure. Data that |
| MS-DOS-like command structure as the | | | | appears valid to ESEutil from a physical view of |
| parameter qualifier. For example, in order to run | | | | the database might not be valid from a logical |
| the defragmenter portion of the utility, an | | | | view. For example, data for various IS tables like |
| administrator would run "ESEutil /d [options]" and | | | | the message, folder, or attachments table may |
| so on. For additional information on ESEutil, please | | | | be intact, but the relationships among tables or |
| refer to the GOexchange FAQ on our website - | | | | records within tables may be broken or incorrect |
| Microsoft ESEutil: | | | | because of corruption in the logical structure. This |
| We are not going to attempt to cover all the | | | | corruption can render the database unusable. |
| potential pitfalls with ESEutil, however, here are a | | | | Logical corruption of your Exchange Server |
| few major issues regarding ESEutil to keep in | | | | databases is problematic and much more difficult |
| mind: | | | | to diagnose and repair than physical corruption. |
| - There are times when it is appropriate to use | | | | The user and administrator are, typically, unaware |
| ESEutil on its own, however, a complete | | | | of a logical corruption occurrence. No specific |
| maintenance process includes the combined use | | | | symptoms identify logical corruption. Often, when |
| of specific ESEutil and ISinteg commands, as well | | | | an administrator discovers the logical corruption, |
| as other steps that must be undertaken. | | | | it's too late for any repairs to take place. |
| - ESEutil is very powerful tool and, if the | | | | You can run ISinteg one of two ways: |
| commands are entered improperly or in an | | | | - Default mode, in which the tool runs the tests |
| incorrect order, the results can be catastrophic. | | | | you specify and reports its findings. |
| - The ESEutil command structure can be very | | | | - Fix mode, where you specify optional switches |
| confusing and, at times, misleading. Changing one | | | | instructing ISinteg to run the specified tests and |
| letter in the command structure executes a | | | | attempt to fix whatever it can. |