<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bharat Bhushan</title>
    <description>The latest articles on DEV Community by Bharat Bhushan (@bharat_bsingh_6f4fe7fc7).</description>
    <link>https://dev.to/bharat_bsingh_6f4fe7fc7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3873990%2F193f4cff-3d0a-49f3-8cef-e6d6bb33be9e.jpg</url>
      <title>DEV Community: Bharat Bhushan</title>
      <link>https://dev.to/bharat_bsingh_6f4fe7fc7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bharat_bsingh_6f4fe7fc7"/>
    <language>en</language>
    <item>
      <title>Exchange Database Won't Mount After Shutdown (JET -1018, -1022, 528, 548)</title>
      <dc:creator>Bharat Bhushan</dc:creator>
      <pubDate>Sat, 11 Apr 2026 19:39:57 +0000</pubDate>
      <link>https://dev.to/bharat_bsingh_6f4fe7fc7/exchange-database-wont-mount-after-shutdown-the-complete-diagnostic-flowchart-jet-1018-1022-59bg</link>
      <guid>https://dev.to/bharat_bsingh_6f4fe7fc7/exchange-database-wont-mount-after-shutdown-the-complete-diagnostic-flowchart-jet-1018-1022-59bg</guid>
      <description>&lt;p&gt;&lt;em&gt;Last Updated: April 2026&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Answer
&lt;/h2&gt;

&lt;p&gt;An Exchange database that won't mount after shutdown is almost always in a &lt;strong&gt;dirty shutdown&lt;/strong&gt; state, caused by one of four JET (Extensible Storage Engine) errors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;-1018&lt;/strong&gt; → Database corruption (checksum mismatch)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-1022&lt;/strong&gt; → Disk I/O failure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;528&lt;/strong&gt; → Missing transaction logs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;548&lt;/strong&gt; → Log file mismatch&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Golden Rule:&lt;/strong&gt; Never run &lt;a href="https://www.stellarinfo.com/article/exchange-database-hard-repair-eseutil-p-commands.php" rel="noopener noreferrer"&gt;&lt;code&gt;eseutil /p&lt;/code&gt;&lt;/a&gt; before identifying the exact error. This can permanently delete mailbox data.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Applies To
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Exchange Server 2013&lt;/li&gt;
&lt;li&gt;Microsoft Exchange Server 2016&lt;/li&gt;
&lt;li&gt;Microsoft Exchange Server 2019&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Exchange Databases Fail to Mount
&lt;/h2&gt;

&lt;p&gt;Microsoft Exchange uses the Extensible Storage Engine (ESE) database (&lt;code&gt;.edb&lt;/code&gt;) with transaction logs (&lt;code&gt;.log&lt;/code&gt;) for crash-safe operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data is written to logs first&lt;/li&gt;
&lt;li&gt;Then committed to the database&lt;/li&gt;
&lt;li&gt;Ensures recovery after failure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What causes failure:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Power outage&lt;/li&gt;
&lt;li&gt;OS crash&lt;/li&gt;
&lt;li&gt;Storage disconnection&lt;/li&gt;
&lt;li&gt;Forced service stop&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;According to Microsoft: &lt;a href="https://learn.microsoft.com/en-us/exchange/troubleshoot/database/database-corruption-issues" rel="noopener noreferrer"&gt;According to Microsoft Exchange documentation on database corruption&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Check Database State
&lt;/h2&gt;

&lt;p&gt;Run &lt;a href="https://www.stellarinfo.com/article/check-exchange-database-state-using-eseutil-mh-command.php" rel="noopener noreferrer"&gt;&lt;code&gt;eseutil /mh&lt;/code&gt;&lt;/a&gt; to determine the current database state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;eseutil&lt;/span&gt; &lt;span class="na"&gt;/mh &lt;/span&gt;&lt;span class="kd"&gt;DBPath&lt;/span&gt;.edb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clean Shutdown&lt;/td&gt;
&lt;td&gt;Safe&lt;/td&gt;
&lt;td&gt;Mount database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dirty Shutdown&lt;/td&gt;
&lt;td&gt;Inconsistent&lt;/td&gt;
&lt;td&gt;Continue diagnosis&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  The 4-Layer Failure Model
&lt;/h2&gt;

