硬盘数据恢复的数据库文件,能成功附加,但是checkdb报错

xxmiaoyong126com 2010-11-03 07:57:18
10月23日服务器硬盘损坏,11月2日硬盘数据恢复。
WINSERVER2003,SQLSERVER2000+SP4,
MDF文件是34M,LDF文件是7M

现将MDF文件和LDF文件附加到数据库实例,能够成功附加。
查询分析器也能执行select 语句,并且有数据。

但是checkdb('数据库名称')报错,
执行修复命令
dbcc checkdb ('数据库名称',REPAIR_ALLOW_DATA_LOSS )

报错如下:

zzl_gongshi_record的 DBCC 结果。
消息 8909,级别 16,状态 1,第 1 行
表错误: 对象 ID 1013578649,索引 ID 0,分区 ID 66425890340864,分配单元 ID 66425890340864 (类型为 In-row data),页 ID (1:3760) 在其页头中包含错误的页 ID。页头中的 PageId = (1:3648)。
修复此错误要求首先修正其他错误。
消息 8909,级别 16,状态 1,第 1 行
表错误: 对象 ID 1013578649,索引 ID 0,分区 ID 66425890340864,分配单元 ID 66425890340864 (类型为 In-row data),页 ID (1:3761) 在其页头中包含错误的页 ID。页头中的 PageId = (1:3649)。
修复此错误要求首先修正其他错误。
消息 8909,级别 16,状态 1,第 1 行
表错误: 对象 ID 1013578649,索引 ID 0,分区 ID 66425890340864,分配单元 ID 66425890340864 (类型为 In-row data),页 ID (1:3762) 在其页头中包含错误的页 ID。页头中的 PageId = (1:3650)。
修复此错误要求首先修正其他错误。
消息 8909,级别 16,状态 1,第 1 行
表错误: 对象 ID 1013578649,索引 ID 0,分区 ID 66425890340864,分配单元 ID 66425890340864 (类型为 In-row data),页 ID (1:3768) 在其页头中包含错误的页 ID。页头中的 PageId = (1:3652)。
修复此错误要求首先修正其他错误。
消息 8909,级别 16,状态 1,第 1 行
表错误: 对象 ID 1013578649,索引 ID 0,分区 ID 66425890340864,分配单元 ID 66425890340864 (类型为 In-row data),页 ID (1:3769) 在其页头中包含错误的页 ID。页头中的 PageId = (1:3653)。
修复此错误要求首先修正其他错误。
对象 'zzl_gongshi_record' 的 46 页中有 4017 行。
CHECKDB 在表 'zzl_gongshi_record' (对象 ID 1013578649)中发现 0 个分配错误和 5 个一致性错误。
-------------这样的报错的表有很多张

CHECKDB 在数据库 '数据库名' 中发现 0 个分配错误和 493 个一致性错误。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

----如果单独select 某张有错误的表,结果能查询出来,但是消息页签报错如下:
消息 824,级别 24,状态 2,第 1 行
SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:3712,但实际为 0:0)。在文件 'F:\database\hwgzcytj2011_Data.MDF' 中、偏移量为 0x00000001d00000 的位置对数据库 ID 11 中的页 (1:3712) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。


请问这个问题的原因是什么,应该怎么办?
...全文
755 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxmiaoyong126com 2010-11-10
  • 打赏
  • 举报
回复
use pos

dbcc checkdb('pos',repair_allow_data_loss) -------修复数据库

dbcc checkdb ('pos',REPAIR_REBUILD) -------修复数据库索引
xxmiaoyong126com 2010-11-10
  • 打赏
  • 举报
回复
问题解决了,原来是我的数据库的索引坏了,
执行了一句修复索引的语句就好了,
现在数据库一切正常,
还是十分的感谢大家,
王向飞 2010-11-04
  • 打赏
  • 举报
回复
如果你连SELECT * FROM TABLE 都不能出来数据的话,那。。。
祝福。。
xxmiaoyong126com 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 obuntu 的回复:]

SQL code
DBCC CHECKDB (RUM, repair_allow_data_loss) with NO_INFOMSGS


或者重建,导入导出。
[/Quote]

真是无语,说了导入导出报错,
修复语句更是没用,
现在的办法就是重建,问题是怎么把数据拷贝到新的数据库里面,
再次声明,导入导出报错,不能用!
obuntu 2010-11-04
  • 打赏
  • 举报
回复
DBCC CHECKDB (RUM, repair_allow_data_loss) with NO_INFOMSGS  


或者重建,导入导出。
xxmiaoyong126com 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dlut_liuq 的回复:]

新建一个表 zzl_gongshi_record_temp表结构和zzl_gongshi_record一样
insert into zzl_gongshi_record_temp
select * from zzl_gongshi_record

试试
[/Quote]

试过了,数据拷不过去,
飘零一叶 2010-11-03
  • 打赏
  • 举报
回复
新建一个表 zzl_gongshi_record_temp表结构和zzl_gongshi_record一样
insert into zzl_gongshi_record_temp
select * from zzl_gongshi_record

