SQL2000下修复某数据库的经历
2015-01-28 16:37
197 查看
某个SQL2000的数据库,在通过备份/还原的方法升级到2005时发生错误:
查找解决方法未果
正好最近在看 @一线码农 的《sql server之旅》,就想自己试试解决这个问题
首先运行dbcc checkdb命令,结果如下:
仔细查看出错信息,里面反复提到一个“对象 ID 2”。另外,信息里还提到“该文本的所有者是由 RID = (1:152:9) id = 213575799 and indid = 37 标识的数据记录”。联想到最近看的《sql server之旅》,觉得第二段信息可能是在说某个数据表。于是select之:
果然都有对应的表!
分别select这两个表,发现问题出在sysindexes上:
这和上面的出错信息也是一致的。
立刻尝试用dbcc checkdb和dbcc checktable修复,但是却得到以下回应:
DBCC 语句的修复级别导致回避了此修复
至此尝试进入了死胡同……
再次查看,发现出错信息里有2条比较有意思。一条说某节点未被引用,一条说没发现另外一个节点。两个节点的槽号和文本ID都是一样,只有页不同。手贱看了看页号,发现342=0x156,4194646=0x400156,只差一个字节!
灵机一动,这个错误肯定是页号因为某种原因错了!
突然想起,在DBCC命令那篇里面提到DBCC IND命令,干脆死马当活马医:
但是看不出什么鬼,很明显我没人家那水平……
干脆Page一下:
找到slot9的偏移,看看有没有0x400156:
好像撞大运了……
参考《第六站》,脱机,打开mdf,找到Slot9对应偏移8192*152+0x860=0x130860,把那个40改成00
联机,dbcc checkdb,没有查出错误!
再次尝试在SQL2005中恢复,成功!
附加收获:SQL2000貌似没有checksum,否则我改mdf应该会报错的。
查找解决方法未果
正好最近在看 @一线码农 的《sql server之旅》,就想自己试试解决这个问题
首先运行dbcc checkdb命令,结果如下:
仔细查看出错信息,里面反复提到一个“对象 ID 2”。另外,信息里还提到“该文本的所有者是由 RID = (1:152:9) id = 213575799 and indid = 37 标识的数据记录”。联想到最近看的《sql server之旅》,觉得第二段信息可能是在说某个数据表。于是select之:
果然都有对应的表!
分别select这两个表,发现问题出在sysindexes上:
这和上面的出错信息也是一致的。
立刻尝试用dbcc checkdb和dbcc checktable修复,但是却得到以下回应:
DBCC 语句的修复级别导致回避了此修复
至此尝试进入了死胡同……
再次查看,发现出错信息里有2条比较有意思。一条说某节点未被引用,一条说没发现另外一个节点。两个节点的槽号和文本ID都是一样,只有页不同。手贱看了看页号,发现342=0x156,4194646=0x400156,只差一个字节!
灵机一动,这个错误肯定是页号因为某种原因错了!
突然想起,在DBCC命令那篇里面提到DBCC IND命令,干脆死马当活马医:
但是看不出什么鬼,很明显我没人家那水平……
干脆Page一下:
找到slot9的偏移,看看有没有0x400156:
好像撞大运了……
参考《第六站》,脱机,打开mdf,找到Slot9对应偏移8192*152+0x860=0x130860,把那个40改成00
联机,dbcc checkdb,没有查出错误!
再次尝试在SQL2005中恢复,成功!
附加收获:SQL2000貌似没有checksum,否则我改mdf应该会报错的。
相关文章推荐
- SQL2000置疑数据库修复
- SQL2000数据库修复实例
- SQL2000之Master及数据库文件恢复方法(图)
- 用户自定义的数据库修复
- 在使用AdomdConnection 连接 SQL2000的AS数据库时 遭遇“由于目标机器积极拒绝,无法连接。”
- 将SQL2000数据库升级到SQL2005
- membership配置数据库(SQL2000)
- 将数据库从SQL2000迁移到SQL2005时,无法查看关系图的解决办法
- 目前大多数数据库应用程序都是基于Sql2000的,所以我们着重讲述在2000怎样实现缓存
- sql2000备份的数据库还原到sql2005后,选择“数据库关系图”提示:此数据库没有有效所有者,因此无法安装数据库关系图支持对象"的解决方法
- 一个自动产生编号的存储过程,数据库sql2000或2005
- 数据库文件坏掉的修复方法
- 2006.9.15 想到利用数据库Access修复工具解决风机项目中的数据库总是损坏的问题、
- 因为停电等原因造成MSSQL数据库出现错误的修复
- 在使用AdomdConnection 连接 SQL2000的AS数据库时 遭遇“由于目标机器积极拒绝,无法连接。”
- SQL2000中如何在两个数据库之间复制表(包括其中的数据)
- 数据库文件出现坏块修复过程
- SQL2000下将数据库直接备份到网络上其他计算机硬盘的方法!
- SQL2000之数据库定点还原(图)
- 将数据库从SQL2000迁移到SQL2005时,无法查看关系图的解决办法