Skip to content

Est. 2011ยทMicrosoft Partner 7033487ยทDelivery under 3 minยทSupport 7 days a week

Your vault is empty.

Free Fix -1206

Error -1206 JET_errDatabaseCorrupted: a non-database file or a corrupt database

10 min read Updated October 4, 2026 Exchange Server

Fix it now

Microsoft publishes -1206 as JET_errDatabaseCorrupted: there is a non-database file or a corrupt database. This is the engine reporting on the database file itself, so the first moves are to establish the state of every copy and get a clean one back, not to run mailbox repairs.

Run these in the Exchange Management Shell first

Get-MailboxDatabase -Status | Format-List Name,Mounted,EdbFilePath,LogFolderPath
Get-MailboxDatabaseCopyStatus * | Format-Table Name,Status,CopyQueueLength,ReplayQueueLength,ContentIndexState
  1. Establish scope from the entry that reported it. A database-level engine error is a database problem; do not read it as damage to one mailbox.
  2. If a healthy copy exists in a DAG, activate it. That returns every mailbox immediately and turns the damaged copy into something you can reseed on your own schedule.
  3. With no healthy copy, restore from the last known good backup and replay the logs. That is the route that returns all of the data.
  4. Confirm the file the engine is complaining about is the file you think it is, and that the paths on disk match what Get-MailboxDatabase reports.
  5. Only when there is no copy and no usable backup does a repair enter the conversation, and then against a copy of the file, never the original.

Mailbox repair requests do not address this code. They target logical corruption inside a mailbox, which is a separate problem with its own symptoms, and running them here costs time you do not have.

If a healthy copy is mounted and users are working, you are done for now. The next section explains what -1206 is and how mailbox-level corruption differs.

Why it happens

Microsoft’s published description for -1206 is short and worth taking literally: JET_errDatabaseCorrupted, there is a non-database file or a corrupt database. It is an engine-level condition raised about the file, normally surfaced by the database utility or by a mount that fails. It is not a report about one mailbox, one folder or one item count, and there is nothing in the code that says the rest of the database is fine.

That distinction changes the whole response. For a database-file condition, the reliable moves are the ones that get you a different copy of the data: activate a healthy copy, restore from backup, or as a last resort extract what can be extracted from a repaired copy of the file. Mailbox-level logical corruption is the other thing, with its own signature – wrong item counts, folders that will not open, search folders pointing at nothing – and its own tool in New-MailboxRepairRequest.

The two codes that often travel with -1206 are also published, and they describe record-level complaints rather than file-level ones. -1601 is JET_errRecordNotFound, the key was not found. -1605 is JET_errKeyDuplicate, there is an illegal duplicate key. Seeing those alongside a failed mount tells you the engine is unhappy about structures inside the file; it does not turn a corrupt database into a per-mailbox problem.

The database will not mount and a healthy copy exists

You have this one if One copy reports failed while another is healthy with queues near zero.

  1. Activate the healthy copy so users are back, then deal with the damaged one as a scheduled job.
  2. Suspend the damaged copy and reseed it: Update-MailboxDatabaseCopy -Identity DB01\SERVER2 -DeleteExistingFiles -SourceServer SERVER1.
  3. Find out why that copy failed before you reseed onto the same storage, or you will do it twice.

Microsoft requires the copy to be suspended before Update-MailboxDatabaseCopy will run, and -DeleteExistingFiles removes only the files it checks for: it fails if other files are present at the target.

There is no copy, and a backup exists

You have this one if A standalone server, and the last full backup is recent enough to be worth using.

  1. Restore the complete set, database and logs together, into a folder away from the production paths.
  2. Let the backup product perform its own recovery if it offers to, rather than running engine tools over its work.
  3. Mount and verify before moving anything into place, and only then repoint Exchange at it.

The complaint is about the wrong file

You have this one if The engine reports a non-database file, and the path involved has recently been changed, restored or copied.

  1. Compare the paths on disk with what Get-MailboxDatabase DB01 | Format-List EdbFilePath,LogFolderPath reports.
  2. Confirm nothing else has written into the database or log directories, and that no second database shares that log folder.
  3. If the file is simply in the wrong place, correct it with Move-DatabasePath rather than by copying files, remembering that it cannot run against a replicated database until every copy is removed.

It is actually mailbox-level logical corruption

You have this one if The database mounts and behaves normally, and one mailbox shows wrong item counts, folders that will not open, or search results that make no sense.

  1. This is a different problem from -1206. Run a detection pass first: New-MailboxRepairRequest -Mailbox user@example.com -CorruptionType SearchFolder,ProvisionedFolder -DetectOnly.
  2. Run AggregateCounts and FolderView as separate requests. Microsoft marks both as values that can only be used by themselves, so combining all four in one command is rejected.
  3. Scope to a mailbox rather than a database unless you have a reason not to; a database-scoped request affects every user in it.

Microsoft states that after you begin a repair request you cannot stop it unless you dismount the database. Scope and schedule it accordingly – Remove-MailboxRepairRequest clears request entries, it is not documented as a way to abort a repair already running.

