Fix it now
Microsoft publishes -1018 as JET_errReadVerifyFailure, a checksum error on a database page. The engine verifies every page as it reads it, so this is the database telling you the bytes on disk are not the bytes it wrote. Get a clean copy of the data; do not repair the file in place.
Get-MailboxDatabaseCopyStatus * | Format-Table Name,Status,CopyQueueLength,ReplayQueueLength,ContentIndexState
Suspend-MailboxDatabaseCopy -Identity DB01\SERVER2
Update-MailboxDatabaseCopy -Identity DB01\SERVER2 -DeleteExistingFiles -SourceServer SERVER1
Resume-MailboxDatabaseCopy -Identity DB01\SERVER2
- Find the engine entry in the Application log and note the database, file, offset and page it names.
- Read the System log for the same period. Disk, storage port and controller entries around the failure are the strongest signal about the real cause, and several databases on one volume points at the storage they share.
- If there is no healthy copy, restore from the last known good backup and replay the logs. That is the only route that returns all of the data.
- Before bringing anything back into service, fix the antivirus exclusions on every Exchange server, passive members included.
Microsoft requires a database copy to be suspended before Update-MailboxDatabaseCopy will run, and -DeleteExistingFiles removes only the log files it checks for: it fails if other files are present, so database files at the target must be removed by hand.
If the reseeded copy is healthy and the queues have drained, you are done. If there is no copy and no backup, the next sections matter a great deal.
Why it happens
The engine writes fixed-size pages, each carrying a checksum, and recalculates it on every read. A mismatch means the bytes on disk are not the bytes it wrote, and it has no way to know which byte changed or what it should have been. Refusing the read is the only safe response. Microsoft’s published description is exactly that: JET_errReadVerifyFailure, there is a checksum error on a database page.
Because verification happens on read, the damage was done earlier, sometimes much earlier. A page nobody has touched for months can sit corrupt until a search or a backup finally reads it. The suspect is always the write path: a controller cache that lost power without battery protection, a firmware or driver defect, a failing disk, or a virtualisation layer that acknowledged a write it had not committed.
The other classic cause is a file-level scanner with its hands on the database and log files. Microsoft is unusually direct about this: the biggest potential problem is that a program such as antivirus might lock or quarantine an open log or database file that Exchange needs to modify, and this can cause severe Exchange Server issues including potential data loss. If the published exclusions were never applied here, you have found something to fix regardless of what else you find.
The storage stack damaged the page
You have this one if The System log shows disk or storage port errors near the engine entry, or more than one database on the same storage is affected.
- Look for storage timeout and reset entries in the System log around the same time.
- Check controller firmware, driver versions and the write cache battery against the vendor’s current guidance, and run the vendor’s disk diagnostics rather than guessing.
- Move the database to healthy storage before putting it back into production.
If the volume is thin provisioned, check the backing pool. A pool that reaches capacity can fail writes in ways the guest never sees as an error.
A scanner or backup agent is touching the files
You have this one if Exclusions were never applied, or the errors began after a change to the security product on this server.
- Apply Microsoft’s published folder exclusions on every server: %ExchangeInstallPath%Mailbox for databases, checkpoints and logs; TransportRoles\Data\Queue; Logging; TransportRoles\Logs; TransportRoles\Data\SenderReputation; TransportRoles\Data\Temp.
- Add the process exclusions Microsoft names, including MSExchangeStore.Service.exe, Microsoft.Exchange.Store.Worker.exe, EdgeTransport.exe and MSExchangeTransport.exe.
- Confirm on-access scanning is genuinely not touching those paths rather than trusting the console, and run
fltmc filtersto see which filter drivers are loaded. - Confirm the backup agent uses a supported Exchange-aware method rather than reading the files directly.
One copy is damaged and another is clean
You have this one if Get-MailboxDatabaseCopyStatus shows one copy failed while another remains healthy.
- Confirm the healthy copy really is healthy: check its status, its copy and replay queue lengths and its content index state.
- Suspend the damaged copy, then reseed it with
Update-MailboxDatabaseCopy -Identity DB01\SERVER2 -DeleteExistingFiles -SourceServer SERVER1. - Seeding from another passive copy rather than the active one keeps the load off the server your users are connected to.
- Resume the copy and watch the queues settle near zero. A reseed copies the whole database across the network, so plan the window.
There is no healthy copy and no usable backup
You have this one if A single-server deployment, and the backup is missing, incomplete or itself unreadable.
- Copy the database and log files onto separate storage before doing anything else. Every option below destroys information.
- Try the least destructive route first: create a new database and move mailboxes into it with
New-MoveRequest. Moving reads through the store rather than the raw pages, so mailboxes that never touch the damaged page move intact. - Only when that fails consider a hard repair, and only against the copy you made.
Full reference
What the code family says
| Code | Symbolic name | Microsoft’s description |
|---|---|---|
-1018 |
JET_errReadVerifyFailure | There is a checksum error on a database page |
-1022 |
JET_errDiskIO | There is a disk IO error |
-1206 |
JET_errDatabaseCorrupted | There is a non-database file or corrupt database |
The engine event IDs that report a page verification failure are not published by Microsoft, so read the file, offset and page numbers from your own entries and use them to establish scope: one page in one database is a different conversation from a page failing on every database on a volume.
A hard repair discards whatever it cannot read and does not tell you what it deleted. Run it against a copy, never the original. Afterwards the file must be defragmented and every mailbox moved into a freshly created database. A repaired database is a vehicle for extracting data, not one you continue to run.
A note on eseutil
Microsoft no longer publishes a current reference page for eseutil, so this article does not present its switches as documented syntax. The tool ships with Exchange and prints its own mode list when run without arguments; confirm the switch you want there before running anything against a database file, and take a copy first. Everything in the fix layer above uses cmdlets that are documented.
Reseeding correctly
- Suspend the copy first. Microsoft states you must suspend a database copy before you can update it.
- Choose the source deliberately with -SourceServer, which names a Mailbox server holding a passive copy to seed from.
- Use -DeleteExistingFiles knowing what it does: it removes only the files it checks for and fails if other files are present, taking no action on anything else at the target.
- For a long seed, -BeginSeed starts it asynchronously and exits, and -ManualResume leaves you to resume replication yourself.
- If only the search catalogue needs rebuilding, -CatalogOnly seeds that alone; catalogue seeding always uses the MAPI network regardless of -Network.
When it happens again
- One page failing verification is evidence that the write path is not trustworthy. The next occurrence may land somewhere more important than a message body.
- Compare counts over time on a dismounted copy rather than assuming. If the number grows, the cause has not been fixed.
- Keep watching the System log for storage errors for at least a full backup cycle after the change.
- Confirm the exclusions were applied on the passive members too. They are routinely forgotten, and a passive copy is a database file like any other.
When a licence is the actual fix
Correcting the exclusions on antivirus you already own costs nothing, and if that product is server aware that is usually the end of the matter. The purchase case is narrower: an Exchange server running desktop antivirus with no Exchange awareness, no supported exclusion model and no way to scan mail without sitting in the file path. Microsoft’s own warning is that a program locking or quarantining an open log or database file can cause severe problems including potential data loss, so this is a real risk rather than a tidiness argument. A server or Exchange-aware licence gives you a product designed to hook the supported interfaces instead of the database files, and Arco supplies server antivirus licensing for Exchange hosts and can check which SKU covers the servers and roles you run. If your current product supports proper exclusions, fix those first and buy nothing.
Every code this article covers
| Code | What it points at | Source |
|---|---|---|
-1018 |
JET_errReadVerifyFailure: there is a checksum error on a database page | Microsoft Learn |
JET_errReadVerifyFailure |
The symbolic name Microsoft publishes for -1018 | Microsoft Learn |
Event ID 474 |
No description is published by Microsoft. Read the database, file, offset and page number from your own entry and treat it as the page verification failure that produced -1018 | not published by the vendor |
Event ID 475 |
No description is published by Microsoft. Take the file, offset and page it names and handle it exactly as you would the entry above | not published by the vendor |
Confirm the fix worked
- The database mounts, stays mounted, and clients can open the mailboxes it holds.
- Every copy reports healthy with copy and replay queues near zero and a healthy content index state.
- No new page verification entries or storage errors appear in the Application and System logs over a full day.
- Microsoft’s published exclusions are in place on every Exchange server, including passive members.
Questions people ask about this
Will buying antivirus fix an existing -1018?
No. Antivirus choice affects whether this happens again. It does nothing for a page that is already damaged: that page comes back from a copy, from a backup, or not at all.
Can I just run a hard repair and move on?
You can. What you get is a database with unknown content removed and no record of what went missing, which still has to be defragmented and emptied into a new database. Reseeding or restoring returns all of the data for about the same effort.
Is a single -1018 worth acting on?
Yes. One page failing verification is evidence that the write path is not trustworthy, and the next occurrence may land somewhere more important.
Why does the article not give me the eseutil command line?
Because Microsoft no longer publishes a current reference for it, and this KB does not present unverified syntax as documented. The tool prints its own mode list when run without arguments. Everything in the fix layer uses cmdlets that are documented.
Do the exclusions apply to passive copies too?
Yes. A passive copy is a database file on a disk like any other, and passive members are the ones most often left out when exclusions are rolled out.
