用友软件论坛's Archiver

tong 发表于 2006-12-31 22:35

SQL-Server 灾难恢复一例

[b][size=2][color=#0000ff]故障现象

[/color][/size][/b]数据库可以使用,可以备份,但对备份进行恢复时报错,使用sp_attach_db对两个物理文件进行连接时,报同样错误:
服务器: 消息 605,级别 21,状态 1,行 1
试图从数据库 ‘UFData_001_2003' 中提取的逻辑页 (1:10720) 属于对象 '0',而非对象 'syscolumns'。
连接中断
注:严重级别 21:数据库 (dbid) 进程中的 SQL Server 严重错误
这些消息表明遇到了影响当前数据库中所有进程的问题;但数据库本身损坏的可能性不大


[size=2][color=blue][b]错误分析[/b][/color][/size]

针对报的错误,数据有恢复的可能性
错误可能syscolumns这个系统表存储页受到了破坏,恢复的关键在于正确修复这个表

[b][color=blue]恢复步骤1-连接数据库[/color][/b]
[b][color=blue]一、[/color][/b] 建立一个同名的新数据库,方法同建账
[color=blue]二、[/color] 停止SQL Server服务,删除新数据库的两个文件,把备份中的ufdata.mdf COPY到相应的文件夹下
[color=blue]三、[/color] 启动SQL Server服务,运行SQL脚本,置数据库为紧急状态(emergency mode)
[color=blue]四、[/color] 重启SQL Server服务,重建LDF文件
连接成功!
[color=blue]五、[/color] 运行SQL脚本,置数据库为紧急状态
sp_configure 'allow updates', 1 --指定可以直接更新系统表
go
reconfigure with override --如果配置不需要重启服务,则配置值直接
go --改运行值
use master
go
update sysdatabases set status = 32768 --该参数为置为紧急状态
where name = 'ufdata_003_2003'
go
sp_configure 'allow updates', 0
go
reconfigure with override

[b][color=blue]恢复步骤1-连接数据库 脚本2[/color][/b]

重建LDF文件
dbcc rebuild_log( 'ufdata_001_2003', 'E:\U8SOFT\ZT001\2003\ufdata.ldf')
注:之前必须重启SQL Server 服务

[b][color=blue]恢复步骤2-修复系统表[/color][/b]

一、确定错误表 syscolumns
运行 select * from syscolumns
报错同前报错-->确定错误根源

二、运行DBCC修复

[b][color=blue]恢复步骤2-修复系统表-脚本1[/color][/b]
sp_dboption 'ufdata_002_2003','SINGLE USER', TRUE
go
DBCC CHECKTABLE ('syscolumns',REPAIR_REBUILD )
go
sp_dboption 'ufdata_002_2003', 'SINGLE USER', FALSE
go

部分错误信息:
CHECKTABLE 发现了 0 个分配错误和 3 个一致性错误(在表 'syscolumns' 中,该表的对象 ID 为 3)。
repair_allow_data_loss 是最低的修复级别(对于由 DBCC CHECKTABLE (UFDATA_002_2003.dbo.syscolumns repair_rebuild) 发现的错误而言)。

[b][color=blue]恢复步骤2-修复系统表-脚本2[/color][/b]
更高级别的修复方式 sp_dboption
'ufdata_003_2003','SINGLE USER', TRUE
go
DBCC CHECKTABLE ('syscolumns',REPAIR_ALLOW_DATA_LOSS )
go
sp_dboption 'ufdata_003_2003', 'SINGLE USER', FALSE
go
运行结果显示,错误已经修复 成功!!!

[[i] 本帖最后由 xwencai 于 2008-5-9 21:37 编辑 [/i]]

kmxss 发表于 2007-1-10 11:03

果然是高手,真的应该好好学学

李晓东 发表于 2007-3-13 15:26

太深了,佩服!!!!!!!!!!!!!!!!!!!!!!!!!!!!

清纯 发表于 2007-3-13 17:05

不错,有实用价值的东东

yxbsir 发表于 2007-3-30 22:59

果然是高手,真的应该好好学学

cch8848 发表于 2007-4-1 19:56

我明白了,看来还要学习

lijia321 发表于 2007-4-22 17:35

果然是高手,真的应该好好学学

lxmxm 发表于 2007-4-22 22:48

不懂啊~~~~~~~`

伈隨風飛 发表于 2007-4-26 16:07

还可以吧    俺算是复习一下  :lol

开心天使A 发表于 2007-6-6 13:39

虽然不怎么看得懂,还是谢啦。。

rmb 发表于 2007-6-7 22:24

我觉得先要明白引起瘫痪的原因,然后在说这些!!

weijincai 发表于 2007-7-10 19:18

虽然用不上,还是顶一下

xsj011 发表于 2007-7-18 10:55

很好很实用,支持一下。。。

yxbsir 发表于 2007-8-6 18:27

支持一下!支持一下!
支持一下!支持一下!

流水无心 发表于 2007-8-7 08:23

果然是高手,加强学习

zhangkunjs 发表于 2007-8-7 09:00

果然是高手,真的应该好好学学

yuwen007cn 发表于 2007-9-7 08:49

前几天刚遇到过此问题,已成功解决,再次学习一下!

yangbinyan0216 发表于 2007-9-7 13:04

高手,呵呵,学习学习~~~~~~~~~~~~~~~~~~

pych 发表于 2007-9-7 16:01

顶起来,让好帖子永远飘起来

where 发表于 2007-9-8 23:43

  真的应该好好学学

murongfeng 发表于 2007-9-9 19:38

不会的可以学习一下,会的可以复习一下

xiangmei0617 发表于 2007-9-9 20:08

学习中,谢谢楼主分享~

snowscaper 发表于 2007-10-4 11:26

厉害!!!我要加油,学习学习:victory:

393573376 发表于 2007-10-4 12:00

果然是高手,真的应该好好学学
不错,有实用价值的东东

nsc117 发表于 2007-10-10 16:27

不错,有实用价值的东东

kanaidy 发表于 2007-10-12 09:20

强啊 学习了  希望别用得上 哈

beaugugu 发表于 2007-11-5 12:37

:hug: 不得不佩服楼主  神~~~

linfei 发表于 2007-11-11 10:49

:) 恩。不错。谢谢楼主提供,让我受益匪浅

17933547 发表于 2007-11-15 08:33

够专业,虽然看得不是很懂,留做资料,THANK YOU

lyj123 发表于 2007-11-19 09:00

非常有水准的数据库恢复文章,高手!

页: [1] 2 3

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.