The database page read failed verification.

The_database_page_read_failed_verification (Rule)

Knowledge Base article:

Summary

ESE event 476 indicates that the database page read from Exchange store database failed verification because it contains no page data. The read operation will fail with error 1019. The particular database page referenced within the Exchange store file (such as priv1.edb) is empty when it is expected to be in use. Event 476 is always associated with a 1019 error in the Description section of the event.

Causes

Error 1019 = 0xfffffc05 = Jet_errPageNotInitialized = Blank database page. Error 1019 is reported when a page that is expected to be in use is not initialized or empty. If the page number field on a page in use is 0x00000000, a 1019 error is reported instead of a 1018 error, even though the page might also fail its checksum test.

The methods to correct a 1019 error are the same as those to correct a 1018 error. Error -1018 = 0xfffffc06 = Jet_errReadVerifyFailure = Checksum error on a database page.)

A 1019 issue may go undetected longer than a 1018 issue because 1019 issues are not detected by online backup.

Although the root cause of a 1018 error is very likely to be outside of Exchange, a 1019 error might be caused by Exchange if logical pointers or links between pages are inaccurate. However, it is more common that a 1019 error is caused because the file system was corrupted or it mapped pages into the database file that do not belong in the file.

Resolutions

In general, resolve a 1019 error the same way you would resolve a 1018 error. Exhaustively check the application event log for evidence of any 1018 errors that would be found in the Description section of ESE events. The standard resolution of a 1018 error follows below. Use this method to resolve 1019 errors.

Resolution of -1018 Errors

After a system administrator encounters a 1018 error, if the administrator runs diagnostic hardware tests against the server and these tests report no issues, the administrator might conclude that Exchange must be responsible for the issue because the hardware passed the initial analysis. However, in case after case, further investigation by Microsoft or hardware vendors uncovered subtle issues in hardware, firmware, or device drivers that are actually responsible for damaging the database file. Ordinary diagnostic tests might not detect all of the transient faults for several reasons. Issues in firmware or driver software might fall outside the capabilities of diagnostic programs. Diagnostic tests might be unable to adequately simulate long run times or complex loads. Also, the addition of diagnostic monitoring or debug logging might change the system enough to prevent the issue from appearing again.

The first step is to use one of the three methods below to move the existing databases to new hardware:

The second step is to diagnose and correct the original hardware problem by checking the System log and running extensive tests from the hardware manufacturer on the hardware, firmware, raid controllers, and device drivers. Then, you can use Move Mailbox to move the users back, or restore from an online backup to the repaired computer.

Definitely do not simply repair the existing database or restore from online backup until the hardware errors have been diagnosed and corrected. You must diagnose and correct the hardware errors before repairing, restoring, or moving your mailboxes back, or using ExMerge to move your data back. If you do not correct the underlying problem, then the 1018 errors will return because the root cause has not been fixed.

External

For more information about ESE event 476, see:

Element properties:

TargetMicrosoft.Exchange.Databases
CategoryEventCollection
EnabledTrue
Event_ID476
Event SourceESE
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
RemotableTrue
Alert Message
The database page read failed verification.
{0}
Event LogApplication

Member Modules:

ID Module Type TypeId RunAs 
EventDS DataSource Microsoft.Windows.EventProvider Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="The_database_page_read_failed_verification" Enabled="onEssentialMonitoring" Target="Exch2003Core!Microsoft.Exchange.Databases" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="EventDS" TypeID="Windows!Microsoft.Windows.EventProvider">
<ComputerName>.</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>Channel</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>Application</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>476</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>ESE</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>2</Severity>
<AlertOwner>$Data/PublisherName$</AlertOwner>
<AlertMessageId>$MPElement[Name="The_database_page_read_failed_verification.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>