&lt;p&gt;Every Exchange mount failure belongs to one of four layers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Error&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data Layer&lt;/td&gt;
&lt;td&gt;-1018&lt;/td&gt;
&lt;td&gt;Database corruption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage Layer&lt;/td&gt;
&lt;td&gt;-1022&lt;/td&gt;
&lt;td&gt;Disk failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Log Layer&lt;/td&gt;
&lt;td&gt;528&lt;/td&gt;
&lt;td&gt;Missing logs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consistency Layer&lt;/td&gt;
&lt;td&gt;548&lt;/td&gt;
&lt;td&gt;Log mismatch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What is Jet Error -1018?
&lt;/h2&gt;

&lt;p&gt;Jet error -1018 is a database corruption error caused by a &lt;strong&gt;checksum mismatch&lt;/strong&gt;. It occurs when a database page is partially written, storage returns inconsistent data, or external tools modify the database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diagnose:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;eseutil&lt;/span&gt; &lt;span class="na"&gt;/g &lt;/span&gt;&lt;span class="kd"&gt;DBName&lt;/span&gt;.edb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Recovery:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;th&gt;When to Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Restore backup&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Best option&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;eseutil /p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;No backup available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.stellarinfo.com/edb-exchange-server-recovery.htm" rel="noopener noreferrer"&gt;Stellar Repair for Exchange&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Critical recovery&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;code&gt;eseutil /p&lt;/code&gt; permanently deletes corrupted pages — use only as a last resort.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What is Jet Error -1022?
&lt;/h2&gt;

&lt;p&gt;Jet error -1022 is a &lt;strong&gt;disk I/O failure&lt;/strong&gt; caused by storage issues — not database corruption. Exchange cannot access the disk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diagnose:&lt;/strong&gt; Check Event Viewer (IDs: 7, 11, 51) and run &lt;code&gt;chkdsk /f /r&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fix the storage problem first&lt;/li&gt;
&lt;li&gt;Copy database to a healthy disk&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;eseutil /mh&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Never run eseutil on an unstable or failing disk.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  JET Error -1018: Checksum Mismatch (Detail)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Diagnose:&lt;/strong&gt; &lt;code&gt;eseutil /g DBName.edb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery:&lt;/strong&gt; Restore from backup or use &lt;code&gt;eseutil /p&lt;/code&gt; (high risk of data loss)&lt;/p&gt;




&lt;h2&gt;
  
  
  JET Error -1022: Disk IO Failure (Detail)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Diagnose:&lt;/strong&gt; Event Viewer + &lt;code&gt;chkdsk&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery:&lt;/strong&gt; Fix disk first, then attempt database repair&lt;/p&gt;




&lt;h2&gt;
  
  
  Error 528: Missing Transaction Logs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; Required transaction logs are missing, breaking the recovery chain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common causes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Circular logging enabled&lt;/li&gt;
