Exchange ServerDeep dive

Exchange database (ESE/JET) error codes: a quick reference with meanings and first fixes

Look up an ESE/JET error from eseutil, a failed mount or the event log: what -1018, -528, -550 and 36 more codes mean in Exchange Server, the usual cause and the first check.

When an Exchange database won't mount, a DAG copy fails or eseutil stops, the real reason is usually a negative ESE (JET) error code such as -1018, -528 or -550. This quick reference lists 39 of them with the JET_err name, the meaning from Microsoft's Extensible Storage Engine error code list, the usual cause on Exchange Server SE, 2019 and 2016, and the first thing to check. Press Ctrl+F, type your code in decimal or hex, and follow the guide link where there is one.

Codes in this quick reference

  • -550 JET_errDatabaseDirtyShutdown: database not shut down cleanly; recovery must run firstMount-Database / eseutil
  • -528 JET_errMissingLogFile: the current log file (for example E00.log) is missingMount-Database (ec=-528) / eseutil
  • -543 JET_errRequiredLogFilesMissing: log files required for recovery are missingeseutil /r / Mount-Database
  • -509 JET_errMissingPreviousLogFile: the log file the checkpoint points to is missingeseutil /r / Mount-Database
  • -501 JET_errLogFileCorrupt: a transaction log file is corrupteseutil / Application log (ESE)
  • -515 JET_errInvalidLogSequence: the next log's timestamp doesn't match the expected oneeseutil /r / Mount-Database
  • -513 JET_errLogGenerationMismatch: a log's file name doesn't match its internal generationeseutil /r
  • -514 JET_errBadLogVersion: the log version isn't compatible with this ESE versioneseutil /r

+ 31 more codes in the tables below.

How this guide is organised: How to read these codes → Recovery and transaction log codes → Page corruption and disk I/O codes → File access, path and version codes → Backup, restore and shadow copy codes → How to verify a fixFlow diagram of the article's sections in reading order: 1. How to read these codes. 2. Recovery and transaction log codes (2 parts: Log replay and mount; Log volume, sector size and instance errors). 3. Page corruption and disk I/O codes. 4. File access, path and version codes. 5. Backup, restore and shadow copy codes. 6. How to verify a fix. Toolbox: 0xFFFFFC06, 0xFFFFFDDA, 0xFFFFFDF0, eseutil.exe, Get-MailboxDatabaseCopyStatus.1How to read these codes2Recovery and transaction logcodes3Page corruption and disk I/OcodesLog replay and mountLog volume, sector sizeand instance errors4File access, path and versioncodes5Backup, restore and shadowcopy codes6How to verify a fixTOOLBOX0xFFFFFC060xFFFFFDDA0xFFFFFDF0eseutil.exeGet-MailboxDatabaseCopyStatusHow this guide is organised: How to read these codes → Recovery and transaction log codes → Page corruption and disk I/O codes → File access, path and version codes → Backup, restore and shadow copy codes → How to verify a fixFlow diagram of the article's sections in reading order: 1. How to read these codes. 2. Recovery and transaction log codes (2 parts: Log replay and mount; Log volume, sector size and instance errors). 3. Page corruption and disk I/O codes. 4. File access, path and version codes. 5. Backup, restore and shadow copy codes. 6. How to verify a fix. Toolbox: 0xFFFFFC06, 0xFFFFFDDA, 0xFFFFFDF0, eseutil.exe, Get-MailboxDatabaseCopyStatus.1How to read these codes2Recovery and transaction log codesLog replay and mountLog volume, sector size and instance errors3Page corruption and disk I/O codes4File access, path and version codes5Backup, restore and shadow copy codes6How to verify a fixTOOLBOX0xFFFFFC060xFFFFFDDA0xFFFFFDF0eseutil.exeGet-MailboxDatabaseCopyStatus
At a glance: how this guide is organised · 2 steps · 5 key settings and tools

How to read these codes#

ESE (the Extensible Storage Engine, or JET) is the engine under every Exchange mailbox database. In Microsoft's reference, zero means success, positive values are warnings and negative values are errors. You'll meet them in:

  • eseutil: a run ends with Operation terminated with error -550 plus the JET_err name instead of Operation completed successfully.
  • Application log: ESE, ExchangeStoreDB and MSExchangeRepl events, often with the hex form too: The read operation will fail with error -1018 (0xfffffc06).
  • Mount errors: MapiExceptionJetErrorMissingLogFile: Unable to mount database. (hr=0x80004005, ec=-528). If it only says ec=1108, look in the diagnostic context for StoreEc values starting with 0xFFFF.
  • DAG copies: the ErrorMessage of a Failed or FailedAndSuspended copy in Get-MailboxDatabaseCopyStatus.
  • Backup products: job logs often pass the ESE code through; VSS and writer errors are in the VSS and backup error codes quick reference.

