免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5864 | 回复: 2
打印 上一主题 下一主题

dbcc tablealloc 的结果分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-19 17:51 |只看该作者 |倒序浏览
dbcc tablealloc(Tbd_StkChgHist)  的结果如下:


The default report option of OPTIMIZED is used for this run.
The default fix option of FIX   is used for this run.
***************************************************************
TABLE: Tbd_StkChgHist                OBJID = 1433053110
INDID=0         FIRST=3049         ROOT=1531060         SORT=1
INDID=2         FIRST=3058         ROOT=3057         SORT=0
INDID=3         FIRST=3026         ROOT=3025         SORT=0
TOTAL # of extents = 0
Table Corrupt: Object id wrong; tables: alloc page 612352  extent id=612512  l page#=612513 objid in ext=1179148215 (name = Tbs_MkSaleDayAver) objid in page=1179148215 (name = Tbs_MkSaleDayAver) objid in sysindexes=1433053110 (name = Tbd_StkChgHist)
Table Corrupt: Object id wrong; tables: alloc page 612352  extent id=612560  l page#=612560 objid in ext=1179148215 (name = Tbs_MkSaleDayAver) objid in page=1179148215 (name = Tbs_MkSaleDayAver) objid in sysindexes=1433053110 (name = Tbd_StkChgHist)
Table Corrupt: Object id wrong; tables: alloc page 612352  extent id=612496  l page#=612496 objid in ext=1179148215 (name = Tbs_MkSaleDayAver) objid in page=1179148215 (name = Tbs_MkSaleDayAver) objid in sysindexes=1433053110 (name = Tbd_StkChgHist)

这个结果的意思是什么

论坛徽章:
33
ChinaUnix元老
日期:2018-07-04 15:10:362015年亚洲杯之阿联酋
日期:2015-02-06 17:15:532015亚冠之武里南联
日期:2015-06-06 15:40:252015亚冠之北京国安
日期:2015-06-17 15:42:412022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:322015亚冠之阿尔纳斯尔
日期:2015-09-20 09:42:1215-16赛季CBA联赛之北京
日期:2016-01-15 10:03:5915-16赛季CBA联赛之青岛
日期:2016-04-26 16:44:4915-16赛季CBA联赛之广夏
日期:2018-07-04 15:33:21C
日期:2016-10-25 16:12:142017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之同曦
日期:2017-02-22 22:41:10
2 [报告]
发表于 2009-09-19 20:30 |只看该作者
解决 Error 605 错误的方案

错误原始信息(例子):   

An attempt was made to fetch logical page '%ld' in   
database '%.*s' from cache '%.*s'. Page belongs to " g}.`iH~_  
object with id '%ld', not to object 'id%'.   


使用dbcc tablealloc 去检查出现错误的表

命令格式:
dbcc tablealloc('错误信息中第二个表对象')

最好将错误结果使用 isql 的 -o 参数输出到文件中便于察看   


注意:
    这个dbcc 操作可能会锁住接受检查的表,这将影响到其他进程的访问和操作。  

DBCC 结果(例子为正常结果):

The default report option of OPTIMIZED is used for this run.  n   
The default fix option of NOFIX is used for this run.  ]
***************************************************************  
TABLE: Tablename OBJID = id_number  =`  
INDID=1  FIRST=257  ROOT=264  SORT=0   
Data level: 1.  1 Data pages allocated and 1 Extents allocated.
Indid  : 1.  1 Index pages allocated and 1 Extents allocated.  
INDID=2  FIRST=272  ROOT=272  SORT=0   
Indid  : 2.  1 Index pages allocated and 1 Extents allocated.  
TOTAL # of extents = 3   
Alloc page 256 (# of extent=1 used pages=2 ref pages=2)
Alloc page 256 (# of extent=1 used pages=3 ref pages=3)
Alloc page 256 (# of extent=1 used pages=2 ref pages=2)  ]
Total (# of extent=3 used pages=7 ref pages=7) in this database  @@]
DBCC execution completed. If DBCC printed error messages, contact a user with System Administrator (SA) role.  
一.  
如果有一些错误(例如2583或者其他)出现在 INDID为0之后,表示表本身数据损坏。
解决办法:  
1. 使用 "select into" 或者 "insert into ... select " 将坏表中能够正常访问的数据取出装入一个临时表中。同时可以使用" where"加上一些可以缩小选择范围的条件尽量多的将正    常的数据取出  
2. 或者使用bcp去导出正常的数据
3. 对于实在无法取出的数据,只能通过应用系统中的冗余或者相关信息进行恢复  
4. 删除或者重命名坏表,并重新创建新表 :
5. 将导出的正常数据重新导入新表中

注意: 可能会有一些数据的丢失

二.
如果有一些错误(例如2583或者其他)出现在 INDID为1之后,说明表上的聚簇索引损坏,解决方法同一,也可能出现数据丢失。
如果有一些错误(例如2583或者其他)出现在 INDID为2,3,4.....之后,说明为表上的非聚簇索引损坏,解决方法比较简单,删除此索引然后重新创建即可。

步骤如下:,  
1. use databasename
  go   

2. 获知索引名称
  select name from sysindexes where id = table_object_id and indid = index_number  
  go   
3. 创建一个跟坏索引不同名称但具有相同列的索引
  create index
  你可以使用 sp_help table_name 去察看索引上的列信息
4. 将已损坏索引删除
  drop indexd

当这些故障排除完毕后,有时间及业务系统允许的情况下,最好再做一次全库的dbcc检查DBCC checkdb(db_name)
DBCC checkalloc(db_name)
DBCC checkcatalog(db_name)

应该对你有所帮助!

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
3 [报告]
发表于 2009-09-21 14:18 |只看该作者
The default fix option of FIX   is used for this run.
缺省的情况下,dbcc  tablealloc已经带了fix参数,会对错误执行了修复,你可以再次执行一下dbcc看是否还有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP