MSSQL on Windows: Table error: Unexpected page type

Microsoft.SQLServer.Windows.EventRule.DBEngine.Table_error___Unexpected_page_type__1_5_Rule (Rule)

Page P_ID had a page type that was unexpected by the code trying to interpret it. The page is marked allocated, however, which is why the DBCC code is trying to interpret it.

Knowledge Base article:

Summary

Page P_ID had a page type that was unexpected by the code trying to interpret it. The page is marked allocated, however, which is why the DBCC code is trying to interpret it.

The various page types are:

1 - Page::DATA_PAGE : A data page in a heap or a clustered index.

2 - Page::INDEX_PAGE : An index (B-tree) page in the tree of a clustered or non-clustered index, or the leaf of a non-clustered index.

3 - Page::TEXT_MIX_PAGE : A text page shared between various text structures.

4 - Page::TEXT_TREE_PAGE : A non-shared text page.

5 - Unused.

6 - Page::WF_PAGE : A work file page.

7 - Page::SORT_PAGE :A page used in internal sorts.

8 - Page::GAM_PAGE : A GAM allocation map.

9 - Page::SGAM_PAGE : An SGAM allocation map.

10 - Page::IAM_PAGE : An index allocation map.

11 - Page::PFS_PAGE : A free-space and allocation status page.

12 - Unused.

13 - Page::BOOT_PAGE : A database-wide information page.

14 - Page::SYSCONFIG_PAGE : A server config block.

15 - Page::FILEHEADER_PAGE : The first page of every file.

16 - Page::DIFF_MAP_PAGE : A differential bitmap for a GAM interval.

17 - Page::ML_MAP_PAGE : A minimally-logged extent map for a GAM interval.

Per-state information:

State 1 : The page was found in the leaf level of a critical system table, but was not a data page with type = 1.

State 36 : The page had a completely unrecognized page type or is marked as a page that DBCC previously de-allocated during repair. The error is discovered during the Page::Audit method.

State 300 : The page is a data page with type = 1, but it belongs to a non-clustered index.

State 301 : The page is an index page with type = 2, but it belongs to a heap or text index.

State 302 : The page is a text page with type = 3 or 4, but it belongs to a heap or a clustered or non-clustered index.

State 303 : This state is from code that is reading pages that purportedly are allocated to an index (that is, they are IAM pages or data pages, index pages, or text pages marked as allocated to an IAM page). The code has found a page that is none of these types. Examine the page type to determine the type of page that was found

Resolutions

HARDWARE FAILURE

Run hardware diagnostics and correct any problems. In addition, examine the Microsoft Windows NT system and application logs and the SQL Server error log to see if the error occurred as the result of hardware failure. Fix any hardware-related problems.

If you have persistent data inconsistency problems, try to swap out different hardware components to isolate the problem. Check that your system does not have write caching enabled on the disk controller. If you suspect this to be the case, contact your hardware vendor.

Finally, you might find it beneficial to switch to a completely new hardware system, including reformatting the disk drives and reinstalling the operating system.

RESTORE FROM BACKUP

If the problem is not hardware related and a known clean backup is available, restore the database from the backup.

DBCC CHECKDB

If no clean backup is available, execute DBCC CHECKDB without a repair clause to determine the extent of the corruption. DBCC CHECKDB will recommend a repair clause to use. Then, execute DBCC CHECKDB with the appropriate repair clause to repair the corruption.

CAUTION: If you are unsure what effect DBCC CHECKDB with a repair clause has on your data, contact your primary support provider before executing this statement.

If running DBCC CHECKDB with one of the repair clauses does not correct the problem, contact your primary support provider.

Overridable Parameters

Name

Description

Default Value

Enabled

Enables or disables the workflow.

Yes

Interval (seconds)

The recurring interval of time in seconds in which to run the workflow.

300

Priority

Defines Alert Priority.

1

Severity

Defines Alert Severity.

2

Synchronization Time

The synchronization time specified by using a 24-hour format. May be omitted.

 

Timeout (seconds)

Specifies the time the workflow is allowed to run before being closed and marked as failed.

200

Timeout for query execution (seconds)

The workflow will fail and register an event, if the query execution takes longer than the specified period.

60

Timeout for database connection (seconds)

The workflow will fail and register an event, if it cannot access the database during the specified period.

15

Element properties:

TargetMicrosoft.SQLServer.Windows.DBEngine
CategoryEventCollection
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL on Windows: Table error: Unexpected page type
{2}
CommentMom2017ID='{121A55A3-5324-47C2-BBF9-537DCD60C5C1}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

ID Module Type TypeId RunAs 
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ DataSource Microsoft.SQLServer.Windows.DataSource.EventCollectionFiltered Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.Windows.EventRule.DBEngine.Table_error___Unexpected_page_type__1_5_Rule" Target="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2017ID='{121A55A3-5324-47C2-BBF9-537DCD60C5C1}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Microsoft.SQLServer.Windows.DataSource.EventCollectionFiltered">
<MachineName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<MonitoringType>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<EventDisplayNumber>8938</EventDisplayNumber>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="Health!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>2</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.Windows.EventRule.DBEngine.Table_error___Unexpected_page_type__1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>Event ID: $Data/Property[@Name='EventID']$. $Data/Property[@Name='Message']$</AlertParameter3>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>