The hex form is the 32-bit two's complement of the negative number, so PowerShell converts it either way. Read the database header first: State (Clean or Dirty Shutdown), Log Required and the signatures.

PowerShell
[Convert]::ToInt32('fffffc06', 16)     # -1018
'{0:x8}' -f -528                       # fffffdf0

# ESE, store and replication errors in the last 24 hours
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName=@('ESE','ExchangeStoreDB','MSExchangeRepl'); Level=2; StartTime=(Get-Date).AddDays(-1)} |
    Format-Table TimeCreated,ProviderName,Id -AutoSize

eseutil /mh "D:\DB01\DB01.edb"

These are engine-level errors; logical problems inside a mailbox are a job for New-MailboxRepairRequest.

Watch out: before eseutil /r or /p on a standalone database, copy the .edb, the logs and the checkpoint somewhere safe. Hard repair (/p) throws away pages it can't read and is the last resort; afterwards, plan to move every mailbox to a new database.

Recovery and transaction log codes#

These stop a mount or a soft recovery. Never delete logs to get past them: read the header, then the log set. In a DAG, the quickest fix for a bad passive copy is usually a reseed (FailedAndSuspended guide).

Log replay and mount#

CodeMeaningUsual causeFirst check
-550
JET_errDatabaseDirtyShutdown
0xfffffdda
Database not shut down cleanly; recovery must run firstCrash, power loss, a full log volume, or an .edb copied without its logseseutil /mh: State and Log Required; with those logs present, mount or run eseutil /r. Guide
-528
JET_errMissingLogFile
0xfffffdf0
The current log file (for example E00.log) is missingDeleted by hand, quarantined by antivirus, or the log folder movedLogFolderPath and the antivirus quarantine; eseutil /ml E00. Guide
-543
JET_errRequiredLogFilesMissing
0xfffffde1
Log files required for recovery are missingRequired logs deleted to free space, or a database restored without themMatch Log Required from eseutil /mh against the files present; recover them or restore. Guide
-509
JET_errMissingPreviousLogFile
0xfffffe03
The log file the checkpoint points to is missingEarly logs removed while the database still needed themeseutil /mk E00.chk for the checkpoint generation; eseutil /ml E00 for gaps
-501
JET_errLogFileCorrupt
0xfffffe0b
A transaction log file is corruptA storage fault, a crash mid-write, or a file scanner touching the logeseutil /ml E00 names the bad log; DAG: reseed the copy; single server: restore. Guide
-515
JET_errInvalidLogSequence
0xfffffdfd
The next log's timestamp doesn't match the expected oneTwo log sequences mixed in one folder, such as old logs copied back after a restoreeseutil /ml E00; move stray logs to another folder (don't delete them)
-513
JET_errLogGenerationMismatch
0xfffffdff
A log's file name doesn't match its internal generationLog files renamed or copied under the wrong nameeseutil /ml shows the generation inside each file; restore the original names
-514
JET_errBadLogVersion
0xfffffdfe
The log version isn't compatible with this ESE versionLogs replayed by an ESE build other than the one that wrote them, such as an eseutil copied from another Exchange version or a non-Exchange ESE toolRun eseutil.exe from the server's own %ExchangeInstallPath%Bin
-530
JET_errBadLogSignature
0xfffffdee
A log file has a bad signatureA log from another database or an earlier log set is in the folderCompare the signature in eseutil /ml with Log Signature in eseutil /mh
-539
JET_errDatabaseLogSetMismatch
0xfffffde5
The database doesn't belong with this set of log filesWrong log folder, or a restored .edb mixed with the server's current logsCompare signatures (eseutil /mh and /ml); point /l at the right folder
-1216
JET_errAttachedDatabaseMismatch
0xfffffb40
The logs reference a database that is missing or doesn't matchThe .edb was moved, renamed or replaced after the logs were writtenPut the original .edb back at its EdbFilePath before replaying. Guide
-533
JET_errCheckpointCorrupt
0xfffffdeb
The checkpoint file is missing or corruptE00.chk damaged by a crash or a storage faulteseutil /mk E00.chk; admins report that recovery runs once the damaged .chk is moved aside (keep a copy), provided every log in the Log Required range is present

Log volume, sector size and instance errors#

CodeMeaningUsual causeFirst check
-510
JET_errLogWriteFail
0xfffffe02
Writing to the log file failedThe log volume is full, offline or read-onlyFree space and volume state; ESE event 413 just before it. Guide
-529
JET_errLogDiskFull
0xfffffdef
The log disk is fullLogs not truncating (no successful Exchange-aware backup), or a big move or importLastFullBackup in Get-MailboxDatabase -Status; free space without deleting needed logs. Guide
-1092
JET_errInstanceUnavailableDueToFatalLogDiskFull
0xfffffbbc
Instance unusable after the log disk filled during a critical operationThe log volume ran completely out of spaceFree space, then mount: log replay runs automatically. Guide
-1090
JET_errInstanceUnavailable
0xfffffbbe
The instance hit a fatal error and can't be usedAn earlier I/O, log or disk-full error on that databaseFix the first ESE error logged before it, then mount
-546
JET_errLogSectorSizeMismatch
0xfffffdde
Log sector size doesn't match the volume's sector sizeLogs moved or restored to a disk with a different sector size (for example 512-byte versus 4K sectors)fsutil fsinfo sectorinfo E: on both volumes; keep logs on matching disks
-614
JET_errCheckpointDepthTooDeep
0xfffffd9a
Too many log generations between the checkpoint and the current logThe database can't flush changes fast enough: storage latency or a huge write burstDatabase disk latency and health; what was writing heavily (moves, imports)

Page corruption and disk I/O codes#

The engine read back something other than what it wrote. Fix the storage path as well as the data, or the code returns.

CodeMeaningUsual causeFirst check
-1018
JET_errReadVerifyFailure
0xfffffc06
Page checksum mismatch on a database pageStorage, controller, driver or firmware fault, logged as ESE event 474DAG: page patching, then reseed the damaged copy; single server: eseutil /k and restore. Guide
-1019
JET_errPageNotInitialized
0xfffffc05
A database page that should hold data is blankStorage lost a write, logged as ESE event 476Same path as -1018. Guide
-1022
JET_errDiskIO
0xfffffc02
Windows returned a disk I/O error for the fileA failing disk or path, SAN or iSCSI drops, or a filter driverSystem log disk errors at that time; vendor diagnostics. Guide
-1119
JET_errReadLostFlushVerifyFailure
0xfffffba1
Lost flush: an earlier write is missing from the page on diskStorage acknowledged a write that never reached the disk (cache, controller or firmware)Treat it like -1018: fix storage first, then reseed or restore
-1206
JET_errDatabaseCorrupted
0xfffffb4a
Not a database file, or a corrupt databaseA damaged header, a truncated copy, or a tool pointed at the wrong fileeseutil /mh; check the path and file size; reseed or restore
-1220
JET_errCatalogCorrupted
0xfffffb3c
Corruption in the database catalog (its internal list of tables)Storage damage to metadata pagesReseed or restore; hard repair only as a last resort
-1414
JET_errSecondaryIndexCorrupted
0xfffffa7a
A secondary index is corrupt; the database must be defragmentedDamaged index pagesMove mailboxes to a new database, or rebuild offline with eseutil /d (white space guide)
-1526
JET_errLVCorrupted
0xfffffa0a
Corruption in a long-value tree (where large column values are stored)Storage corruptionDAG: reseed; otherwise move mailboxes to a new database (raise BadItemLimit) or restore
-1069
JET_errVersionStoreOutOfMemory
0xfffffbd3
Version store out of memory, even after cleanupLong-running transactions or write bursts outpacing cleanup; slow storagePreceding ESE warnings; storage latency; what was running (moves, imports, agents)

File access, path and version codes#

Usually the tool or the environment, not damage: a locked file, a wrong path or the wrong eseutil.

CodeMeaningUsual causeFirst check
-1032
JET_errFileAccessDenied
0xfffffbf8
The file is locked or in useFile-level antivirus or a backup agent, or eseutil run on a mounted databaseAntivirus exclusions; dismount before eseutil. Guide
-1215
JET_errDatabaseSharingViolation
0xfffffb41
Another database instance is using this databaseeseutil started while the database is mounted, or two eseutil sessions on one fileDismount-Database first; close other eseutil windows
-1811
JET_errFileNotFound
0xfffff8ed
A file wasn't found at the path givenA typo or an unquoted path with spaces in the eseutil commandGet-MailboxDatabase DB01 | fl EdbFilePath,LogFolderPath; quote paths
-1808
JET_errDiskFull
0xfffff8f0
No space left on the diskDatabase volume full, or eseutil /d or /p writing its temporary database to a full driveFree space; put eseutil's temporary database on a volume with room
-1008
JET_errDatabaseFileReadOnly
0xfffffc10
A read-only database file was opened for read/writeRead-only attribute on a restored or copied .edbattrib on the file; clear the flag with attrib -r
-1213
JET_errPageSizeMismatch
0xfffffb43
The database page size doesn't match the engineA tool whose engine expects a different page size from the database's (Exchange databases use 32 KB pages), typically a non-Exchange ESE utilityUse the Exchange eseutil.exe
-1209
JET_errInvalidDatabaseVersion
0xfffffb47
This ESE version is incompatible with the databaseAn eseutil or ese.dll (for example one used by a restore tool) from a different build than the one that wrote the databaseUse eseutil from the same or a newer build; restore tools: match ese.dll (Veeam Explorer guide)

Backup, restore and shadow copy codes#

These surface in backup job logs and the Application log when a VSS backup of a database fails.

CodeMeaningUsual causeFirst check
-526
JET_errInvalidBackup
0xfffffdf2
Incremental backup refused: circular logging is enabledCircular logging switched on (often to free disk) while incremental or differential jobs runGet-MailboxDatabase | ft Name,CircularLoggingEnabled; run a full backup. Guide
-560
JET_errMissingFullBackup
0xfffffdd0
Incremental attempted without a previous full backupA new database or copy that has never had a full backupRun a full backup; LastFullBackup should then show a date
-612
JET_errLogReadVerifyFailure
0xfffffd9c
Checksum error in a log file during backupA damaged log on diskeseutil /ml E00; DAG: reseed this copy; then take a new full backup
-2402
JET_errOSSnapshotTimeOut
0xfffff69e
The VSS shadow copy timed outThe snapshot didn't complete in time: slow storage or a slow VSS providervssadmin list writers; provider and storage latency (VSS codes)
-2403
JET_errOSSnapshotNotAllowed
0xfffff69d
Shadow copy refused: a backup or recovery is already in progressOverlapping backup jobs on the same database, or a backup during recoveryJob schedules: one backup per database at a time

How to verify a fix#

  1. Header: after a manual replay, eseutil /mh shows State: Clean Shutdown and Log Required: 0-0.
  2. Mounted: Mount-Database DB01 succeeds and Get-MailboxDatabase DB01 -Status reports Mounted : True.
  3. DAG: every copy is Healthy (the active one Mounted), queue lengths are near zero, the content index is Healthy and Test-ReplicationHealth passes every check.
  4. Quiet event log: the Get-WinEvent query above returns no new ESE errors for that database over the next day.
  5. Backup: a full Exchange-aware backup completes, LastFullBackup updates and the logs truncate.
  6. Storage: for corruption codes, no new disk errors appear in the System log.
PowerShell
Get-MailboxDatabase DB01 -Status | Format-List Name,Mounted,LastFullBackup,LastIncrementalBackup
Test-ReplicationHealth -Identity EX02
Get-MailboxDatabaseCopyStatus DB01 | Format-Table Name,Status,CopyQueueLength,ReplayQueueLength,ContentIndexState -AutoSize

References#

Revision history: Oct 2026 — re-checked against Microsoft Learn: 1 correction; 5 details reworded or labelled as reported by admins.

Written and checked against current Microsoft Learn documentation. Test changes with a pilot group before rolling them out to everyone, and if an admin center path has moved since, search for the setting name instead.

Spotted a mistake, or did this fix work differently for you? Email me or message me on LinkedIn — corrections are credited in the article.

Written by

Omer Eltayeb

Intune Subject Matter Expert in Cairo, Egypt, former Microsoft Cloud Solutions Architect, Microsoft Certified Trainer and Microsoft Innovative Educator Expert (2024–26) and Microsoft Elevate Educator Expert (2026–27). I share practical, step-by-step guides, study plans, scripts and toolkits for Microsoft Intune, Configuration Manager, Microsoft Entra ID, Microsoft Defender, Exchange and Microsoft 365 with the community.

Microsoft Certified Trainer (MCT) 2026Microsoft Innovative Educator Expert 2025–2026Microsoft Elevate Educator Expert 2026–2027ISC2 Certified Information Systems Security Professional (CISSP)Microsoft 365 Certified: Enterprise Administrator Expert (MS-102)