某个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应该会报错的。

SQL2000下修复某数据库的经历的更多相关文章

  1. 一次修复MySQL数据库的经历

    一次修复MySQL数据库的经历 实验室服务器的硬盘满了,结果导致一个线上服务的MySQL数据库的两个表坏了.具体症状是desc cdb_searchindex显示 ERROR 1017 (HY000) ...

  2. MySQL数据表修复, 如何修复MySQL数据库(MyISAM / InnoDB)

    常用的Mysql数据库修复方法有下面3种: 1. mysql原生SQL命令: repair 即执行REPAIR TABLE SQL语句 语法:REPAIR TABLE tablename[,table ...

  3. 用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 工具 方法

    用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 硬盘误格式化.重分区.重装操作系统覆盖 SQL数据解决方法 [客户名称]:贵州铜仁市开天驾驶人培训中心 [软件名称]:用友T3普及 ...

  4. SQL Server 在缺少文件组的情况下如何还原数据库

    SQL Server 在缺少文件组的情况下如何还原数据库 一.背景 我有一个A库,由于a,b两张表的数据量比较大,所以对表进行分区:在把A库迁移到一个新的集群上去,我只备份了A库的主分区过去进行还原为 ...

  5. 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库

    昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...

  6. MySQL数据库的优化(下)MySQL数据库的高可用架构方案

    MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQ ...

  7. 在linux和windows下自动备份数据库

    摘要: 详细介绍在windows和linux下自动备份数据库的过程,希望可以让新手立即上手吧! 本文档内容共分为2大部分:linux和windows Linux和windows都分为:准备工作和操作阶 ...

  8. 在Jena框架下基于MySQL数据库实现本体的存取操作

    在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统. ...

  9. Windows下更改MySQL数据库的存储位置

    在MySQL安装完成后,要修改数据库存储的位置,比如从安装目录下的C:\Program Files\MySQL\MySQL Server 5.0\Data文件夹转移到D:\mySQLData文件夹. ...

随机推荐

  1. ODI利用goldengate实现增量数据捕获

    ODI利用goldengate实现增量数据捕获 上个月,Oracle发布了ODI的最新版本10.1.3.6_02,其中增加了针对采用goldengate获取源数据库增量变化的知识模块,这样当系统需要实 ...

  2. 九度OnlineJudge之1021:统计字符

    题目描述:     统计一个给定字符串中指定的字符出现的次数. 输入:     测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串.注 ...

  3. poj2017简单题

    #include <stdio.h> #include <stdlib.h> int main() { int n,i; while(scanf("%d", ...

  4. 20140613_JavaWeb学习之开发环境配置篇

    本文所使用软件百度云盘网址:http://pan.baidu.com/s/1kTDRFwz 1安装JDK 操作系统:windows7-64bit 版本号:jdk-7u51-windows-x64 安装 ...

  5. JavaScript之<script>标签简介

    向html页面中插入JavaScrpt的主要方法,就是使用<script>元素,下面是Html 4.01为<script>定义的6个属性. 1.async:可选表示应该立即下载 ...

  6. 安装 GitStack 提示 80 端口 被 SYSTEM PID4 占用

    任务管理器 - 服务 W3SVC - World Wide Web Publishing Service  停止服务.

  7. access 语句错误

    一直说是语句错误,一直没有找出来是什么错误,原来access的语句需要在字段上套一个[],这是最正确的写法,关键是动软生成的是我们一贯用的,和标准还是有些差别的,害了我好久都不知道是哪里的问题

  8. Hibernate中为什么要重写equals方法和hashcode方法

    1.*为什么要重写equals方法,首先我们来看一下equals源码: public boolean equals(Object anObject) { if (this == anObject) { ...

  9. vs2013 中HTML页 无法在设计窗口中查看的解决

    VS2013不支持HTML文件的解决办法: 1.将html文件重命名为aspx即可.不需要创建项目,直接拖进vs即可. 2.打开VS菜单->工具->选项->文本编辑器->文件扩 ...

  10. Django Web开发【7】 投票与评论

    为了让用户更好的发现和共享bookmark,可以提供投票与评论功能.现在我们的主页还是一个很简单的欢迎页面,我们可以让用户在主页共享自己的bookmark,此外,用户还可以对主页的bookmark进行 ...