数据库出现置疑,无法修复

zhouyulv 2010-04-23 09:34:46
数据库出现置疑,修复后,数据小点的表可以查询出数据,超过6600条的数据就提示:服务器: 消息 823,级别 24,状态 2,行 1
用修复语句就提示:
服务器: 消息 8946,级别 16,状态 12,行 2
表错误: 分配页 (1:161760) 的 PFS_PAGE 页首结构值无效。类型为 0。请检查该页上的类型、对象 ID 和页 ID。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。


请大家帮忙看看,现在领导找我的数据,真是急死我了。。
...全文
384 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
关键是现在我要的数据,就只4月21一天的数据,其它的都不要,这些数据又没办法,用条件查询到
Garnett_KG 2010-04-23
  • 打赏
  • 举报
回复
Sorry,一点希望也没有.

目前能找回多少数据就算多少吧.

zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
一点希望也没有了?
[Quote=引用 22 楼 garnett_kg 的回复:]
引用 21 楼 zhouyulv 的回复:
服务器: 消息 4208,级别 16,状态 3,行 1
恢复模型为 SIMPLE 时,不允许使用 BACKUP LOG 语句。请使用 BACKUP DATABASE 或用 ALTER DATABASE 更改恢复模型。
服务器: 消息 3013,级别 16,状态 1,行 1
BACKUP LOG 操作异常终止。

引用 20 楼……
[/Quote]
Garnett_KG 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zhouyulv 的回复:]
服务器: 消息 4208,级别 16,状态 3,行 1
恢复模型为 SIMPLE 时,不允许使用 BACKUP LOG 语句。请使用 BACKUP DATABASE 或用 ALTER DATABASE 更改恢复模型。
服务器: 消息 3013,级别 16,状态 1,行 1
BACKUP LOG 操作异常终止。

引用 20 楼 garnett_kg 的回复:
好.

按照以下方法……
[/Quote]

没救了.

我问你的DB的Recovery模式是"完整"还是"简单",你说是"完整"...唉,原来还是"简单"模式啊.

zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
服务器: 消息 4208,级别 16,状态 3,行 1
当恢复模型为 SIMPLE 时,不允许使用 BACKUP LOG 语句。请使用 BACKUP DATABASE 或用 ALTER DATABASE 更改恢复模型。
服务器: 消息 3013,级别 16,状态 1,行 1
BACKUP LOG 操作异常终止。
[Quote=引用 20 楼 garnett_kg 的回复:]
好.

按照以下方法试试.

1). 备份质疑的数据库的尾部日志.

SQL code
BACKUP LOG 你的DB名称 TO DISK='C:\Tailer.trn' WITH NO_TRUNCATE


2). 还原以前的完整DB

SQL code
RESTORE DATABASE New_DB FROM DISK='完整备份' WITH NORECOVERY
……
[/Quote]
Garnett_KG 2010-04-23
  • 打赏
  • 举报
回复
好.

按照以下方法试试.

1). 备份质疑的数据库的尾部日志.
BACKUP LOG 你的DB名称 TO DISK='C:\Tailer.trn' WITH NO_TRUNCATE


2). 还原以前的完整DB
RESTORE DATABASE New_DB FROM DISK='完整备份' WITH NORECOVERY


3). 还原第一步的日志
RESTORE LOG NEW_DB FROM DISK='C:\Tailer.trn' WITH RECOVERY
zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
没有截断过日志。完整
[Quote=引用 17 楼 garnett_kg 的回复:]
引用 15 楼 zhouyulv 的回复:
备份有,但备份的日期是以前的。这可以把后边的数据找回来吗?

引用 12 楼 garnett_kg 的回复:
PFS页 损坏用DBCC CHECKDB是修复不了的。

你有备份吗?
如果有,正确的做法是

1)
BACKUP LOG db_name TO DISK='xxx' WITH NO_TRUNCATE

2)
RESTO……
[/Quote]
zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 dawugui 的回复:]
引用 11 楼 zhouyulv 的回复:
因为现在是多个表有问题。数据量大点的都不行。

如果是多个表的话,应该是sql server损坏了.
你参考如下方法:
1.停止SQL SERVER服务.
2.拷贝一个库的MDF,LDF文件到另外的机器.
3.在另外的机器上附加这个库,如果成功,就重装原来机器的sql server.
[/Quote]
无法在别外一台机子上附加,
Garnett_KG 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhouyulv 的回复:]
备份有,但备份的日期是以前的。这可以把后边的数据找回来吗?

引用 12 楼 garnett_kg 的回复:
PFS页 损坏用DBCC CHECKDB是修复不了的。

你有备份吗?
如果有,正确的做法是

1)
BACKUP LOG db_name TO DISK='xxx' WITH NO_TRUNCATE

2)
RESTORE DATABASE db_name FRO……
[/Quote]

你以前做完备份后,后来有没有截断过日志? 还有你的DB的还原模式是"完整"还是"简单"??