&lt;li&gt;Manual deletion of log files&lt;/li&gt;
&lt;li&gt;Antivirus quarantine&lt;/li&gt;
&lt;li&gt;Failed backup job&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Diagnose:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;eseutil&lt;/span&gt; &lt;span class="na"&gt;/mh &lt;/span&gt;&lt;span class="kd"&gt;DBName&lt;/span&gt;.edb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the &lt;code&gt;Log Required: X-Y&lt;/code&gt; range and verify which log files exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backup exists&lt;/td&gt;
&lt;td&gt;Restore from backup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Circular logging ON&lt;/td&gt;
&lt;td&gt;Hard repair (data loss likely)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Partial logs missing&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.stellarinfo.com/edb-exchange-server-recovery.htm" rel="noopener noreferrer"&gt;Stellar Repair for Exchange&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Circular logging + crash = no full recovery possible.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Error 548: Log Signature Mismatch
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; Log files don't match the database signature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common causes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mixed log files from different databases&lt;/li&gt;
&lt;li&gt;Improper restore operation&lt;/li&gt;
&lt;li&gt;DAG misconfiguration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Diagnose:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;eseutil&lt;/span&gt; &lt;span class="na"&gt;/ml &lt;/span&gt;&lt;span class="kd"&gt;logfile&lt;/span&gt;.log
&lt;span class="kd"&gt;eseutil&lt;/span&gt; &lt;span class="na"&gt;/mh &lt;/span&gt;&lt;span class="kd"&gt;DBName&lt;/span&gt;.edb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Move mismatched logs to a backup folder&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;eseutil /p&lt;/code&gt; followed by &lt;code&gt;eseutil /d&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Diagnostic Flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB won't mount
  → Run: eseutil /mh
    → Dirty Shutdown?
      → Check error code:
          -1018 → Database repair
          -1022 → Fix disk first
          528   → Restore logs
          548   → Remove mismatched logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  When &lt;a href="https://www.stellarinfo.com/blog/how-to-use-eseutil-for-exchange-database-repair/" rel="noopener noreferrer"&gt;eseutil&lt;/a&gt; Is NOT Enough
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Causes data loss with &lt;code&gt;/p&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Cannot recover data from dead disks&lt;/li&gt;
&lt;li&gt;Requires a complete log chain&lt;/li&gt;
&lt;li&gt;No granular mailbox recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Microsoft recommends using verified backups as the primary recovery method. For critical EDB corruption scenarios, &lt;a href="https://www.stellarinfo.com/edb-exchange-server-recovery.htm" rel="noopener noreferrer"&gt;Stellar Repair for Exchange&lt;/a&gt; provides granular mailbox-level recovery without data loss.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prevention
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Disable circular logging&lt;/li&gt;
&lt;li&gt;Use UPS (Uninterruptible Power Supply)&lt;/li&gt;
&lt;li&gt;Monitor disk health proactively&lt;/li&gt;
&lt;li&gt;Test backups regularly&lt;/li&gt;
&lt;li&gt;Separate database and log files onto different volumes&lt;/li&gt;
&lt;li&gt;Use DAG (Database Availability Group) for high availability&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  JET Errors Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Error&lt;/th&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;-1018&lt;/td&gt;
&lt;td&gt;Checksum corruption&lt;/td&gt;
&lt;td&gt;Repair / Restore&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-1022&lt;/td&gt;
&lt;td&gt;Disk I/O failure&lt;/td&gt;
&lt;td&gt;Fix storage&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;528&lt;/td&gt;
&lt;td&gt;Missing logs&lt;/td&gt;
&lt;td&gt;Restore logs&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;548&lt;/td&gt;
&lt;td&gt;Log mismatch&lt;/td&gt;
&lt;td&gt;Rebuild / Remove logs&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is dirty shutdown?&lt;/strong&gt;&lt;br&gt;
An inconsistent database state where transactions were not fully written to disk before shutdown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is eseutil /p safe?&lt;/strong&gt;&lt;br&gt;
No. It removes corrupted data permanently and should only be used as a last resort when no backup is available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can the Exchange DB be repaired without data loss?&lt;/strong&gt;&lt;br&gt;
Only if a valid backup exists. Native repair tools (&lt;code&gt;eseutil /p&lt;/code&gt;) always involve data loss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What causes Jet error -1018?&lt;/strong&gt;&lt;br&gt;
Storage corruption, incomplete page writes, or hardware-level I/O issues.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Exchange failures are predictable — data loss is not. The difference between recovery and disaster is &lt;strong&gt;correct diagnosis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diagnose first. Repair second.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>exchange</category>
      <category>database</category>
      <category>sysadmin</category>
    </item>
  </channel>
</rss>
