This article discusses methods that you can use to identify and to correct common problems that are caused by logical corruption. The following is a list of possible causes of logical corruption in Microsoft Exchange Server databases that are later than Microsoft Exchange Server 5.5:
Deleting Edb.log
Some records in the log file (Edb.log) may contain changes to pages that have been flushed to the database. If the Edb.log log file is deleted, the deletion of the log file may cause a partially-committed transaction to occur. A partially-committed transaction may cause a minor problem, such as a partially-moved message. Or, a partially-committed transaction may cause a major internal inconsistency in one or more B-trees.
Write-Back Caching
If you run an unprotected write-back cache against the log drive, logical corruption may occur. An unprotected write-back cache is a cache where data is lost if the electricity is interrupted. When a write operation to the log disk is complete, Extensible Storage Engine 98 (ESE 98) commits the transaction and makes the data durable on the disk. Any durable updates persist even if the computer stops responding immediately after the transaction is committed because the system's restart procedure completes any unfinished operations that the transaction requires. After the data is written to the log disk, ESE 98 is free to flush the corresponding page to the database disk.
If the data was never written to the log disk, the same problem occurs and the recovery process cannot restore the database to the state that it was in before the database was corrupted. Therefore, the database remains corrupted.
The problems that may occur when you use write-back caching do not prevent you from using write-back caching. However, because the potential for problems does exist, you must make sure that the data in the cache is correctly protected with a battery backup, with error checking, with error correction, and with sound operational procedures.
Repairing by using Eseutil /p
Logical corruption may also occur when you run the
eseutil /p command. Jet-level database repairs cause some data loss and inefficient space usage in the database because the repairs fix the database by removing the data that is corrupted. When there is data loss and inefficient space usage in the database, you must run an offline defragmentation (
eseutil /d) to get rid of wasted space and inefficient space usage. After you run the offline defragmentation, you must run an integrity check (
Isinteg -fix) to resolve any Store-level logical corruption that the repair process might have introduced. Additionally, any typical transaction operations that are performed against the database could fail if the space tree prevented the insertion of new records into a table. Therefore, you should run a defragmentation before you run an integrity check.