dawugui 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhouyulv 的回复:]
因为现在是多个表有问题。数据量大点的都不行。
[/Quote]
如果是多个表的话,应该是sql server损坏了.
你参考如下方法:
1.停止SQL SERVER服务.
2.拷贝一个库的MDF,LDF文件到另外的机器.
3.在另外的机器上附加这个库,如果成功,就重装原来机器的sql server.
zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
备份有,但备份的日期是以前的。这可以把后边的数据找回来吗?
[Quote=引用 12 楼 garnett_kg 的回复:]
PFS页 损坏用DBCC CHECKDB是修复不了的。

你有备份吗?
如果有,正确的做法是

1)
BACKUP LOG db_name TO DISK='xxx' WITH NO_TRUNCATE

2)
RESTORE DATABASE db_name FROM DISK='Full Database bak file' WITH NORECOVERY

3)
RES……
[/Quote]
zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
服务器: 消息 8946,级别 16,状态 12,行 2
表错误: 分配页 (1:161760) 的 PFS_PAGE 页首结构值无效。类型为 0。请检查该页上的类型、对象 ID 和页 ID。
服务器: 消息 8921,级别 16,状态 1,行 1
CHECKTABLE 已终止。收集事实数据时检测到失败。可能是因为 tempdb 空间用尽或某一系统表不一致。请检查前面的错误信息。
服务器: 消息 8909,级别 16,状态 1,行 1
表错误: 对象 ID 0,索引 ID 0,页 ID (1:161760)。页首结构中的 PageId = (0:0)。
服务器: 消息 8998,级别 16,状态 1,行 1
GAM、SGAM 或 PFS 页上的页错误导致 CHECKALLOC 无法验证数据库 ID 10 中从 (1:161760) 到 (1:169847) 的页。原因请参阅其它错误信息。
'ywp002' 的 DBCC 结果。
CHECKDB 发现了 1 个分配错误和 1 个一致性错误,这些错误并不与任何单个的对象相关联。
CHECKDB 发现了 1 个分配错误和 1 个一致性错误(在数据库 'ywp002' 中)。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
ws_hgo 2010-04-23
  • 打赏
  • 举报
回复
--创建测试数据库Test
create database Test
on primary
(
name='Test_data.mdf',
filename='d:\Test_data.mdf'
)
log on
(
name='Test_data.ldf',
filename='d:\Test_data.ldf'
)
--创建测试表
create table Test.dbo.ta(id int)
insert into Test.dbo.ta select id from sysobjects
--创建备份文件
backup database Test to disk='d:\Test.bak' with format
--创建一个NDF文件
alter database Test
add file
(
name='file',
filename='d:\test.ndf',
SIZE = 1MB
)
--关闭MSSQL服务,然后删除NDF文件然后再打开MSSQL服务,此时Test数据库被疑置啦!
--恢复数据疑置
--首先备份日志文件
backup log Test to disk='d:\Test_log.bak' with format,no_truncate
--利用文件组备份文件恢复被破坏的文件
restore database Test from disk='d:\Test.bak' with Norecovery
--恢复日志文件
restore Log Test from disk='d:\Test_log.bak' with RECOVERY

--TipS
--如果已经建立ndf文件的话那么恢复日志文件的话用下面的这句话
--只不过将with RECOVERY-->WITH REPLACE
restore Log Test from disk='d:\Test_log.bak' WITH REPLACE



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2010/04/07/5457193.aspx
Garnett_KG 2010-04-23
  • 打赏
  • 举报
回复
PFS页 损坏用DBCC CHECKDB是修复不了的。

你有备份吗?
如果有,正确的做法是

1)
BACKUP LOG db_name TO DISK='xxx' WITH NO_TRUNCATE

2)
RESTORE DATABASE db_name FROM DISK='Full Database bak file' WITH NORECOVERY

3)
RESTORE LOG FROM DISK='第一步产生的LOG' WITH RECOVERY

如果没有完整备份,或者中间截断过日志,那么你的DB没救了。
zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
因为现在是多个表有问题。数据量大点的都不行。
zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
这个方法也试过。不行[Quote=引用 8 楼 xys_777 的回复:]
--用下面的语句进行修复,注意:可能会丢部分数据。

exec sp_dboption '数据库名 ', 'single user ', 'true '
Go


DBCC CHECKTABLE( '表名 ',repair_allow_data_loss)
go

sp_dboption '数据库名 ', 'single user ', 'false '
[/Quote]
zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
爱新觉罗.毓华 我用导入和导出工具没法成功。还有别的好方法吗/可以导出数据
永生天地 2010-04-23
  • 打赏
  • 举报
回复
--用下面的语句进行修复,注意:可能会丢部分数据。

exec sp_dboption '数据库名 ', 'single user ', 'true '
Go


DBCC CHECKTABLE( '表名 ',repair_allow_data_loss)
go

sp_dboption '数据库名 ', 'single user ', 'false '
zhouyulv 2010-04-23
  • 打赏
  • 举报
回复
用修复语句没法成功

希望传说听邹建大哥,能过来看看,,也许还有比邹大哥的人,帮我解决这个解题。急
dawugui 2010-04-23
  • 打赏
  • 举报
回复
应该是数据出现异常,尝试将数据导出后,重新建立表,导入数据.
加载更多回复(5)

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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