Full reference

The codes, as Microsoft publishes them

Code Symbolic name Microsoft’s description
-1206 JET_errDatabaseCorrupted There is a non-database file or corrupt database
-1601 JET_errRecordNotFound The key was not found
-1605 JET_errKeyDuplicate There is an illegal duplicate key
-1018 JET_errReadVerifyFailure There is a checksum error on a database page

The last row is there for contrast. A checksum failure is a specific page failing verification on read, and it has its own article. -1206 is a broader statement about the file, which is why the recovery routes are broader too.

Mailbox repair requests: what they are for

New-MailboxRepairRequest detects and fixes corruption inside a mailbox or across all mailboxes in a database. The corruption types you can ask for include SearchFolder, ProvisionedFolder, MessageId, AggregateCounts and FolderView among many others, and Microsoft marks a large number of them – AggregateCounts and FolderView included – as values that can only be used by themselves. That is why the four-value command that circulates in older material fails: it was written against a version whose rules were different.

Three requests, not one

New-MailboxRepairRequest -Mailbox user@example.com -CorruptionType SearchFolder,ProvisionedFolder -DetectOnly
New-MailboxRepairRequest -Mailbox user@example.com -CorruptionType AggregateCounts
New-MailboxRepairRequest -Mailbox user@example.com -CorruptionType FolderView

Microsoft’s own statement is that after you begin a repair request, you cannot stop it unless you dismount the database. Plan the window on that basis. Remove-MailboxRepairRequest removes request entries; it is not documented as a way to abort a repair that is already running.

When a move is better than a repair

Where a database is mountable but untrustworthy, creating a new database and moving mailboxes into it with New-MoveRequest rebuilds every structure in the target and leaves the old file behind. You can verify each mailbox as it lands and read the move report for items that were skipped. It takes longer in wall clock time than a repair and considerably less of your nerve, and it is the route that leaves you with a database you are willing to keep.

A note on the engine utility

Microsoft no longer publishes a current reference page for the Exchange database utility, so its switches are not presented here as documented syntax. If you reach the point of inspecting a header or attempting a repair, run the tool without arguments to see the mode list for your build, work against a copy of the file, and treat a hard repair as an extraction step: whatever comes out of it must be defragmented, emptied into a freshly created database, and the repaired file discarded.

When it keeps coming back

  • Look at the storage. A file-level condition that recurs on the same volume is a storage conversation, not a database one.
  • Apply Microsoft’s published antivirus exclusions on every server, active and passive, and check with fltmc filters that nothing else is in the path.
  • Check the build. Exchange Server 2016 and 2019 went out of support on 14 October 2025, so a defect fixed in a current build may have no fix available on yours.
  • Move the mailboxes to a different database and see whether the problem follows them. If it does not, the file was the problem.

Every code this article covers

Code What it points at Source
-1206 JET_errDatabaseCorrupted: there is a non-database file or corrupt database. A file-level condition raised by the engine, not per-mailbox logical corruption Microsoft Learn
-1601 JET_errRecordNotFound: the key was not found Microsoft Learn
-1605 JET_errKeyDuplicate: there is an illegal duplicate key Microsoft Learn
JET_errDatabaseCorrupted The symbolic name Microsoft publishes for -1206 Microsoft Learn

Confirm the fix worked

  1. A healthy copy is mounted, or the restored database mounts and stays mounted.
  2. Get-MailboxDatabaseCopyStatus shows every copy healthy with queues near zero and a healthy content index state.
  3. Users can open mailboxes on the database and send through it.
  4. If you ran a detection pass on a mailbox, the report shows what was found before anything was changed.

Questions people ask about this

Does fixing this cost anything?

No. Activating a copy, reseeding and restoring are all built into Exchange and your backup product. A third-party recovery tool is worth considering only when you have no copy and no backup.

Should I start with a mailbox repair request?

No. -1206 is Microsoft’s code for a non-database file or a corrupt database, which is a condition about the file. Mailbox repair requests address logical corruption inside a mailbox and cannot fix this. Get a clean copy of the data first.

Why did my four-value repair command fail?

Because AggregateCounts and FolderView are both marked in Microsoft’s list as values that can only be used by themselves. Split them into separate requests, and run a -DetectOnly pass first.

Can I stop a repair request once it starts?

Not without dismounting the database. Microsoft states that directly. Remove-MailboxRepairRequest clears request entries; it is not a documented way to abort a running repair.

Is moving mailboxes really better than repairing?

Where the database still mounts, usually yes. A move rebuilds every structure in a brand new database, you can verify each mailbox as it lands, and the move report lists anything that was skipped.

Related error codes

Was this article helpful?

Your feedback helps us improve our documentation.

Related articles

Free Fix HTTP 500.19 on Exchange virtual directories: broken IIS configuration files Free Fix Error -1216 attached database mismatch and other mount-time JET failures Free Fix HTTP 500 on Microsoft-Server-ActiveSync: every mobile device stops syncing Free Fix 550 5.7.1 in Exchange: the receive connector refuses to relay your mail
โ† Back to Knowledge Base