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.
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.
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:
Obtain new hardware and install a second server in the Administrative Group and use Move Mailbox to move the mailboxes to the new server.
ExMerge the mailboxes out to .pst files and then ExMerge in to a new server with the same name.
If there is no backup and using Move Mailbox is not an option, the last resort will be to repair the database by running eseutil /p and isinteg -fix . You must ExMerge out all the data after the repair and use ExMerge again to recreate the databases.
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.
For more information about ESE event 476, see:
Target | Microsoft.Exchange.Databases | ||
Category | EventCollection | ||
Enabled | True | ||
Event_ID | 476 | ||
Event Source | ESE | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Remotable | True | ||
Alert Message |
| ||
Event Log | Application |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
EventDS | DataSource | Microsoft.Windows.EventProvider | Default |
GenerateAlert | WriteAction | System.Health.GenerateAlert | Default |
<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>