笔记37-徐 根据页面错误,找到改页面所属的对象是表 索引 还是其他
笔记37-徐 根据页面错误,找到改页面所属的对象是表 索引 还是其他
1 --根据页面错误,找到改页面所属的对象是表 索引 还是其他 2 3 4 --消息 824,级别 24,状态 2,第 1 行 5 --SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 9:912,但实际为 0:0)。在文件 'I:\data\PIMRpt_DB12_f.ndf' 中、偏移量为 0x00000000720000 的位置对数据库 ID 5 中的页 (9:912) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。 6 7 8 --上面的错误信息表示页面号912有错误 页 (9:912) 9 10 --找出页所属objectid 11 --DBCC PAGE(dbid,fileid,pageid,formatid) 12 --formatid一般为3 13 14 15 EXEC sys.sp_helpdb @dbname = pratice -- sysname 16 USE pratice 17 EXEC sys.sp_helpfile 18 19 --下面这两句要一起运行 20 DBCC TRACEON(3604,-1) 21 DBCC PAGE(13,1,10,3) --指定错误页面号10 22 23 --下面我是分别查看了10号页面和912号页面 24 25 26 --IndexId=0 堆 数据页 27 --IndexId=1 聚集索引 索引页 28 --IndexId>1 非聚集索引 索引页 29 30 --------------------------页面号10-------------------------------------------------------------------- 31 --输出结果 页面号为10的 32 --根据显示结果中的IndexId=1表示这个页面存储的是索引 33 --Metadata: IndexId = 1 34 --Metadata: ObjectId = 44 35 --m_pageId = (1:10) 36 --Metadata: PartitionId = 281474979594240 37 38 39 --DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 40 41 --PAGE: (1:10) 42 -- 43 -- 44 --BUFFER: 45 -- 46 -- 47 --BUF @0x03EDB51C 48 -- 49 --bpage = 0x074C6000 bhash = 0x00000000 bpageno = (1:10) 50 --bdbid = 13 breferences = 0 bUse1 = 35725 51 --bstat = 0x2c00009 blog = 0x32159 bnext = 0x00000000 52 -- 53 --PAGE HEADER: 54 -- 55 -- 56 --Page @0x074C6000 57 -- 58 --m_pageId = (1:10) m_headerVersion = 1 m_type = 10 59 --m_typeFlagBits = 0x0 m_level = 0 m_flagBits = 0x200 60 --m_objId (AllocUnitId.idObj) = 44 m_indexId (AllocUnitId.idInd) = 1 Metadata: AllocUnitId = 281474979594240 61 --Metadata: PartitionId = 281474979594240 Metadata: IndexId = 1 62 --Metadata: ObjectId = 44 m_prevPage = (0:0) m_nextPage = (0:0) 63 --pminlen = 90 m_slotCnt = 2 m_freeCnt = 6 64 --m_freeData = 8182 m_reservedCnt = 0 m_lsn = (12:176:14) 65 --m_xactReserved = 0 m_xdesId = (0:0) m_ghostRecCnt = 0 66 --m_tornBits = -1951658170 67 -- 68 --Allocation Status 69 -- 70 --GAM (1:2) = ALLOCATED SGAM (1:3) = NOT ALLOCATED 71 --PFS (1:1) = 0x70 IAM_PG MIXED_EXT ALLOCATED 0_PCT_FULL DIFF (1:6) = CHANGED 72 --ML (1:7) = NOT MIN_LOGGED 73 -- 74 --IAM: Header @0x5E7FC064 Slot 0, Offset 96 75 -- 76 --sequenceNumber = 0 status = 0x0 objectId = 0 77 --indexId = 0 page_count = 0 start_pg = (1:0) 78 -- 79 -- 80 --IAM: Single Page Allocations @0x5E7FC08E 81 -- 82 --Slot 0 = (0:0) Slot 1 = (1:50) Slot 2 = (0:0) 83 --Slot 3 = (0:0) Slot 4 = (0:0) Slot 5 = (0:0) 84 --Slot 6 = (0:0) Slot 7 = (0:0) 85 -- 86 -- 87 --IAM: Extent Alloc Status Slot 1 @0x5E7FC0C2 88 -- 89 --(1:0) - (1:43256) = NOT ALLOCATED 90 -- 91 -- 92 --DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 93 94 ------------------------------------------------------------------------------------------------------------------- 95 -------------------------------------页面号192--------------------------------------------------------------------- 96 --因为SQLSERVER输出有4000多行,所以我只摘录了一部分 97 98 --输出结果 页面号为912的 99 --根据显示结果中的IndexId=0表示这个页面是数据页 100 --d = 超级坏 是表里面的数据 101 --Metadata: IndexId = 0 102 --Metadata: ObjectId = 197575742 103 --Metadata: PartitionId = 72057594039500800 --页面所属分区 104 --m_pageId = (1:912) 105 106 107 --DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 108 -- 109 --PAGE: (1:912) 110 -- 111 -- 112 --BUFFER: 113 -- 114 -- 115 --BUF @0x03F3E79C 116 -- 117 --bpage = 0x0A20A000 bhash = 0x00000000 bpageno = (1:912) 118 --bdbid = 13 breferences = 3 bUse1 = 35858 119 --bstat = 0xc00009 blog = 0x21212159 bnext = 0x00000000 120 -- 121 --PAGE HEADER: 122 -- 123 -- 124 --Page @0x0A20A000 125 -- 126 --m_pageId = (1:912) m_headerVersion = 1 m_type = 1 127 --m_typeFlagBits = 0x4 m_level = 0 m_flagBits = 0x200 128 --m_objId (AllocUnitId.idObj) = 89 m_indexId (AllocUnitId.idInd) = 256 129 --Metadata: AllocUnitId = 72057594043760640 130 --Metadata: PartitionId = 72057594039500800 Metadata: IndexId = 0 131 --Metadata: ObjectId = 197575742 m_prevPage = (1:911) m_nextPage = (1:913) 132 --pminlen = 25 m_slotCnt = 155 m_freeCnt = 7 133 --m_freeData = 7875 m_reservedCnt = 7 m_lsn = (2252:12136:46) 134 --m_xactReserved = 7 m_xdesId = (0:2442865) m_ghostRecCnt = 0 135 --m_tornBits = 437279274 136 -- 137 --Allocation Status 138 -- 139 --GAM (1:2) = ALLOCATED SGAM (1:3) = NOT ALLOCATED PFS (1:1) = 0x44 ALLOCATED 100_PCT_FULL 140 --DIFF (1:6) = CHANGED ML (1:7) = NOT MIN_LOGGED 141 -- 142 --Slot 0 Offset 0x60 Length 65 143 -- 144 --Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 145 -- 146 --Memory Dump @0x5F49C060 147 -- 148 --00000000: 30002200 50d65f01 339f0000 64b90100 †0.".P._.3...d... 149 --00000010: 016cb901 00000000 004f57ba 4e00042d †.l.......OW.N..- 150 --00000020: 00000800 40040033 0039003d 00410063 †....@..3.9.=.A.c 151 --00000030: b9010085 8da77e4f 57bbb5c8 cb4f57ba †......~OW....OW. 152 --00000040: 4e†††††††††††††††††††††††††††††††††††N 153 -- 154 --Slot 0 Column 0 Offset 0x2f Length 4 155 -- 156 --DROPPED = 112995 157 -- 158 --Slot 0 Column 1 Offset 0x4 Length 8 159 -- 160 --c = 08 2 2011 9:21PM 161 -- 162 --Slot 0 Column 2 Offset 0x33 Length 6 163 -- 164 --d = 超级坏 165 -- 166 --Slot 0 Column 3 Offset 0xc Length 4 167 -- 168 --a = 112996 169 -- 170 --Slot 0 Column 4 Offset 0x39 Length 4 171 -- 172 --DROPPED = 坏人 173 -- 174 --Slot 0 Column 5 Offset 0x10 Length 9 175 -- 176 --e = 113004 177 --salary = [NULL] 178 -- 179 --Slot 0 Column 7 Offset 0x3d Length 4 180 -- 181 --b = 坏人 182 -- 183 --Slot 1 Offset 0xa1 Length 65 184 -- 185 --Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 186 -- 187 --Memory Dump @0x5F49C0A1 188 -- 189 --00000000: 30002200 50d65f01 339f0000 65b90100 †0.".P._.3...e... 190 --00000010: 016db901 00000000 004f57ba 4e00042d †.m.......OW.N..- 191 --00000020: 00000800 40040033 0039003d 00410064 †....@..3.9.=.A.d 192 --00000030: b9010085 8da77e4f 57bbb5c8 cb4f57ba †......~OW....OW. 193 --00000040: 4e†††††††††††††††††††††††††††††††††††N 194 -- 195 --Slot 1 Column 0 Offset 0x2f Length 4 196 -- 197 --DROPPED = 112996 198 -- 199 --Slot 1 Column 1 Offset 0x4 Length 8 200 -- 201 --c = 08 2 2011 9:21PM 202 -- 203 --Slot 1 Column 2 Offset 0x33 Length 6 204 -- 205 --d = 超级坏 206 -- 207 --Slot 1 Column 3 Offset 0xc Length 4 208 -- 209 --a = 112997 210 -- 211 --Slot 1 Column 4 Offset 0x39 Length 4 212 -- 213 --DROPPED = 坏人 214 -- 215 --Slot 1 Column 5 Offset 0x10 Length 9 216 -- 217 --e = 113005 218 --salary = [NULL] 219 -- 220 --Slot 1 Column 7 Offset 0x3d Length 4 221 -- 222 --b = 坏人 223 -- 224 --Slot 2 Offset 0xe2 Length 9 225 -- 226 --Record Type = FORWARDING_STUB Record Attributes = 227 --Memory Dump @0x5F49C0E2 228 -- 229 --00000000: 04f12100 0001003f 00†††††††††††††††††..!....?. 230 --Forwarding to = file 1 page 8689 slot 63 231 -- 232 --Slot 3 Offset 0xeb Length 65 233 -- 234 --Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 235 -- 236 --Memory Dump @0x5F49C0EB 237 -- 238 --00000000: 30002200 50d65f01 339f0000 67b90100 †0.".P._.3...g... 239 --00000010: 016fb901 00000000 004f57ba 4e00042d †.o.......OW.N..- 240 --00000020: 00000800 40040033 0039003d 00410066 †....@..3.9.=.A.f 241 --00000030: b9010085 8da77e4f 57bbb5c8 cb4f57ba †......~OW....OW. 242 --00000040: 4e†††††††††††††††††††††††††††††††††††N 243 -- 244 --Slot 3 Column 0 Offset 0x2f Length 4 245 -- 246 --DROPPED = 112998 247 -- 248 --Slot 3 Column 1 Offset 0x4 Length 8 249 -- 250 --c = 08 2 2011 9:21PM 251 -- 252 --Slot 3 Column 2 Offset 0x33 Length 6 253 -- 254 --d = 超级坏 255 -- 256 --Slot 3 Column 3 Offset 0xc Length 4 257 -- 258 --a = 112999 259 -- 260 --Slot 3 Column 4 Offset 0x39 Length 4 261 -- 262 --DROPPED = 坏人 263 -- 264 --Slot 3 Column 5 Offset 0x10 Length 9 265 -- 266 --e = 113007 267 --salary = [NULL] 268 -- 269 --Slot 3 Column 7 Offset 0x3d Length 4 270 -- 271 --b = 坏人 272 -- 273 --Slot 4 Offset 0x12c Length 65 274 -- 275 --Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS 276 -- 277 --Memory Dump @0x5F49C12C 278 -- 279 --DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 280 281 282 --根据objectid运行下面语句看看页面属于哪个对象 283 SELECT 284 s.name AS N'架构名', 285 o.name AS N'表名' 286 FROM sys.sysobjects o INNER JOIN sys.schemas s ON o.uid=s.schema_id 287 WHERE o.id=44 288 289 --如果页是索引页的话运行下面这句,不是索引页不用运行 290 SELECT 291 id AS objectid, 292 indid AS N'索引id', 293 name AS N'索引名' 294 FROM sys.sysindexes WHERE id=44 AND indid=1 295 296 297 --如果页是索引页的话运行下面这句,不是索引页不用运行 clst是我自己数据库里的索引 298 EXEC sys.sp_helpindex @objname = N'clst' -- nvarchar(776) 299 300 301 302 303 -----------------------------------------------解决方案------------------------------------------------------------ 304 --根据页类型是索引页还是数据页 305 -- 306 --索引页:可以先Drop索引,然后再创建就修复了,没有任何数据损失. 307 -- 308 -- 309 -- 310 --数据页:数据页根据以下三种解决方案 311 -- 312 -- 313 --三种解决方案 314 --(1)还原完全备份 315 --如果上一次的FULL BACKUP也存在这种一致性错误而你又没有及时发现,只能找上上一次的BACKUP了. 316 --所以你的维护计划里一定要有DBCC CHECKDB检查. 317 -- 318 -- 319 --(2)导出数据 前提:你要知道损坏的数据页属于哪个表你才知道要导出哪个表的数据 320 --1、新建文件组和数据文件,不用新建数据库,只需要在原来的数据库下新建文件组和数据文件 321 --2、在新文件组里重建损坏的表,意思是说新建一个表,这个表属于新建的文件组,而且表结构要跟损坏的表一样,例如损坏的表A(id int,name varchar(50)) 那么新建的表B的字段要跟原表A一样 322 CREATE TABLE B(id INT,NAME VARCHAR(50)) ON 新建的文件组 323 --3、将原始表数据导入到新表中 即把表A的数据导入到表B 324 --4、清空原始表 325 -- 326 --(3)dbcc checkdb 327 --如果是金融公司的数据库,DBCC CHECKDB('DB Name', REPAIR_ALLOW_DATA_LOSS)就很危险了.