试试
xxmiaoyong126com 2010-11-03
  • 打赏
  • 举报
回复
我的数据库恢复模式是完整模式,但是为什么我用logexplore看到我的的log是从10月21日开始的?
按道理这个数据库是从7月1日开始用的啊,那之前的日志呢?,
xxmiaoyong126com 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dawugui 的回复:]

我建议赶紧新建立一个库,把相关内容包括:表,数据等等转移到新库中去。
[/Quote]

请问该怎么转移,我用SQL自带的数据导入导出都是报错啊,
dawugui 2010-11-03
  • 打赏
  • 举报
回复
我建议赶紧新建立一个库,把相关内容包括:表,数据等等转移到新库中去。
xxmiaoyong126com 2010-11-03
  • 打赏
  • 举报
回复
2个数据库之间数据导入导出
报错如下:

标题: Microsoft.SqlServer.DtsTransferProvider
------------------------------

错误: errorCode=-1071636471 description=出现 OLE DB 错误。错误代码: 0x80004005。
已获得 OLE DB 记录。源:“Microsoft SQL Native Client” Hresult: 0x80004005 说明:“SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:3832,但实际为 1:3814)。在文件 'F:\database\hwgzcytj2011_Data.MDF' 中、偏移量为 0x00000001df0000 的位置对数据库 ID 11 中的页 (1:3832) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。”。
helpFile=dtsmsg.rll helpContext=0 idofInterfaceWithError={8BDFE893-E9D8-4D23-9739-DA807BCDC2AC}

有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&LinkId=20476

------------------------------
按钮:

确定
------------------------------
xxmiaoyong126com 2010-11-03
  • 打赏
  • 举报
回复
你是意思是我另外再重新建一个数据库,然后用数据导出?
王向飞 2010-11-03
  • 打赏
  • 举报
回复
有数据导出、导入向导,就在你的企业管理器中,右键你的数据库仔细找找。
xxmiaoyong126com 2010-11-03
  • 打赏
  • 举报
回复
哦,LOGEXPLORE现在能登陆了,
可能当时我单用户模式,所以登陆没成功,
我先看下日志,
大家谁如果帖子都看下来了,
帮我说下如何转移这个库,谢谢
xxmiaoyong126com 2010-11-03
  • 打赏
  • 举报
回复
对了,我用LOGEXPLORE也打不开日志文件,
报错
xxmiaoyong126com 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wxf163 的回复:]

出现这种问题就尽量不要再要这个库了,
把你的数据尽量 转移到新库中,


SQL code
ALTER DATABASE PageNumber SET EMERGENCY
--设置成紧急模式
go
ALTER DATABASE PageNumber SET SINGLE_USER
--设置成单用户模式
go
DBCC CHECKDB ('PageNumber', REPAIR_ALLO……
[/Quote]


如何转移到辛苦,其实数据都在的,请大家帮忙出个切实可行的办法?
至于那个DBCC CHECKDB ('PageNumber', REPAIR_ALLOW_DATA_LOSS)
我已经执行过了,没用,报错依旧
王向飞 2010-11-03
  • 打赏
  • 举报
回复
出现这种问题就尽量不要再要这个库了,
把你的数据尽量 转移到新库中,


ALTER DATABASE PageNumber SET EMERGENCY
--设置成紧急模式
go
ALTER DATABASE PageNumber SET SINGLE_USER
--设置成单用户模式
go
DBCC CHECKDB ('PageNumber', REPAIR_ALLOW_DATA_LOSS)
--修复数据库
go
ALTER DATABASE PageNumber SET MULTI_USER
--恢复多用户访问模式
go
xxmiaoyong126com 2010-11-03
  • 打赏
  • 举报
回复

删除出问题的表Log(生产环境中可不能这么干哈),然后参照生产环境,新建一个结构和名字一样的表Log,

并导入生产环境中Log表中的数据。OK,问题解决。

小F,请问,如何导数据呢,我现在试着运行select * into tab from zzl_xgjl
类似这样的语句,
会生成tab表,也有结构,但是tab表里面数据是空的,并且查询分析器报错,

billpu 2010-11-03
  • 打赏
  • 举报
回复
1 重建索引或者dbcc checkdb(database,REPAIR_REBUILD)
2 用楼上f姐的
DBCC CHECKDB (database, REPAIR_REBUILD)  
--小F-- 2010-11-03
  • 打赏
  • 举报
回复
1.
use 你的数据库
go

ALTER DATABASE RUM SET SINGLE_USER

DBCC CHECKDB (RUM, repair_allow_data_loss) with NO_INFOMSGS

go

可喜的是,我用这条命令就解决了问题,但是也有此命令执行不成功的情况,这时用办法2。

2: 删除出问题的表Log(生产环境中可不能这么干哈),然后参照生产环境,新建一个结构和名字一样的表Log,

并导入生产环境中Log表中的数据。OK,问题解决。
加载更多回复(2)

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