Exchange: Recovering a Database from Dirty Shutdown (the Easy Way)

In testing (and production), we invariably run into problems where the database will be in a 'bad state'. In my case, I pulled Store service out from under it (disabled and stopped the service) and this caused the database to go into dirty shutdown:

eseutil.exe /mh "C:\Databases\EMEA-SWEEX15-01 Store 001\EMEA-SWEEX15-01 Store 001.EDB"

Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 15.00
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating FILE DUMP mode...
         Database: C:\Databases\EMEA-SWEEX15-01 Store 001\EMEA-SWEEX15-01 Store 001.EDB

DATABASE HEADER:
Checksum Information:
Expected Checksum: 0x65021d61
  Actual Checksum: 0x65021d61

Fields:
        File Type: Database
         Checksum: 0x65021d61
   Format ulMagic: 0x89abcdef
   Engine ulMagic: 0x89abcdef
 Format ulVersion: 0x620,20
 Engine ulVersion: 0x620,20
Created ulVersion: 0x620,20
     DB Signature: Create time:05/05/2014 13:08:25.805 Rand:306694709 Computer:
         cbDbPage: 32768
           dbtime: 10263756 (0x9c9ccc)
            State: Dirty Shutdown
     Log Required: 12131-12194 (0x2f63-0x2fa2)
    Log Committed: 0-12195 (0x0-0x2fa3)
   Log Recovering: 12195 (0x2fa3)
  GenMax Creation: 10/14/2014 07:55:56.052
         Shadowed: Yes
       Last Objid: 56187
     Scrub Dbtime: 0 (0x0)
       Scrub Date: 00/00/1900 00:00:00
     Repair Count: 0
      Repair Date: 00/00/1900 00:00:00.000
 Old Repair Count: 0
  Last Consistent: (0x263B,8B,19C) 08/28/2014 08:55:57.153
      Last Attach: (0x263C,2,268) 08/28/2014 08:55:57.294
      Last Detach: (0x0,0,0) 00/00/1900 00:00:00.000
    Last ReAttach: (0x2DEA,2,0) 10/11/2014 04:46:44.436
             Dbid: 1
    Log Signature: Create time:05/05/2014 13:08:25.649 Rand:2111075525 Computer:
       OS Version: (6.2.9200 SP 0 NLS ffffffff.ffffffff)

Previous Full Backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

Previous Incremental Backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

Previous Copy Backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

Previous Differential Backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

Current Full Backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

Current Shadow copy backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

     cpgUpgrade55Format: 0
    cpgUpgradeFreePages: 0
cpgUpgradeSpaceMapPages: 0

       ECC Fix Success Count: none
   Old ECC Fix Success Count: none
         ECC Fix Error Count: none
     Old ECC Fix Error Count: none
    Bad Checksum Error Count: none
Old bad Checksum Error Count: none

  Last checksum finish Date: 10/14/2014 08:02:23.469
Current checksum start Date: 00/00/1900 00:00:00.000
      Current checksum page: 0

Operation completed successfully in 0.187 seconds.

Using eseutil (and assuming the log is still available) we can recover from such a state like the following:

eseutil /r "E01" /l "C:\Databases\EMEA-SWEEX15-01 Store 001\Logs" /d "C:\Databases\EMEA-SWEEX15-01 Store 001"

Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 15.00
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating RECOVERY mode...
    Logfile base name: E01
            Log files: C:\Databases\EMEA-SWEEX15-01 Store 001\Logs
         System files: <current directory>
   Database Directory: C:\Databases\EMEA-SWEEX15-01 Store 001

Performing soft recovery...
                      Restore Status (% complete)

          0 10 20 30 40 50 60 70 80 90 100
          |----|----|----|----|----|----|----|----|----|----|
          ...................................................

Operation completed successfully in 13.140 seconds.

And, once we've completed said step, we can verify if the database is - indeed - in clean shutdown:

eseutil.exe /mh "C:\Databases\EMEA-SWEEX15-01 Store 001\EMEA-SWEEX15-01 Store 001.EDB"

Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 15.00
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating FILE DUMP mode...
         Database: C:\Databases\EMEA-SWEEX15-01 Store 001\EMEA-SWEEX15-01 Store 001.EDB

DATABASE HEADER:
Checksum Information:
Expected Checksum: 0x758dd2a3
  Actual Checksum: 0x758dd2a3

Fields:
        File Type: Database
         Checksum: 0x758dd2a3
   Format ulMagic: 0x89abcdef
   Engine ulMagic: 0x89abcdef
 Format ulVersion: 0x620,20
 Engine ulVersion: 0x620,20
Created ulVersion: 0x620,20
     DB Signature: Create time:05/05/2014 13:08:25.805 Rand:306694709 Computer:
         cbDbPage: 32768
           dbtime: 13412964 (0xccaa64)
            State: Clean Shutdown
     Log Required: 0-0 (0x0-0x0)
    Log Committed: 0-0 (0x0-0x0)
   Log Recovering: 0 (0x0)
  GenMax Creation: 00/00/1900 00:00:00.000
         Shadowed: Yes
       Last Objid: 66933
     Scrub Dbtime: 0 (0x0)
       Scrub Date: 00/00/1900 00:00:00
     Repair Count: 0
      Repair Date: 00/00/1900 00:00:00.000
 Old Repair Count: 0
  Last Consistent: (0x2FA4,1,31) 10/14/2014 08:10:54.954
      Last Attach: (0x263C,2,268) 08/28/2014 08:55:57.294
      Last Detach: (0x2FA4,1,31) 10/14/2014 08:10:54.954
    Last ReAttach: (0x2DEA,2,0) 10/11/2014 04:46:44.436
             Dbid: 1
    Log Signature: Create time:05/05/2014 13:08:25.649 Rand:2111075525 Computer:
       OS Version: (6.2.9200 SP 0 NLS ffffffff.ffffffff)

Previous Full Backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

Previous Incremental Backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

Previous Copy Backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

Previous Differential Backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

Current Full Backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

Current Shadow copy backup:
        Log Gen: 0-0 (0x0-0x0)
           Mark: (0x0,0,0)
           Mark: 00/00/1900 00:00:00.000

     cpgUpgrade55Format: 0
    cpgUpgradeFreePages: 0
cpgUpgradeSpaceMapPages: 0

       ECC Fix Success Count: none
   Old ECC Fix Success Count: none
         ECC Fix Error Count: none
     Old ECC Fix Error Count: none
    Bad Checksum Error Count: none
Old bad Checksum Error Count: none

  Last checksum finish Date: 10/14/2014 08:02:23.469
Current checksum start Date: 00/00/1900 00:00:00.000
      Current checksum page: 0

Operation completed successfully in 0.235 seconds.

And, now, the database is safe to mount, again.

Comments

  • Anonymous
    January 01, 2003
    Exchange recovery software is capable to fix issue like drive errors, corrupt header errors, server down issues,JET errors, server crash incidents, improper server shutdown, power issues etc. I would like to refer another third party exchange recovery software http://www.exchangerecoverytools.org/ for more help.