笔记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)就很危险了.

 

posted @ 2013-07-27 16:08 桦仔 阅读(...) 评论(...)  编辑 收藏