问题背景:
客户数据库检测到SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:10202320,但实际为 0:0)
1> 日志如下:
1 [09:24:55.125] {http--8080-81$879881269} at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:273) 2 [09:24:55.125] {http--8080-81$879881269} at com.caucho.server.port.TcpConnection.run(TcpConnection.java:682) 3 [09:24:55.125] {http--8080-81$879881269} at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:730) 4 [09:24:55.125] {http--8080-81$879881269} at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:649) 5 [09:24:55.125] {http--8080-81$879881269} at java.lang.Thread.run(Thread.java:662) 6 [09:24:55.125] {http--8080-81$879881269} Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:10202320,但实际为 0:0)。 8 在文件 ‘D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ecology.mdf‘ 中、偏移量为 0x000013759a0000 的位置对数据库 ID 5 中的页 (1:10202320) 执行 读取 期间,发生了该错误。 10 SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致; 12 有关详细信息,请参阅 SQL Server 联机丛书。 13 [09:24:55.125] {http--8080-81$879881269} at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196) 14 [09:24:55.125] {http--8080-81$879881269} at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1454) 15 [09:24:55.125] {http--8080-81$879881269} at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:388) 16 [09:24:55.125] {http--8080-81$879881269} at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:338) 17 [09:24:55.125] {http--8080-81$879881269} at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026) 18 [09:24:55.125] {http--8080-81$879881269} at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416) 19 [09:24:5
解决:
1 use db_name 2 go 3 ALTER DATABASE db_name SET SINGLE_USER 4 go 5 DBCC CHECKDB (‘db_name‘, repair_allow_data_loss) with NO_INFOMSGS 6 go 7 ALTER DATABASE db_name SET MULTI_USER 8 go
修复结果如下:
1 消息 8909,级别 16,状态 1,第 1 行 2 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (1:1748) 在其页头中包含错误的页 ID。页头中的 PageId = (0:0)。 3 该错误已修复。 4 消息 8909,级别 16,状态 1,第 1 行 5 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (1:1749) 在其页头中包含错误的页 ID。页头中的 PageId = (0:0)。 6 该错误已修复。 7 消息 8909,级别 16,状态 1,第 1 行 8 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (1:1750) 在其页头中包含错误的页 ID。页头中的 PageId = (0:0)。 9 该错误已修复。 10 消息 8909,级别 16,状态 1,第 1 行 11 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (1:1751) 在其页头中包含错误的页 ID。页头中的 PageId = (0:0)。 12 该错误已修复。 13 消息 8909,级别 16,状态 1,第 1 行 14 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (1:1772) 在其页头中包含错误的页 ID。页头中的 PageId = (0:0)。 15 该错误已修复。 16 消息 8909,级别 16,状态 1,第 1 行 17 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (1:1773) 在其页头中包含错误的页 ID。页头中的 PageId = (0:0)。 18 该错误已修复。 19 消息 8909,级别 16,状态 1,第 1 行 20 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (1:1774) 在其页头中包含错误的页 ID。页头中的 PageId = (0:0)。 21 该错误已修复。 22 消息 8909,级别 16,状态 1,第 1 行 23 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (1:1775) 在其页头中包含错误的页 ID。页头中的 PageId = (0:0)。 24 该错误已修复。 25 CHECKDB 发现有 0 个分配错误和 8 个一致性错误与任何单个的对象都没有关联。 26 CHECKDB 修复了 0 个分配错误和 8 个一致性错误,这些错误不与任何单个对象相关联。 27 修复: 页 (1:1772) 已从对象 ID 1694629080,索引 ID 0,分区 ID 111059211386880,分配单元 ID 111059211386880 (类型为 In-row data)释放。 28 修复: 页 (1:1773) 已从对象 ID 1694629080,索引 ID 0,分区 ID 111059211386880,分配单元 ID 111059211386880 (类型为 In-row data)释放。 29 修复: 页 (1:1774) 已从对象 ID 1694629080,索引 ID 0,分区 ID 111059211386880,分配单元 ID 111059211386880 (类型为 In-row data)释放。 30 修复: 页 (1:1775) 已从对象 ID 1694629080,索引 ID 0,分区 ID 111059211386880,分配单元 ID 111059211386880 (类型为 In-row data)释放。 31 修复: 已为数据库 ‘sssss‘ 中的对象 ‘dbo.MYCARGOOUTRECORD, IX_MYCARGOOUTRECORD_1‘ 成功地重新生成了 Nonclustered 索引。 32 修复: 已为数据库 ‘sssss‘ 中的对象 ‘dbo.MYCARGOOUTRECORD, IX_MYCARGOOUTRECORD‘ 成功地重新生成了 Nonclustered 索引。 33 消息 8928,级别 16,状态 1,第 1 行 34 对象 ID 1694629080,索引 ID 0,分区 ID 111059211386880,分配单元 ID 111059211386880 (类型为 In-row data): 无法处理页 (1:1772)。有关详细信息,请参阅其他错误消息。 35 该错误已修复。 36 消息 8928,级别 16,状态 1,第 1 行 37 对象 ID 1694629080,索引 ID 0,分区 ID 111059211386880,分配单元 ID 111059211386880 (类型为 In-row data): 无法处理页 (1:1773)。有关详细信息,请参阅其他错误消息。 38 该错误已修复。 39 消息 8928,级别 16,状态 1,第 1 行 40 对象 ID 1694629080,索引 ID 0,分区 ID 111059211386880,分配单元 ID 111059211386880 (类型为 In-row data): 无法处理页 (1:1774)。有关详细信息,请参阅其他错误消息。 41 该错误已修复。 42 消息 8928,级别 16,状态 1,第 1 行 43 对象 ID 1694629080,索引 ID 0,分区 ID 111059211386880,分配单元 ID 111059211386880 (类型为 In-row data): 无法处理页 (1:1775)。有关详细信息,请参阅其他错误消息。 44 该错误已修复。 45 消息 8945,级别 16,状态 1,第 1 行 46 表错误: 将重新生成对象 ID 1694629080,索引 ID 2。 47 该错误已修复。 48 消息 8945,级别 16,状态 1,第 1 行 49 表错误: 将重新生成对象 ID 1694629080,索引 ID 3。 50 该错误已修复。 51 CHECKDB 在表 ‘MYCARGOOUTRECORD‘ (对象 ID 1694629080)中发现 0 个分配错误和 4 个一致性错误。 52 CHECKDB 在表 ‘MYCARGOOUTRECORD‘ (对象 ID 1694629080)中修复了 0 个分配错误和 4 个一致性错误。 53 修复: 页 (1:1748) 已从对象 ID 2014630220,索引 ID 0,分区 ID 132030806097920,分配单元 ID 132030806097920 (类型为 In-row data)释放。 54 修复: 页 (1:1749) 已从对象 ID 2014630220,索引 ID 0,分区 ID 132030806097920,分配单元 ID 132030806097920 (类型为 In-row data)释放。 55 修复: 页 (1:1750) 已从对象 ID 2014630220,索引 ID 0,分区 ID 132030806097920,分配单元 ID 132030806097920 (类型为 In-row data)释放。 56 修复: 页 (1:1751) 已从对象 ID 2014630220,索引 ID 0,分区 ID 132030806097920,分配单元 ID 132030806097920 (类型为 In-row data)释放。 57 修复: 已为数据库 ‘sssss‘ 中的对象 ‘dbo.MYRECORDMEMORY, IX_MYRECORDMEMORY_1‘ 成功地重新生成了 Nonclustered 索引。 58 修复: 已为数据库 ‘sssss‘ 中的对象 ‘dbo.MYRECORDMEMORY, IX_MYRECORDMEMORY‘ 成功地重新生成了 Nonclustered 索引。 59 消息 8928,级别 16,状态 1,第 1 行 60 对象 ID 2014630220,索引 ID 0,分区 ID 132030806097920,分配单元 ID 132030806097920 (类型为 In-row data): 无法处理页 (1:1748)。有关详细信息,请参阅其他错误消息。 61 该错误已修复。 62 消息 8928,级别 16,状态 1,第 1 行 63 对象 ID 2014630220,索引 ID 0,分区 ID 132030806097920,分配单元 ID 132030806097920 (类型为 In-row data): 无法处理页 (1:1749)。有关详细信息,请参阅其他错误消息。 64 该错误已修复。 65 消息 8928,级别 16,状态 1,第 1 行 66 对象 ID 2014630220,索引 ID 0,分区 ID 132030806097920,分配单元 ID 132030806097920 (类型为 In-row data): 无法处理页 (1:1750)。有关详细信息,请参阅其他错误消息。 67 该错误已修复。 68 消息 8928,级别 16,状态 1,第 1 行 69 对象 ID 2014630220,索引 ID 0,分区 ID 132030806097920,分配单元 ID 132030806097920 (类型为 In-row data): 无法处理页 (1:1751)。有关详细信息,请参阅其他错误消息。 70 该错误已修复。 71 消息 8945,级别 16,状态 1,第 1 行 72 表错误: 将重新生成对象 ID 2014630220,索引 ID 2。 73 该错误已修复。 74 消息 8945,级别 16,状态 1,第 1 行 75 表错误: 将重新生成对象 ID 2014630220,索引 ID 3。 76 该错误已修复。 77 CHECKDB 在表 ‘MYRECORDMEMORY‘ (对象 ID 2014630220)中发现 0 个分配错误和 4 个一致性错误。 78 CHECKDB 在表 ‘MYRECORDMEMORY‘ (对象 ID 2014630220)中修复了 0 个分配错误和 4 个一致性错误。 79 CHECKDB 在数据库 ‘db_name‘ 中发现 0 个分配错误和 16 个一致性错误。 80 CHECKDB 在数据库 ‘db_name‘ 中修复了 0 个分配错误和 16 个一致性错误。
修复完成后再查询这个表就正常了。
SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:10202320,但实际为 0:0)