当SQLServer数据库崩溃时如何恢复

当SQLServer数据库崩溃时如何恢复,第1张

当SQLServer数据库崩溃时如何恢复,第2张

任何数据库系统都无法避免崩溃。即使使用集群化、双机热备……仍然无法彻底根除系统中的单点故障。更何况,对于大部分用户来说,是无法承受如此昂贵的硬件投入的。因此,当系统崩溃时,如何恢复原来有价值的数据成为一个极其重要的问题。

在恢复的时候,最理想的情况是你的数据文件和日志文件完好无损,那么你只需要sp_attach_db把数据文件附加到新的数据库,或者把所有的数据文件复制过来(一定要有master等。)在停机期间恢复到原始路径。但是,通常不建议这样做。sp_attach_db比较好,虽然麻烦。

但是,一般来说,当数据库崩溃时,系统可能没有时间将未完成的事务和脏页写入磁盘。在这种情况下,sp_attach_db将会失败。然后,让我们希望dba已经制定了一个好的灾难恢复计划。根据你的恢复计划,恢复最新的完全备份,增量备份或者事务日志备份,然后如果你的活动事务日志还能被读取,恭喜你!可以恢复到崩溃前的状态。

一般来说,所有组织中都没有全职DBA。如果没有可用备份,更有可能是上次备份时间过长,数据丢失无法接受。而且,您的活动事务日志处于不可用状态,这是最麻烦的情况。

不幸的是,大多数数据库崩溃都是由存储子系统引起的,并且几乎不可能有可用的日志来进行恢复。
那我们只好试试这些方案了。当然,至少要求您的数据文件存在。如果数据文件、日志文件和备份都不见了,不要打电话给我。你可以去屋顶唱“上帝,救救我”。

首先你可以试试sp_attach_single_file_db,尝试恢复你的数据文件。虽然不太可能恢复,但如果数据库只是执行一个检查点,仍然可能成功。

如果你运气不好碰不到抽奖,最重要的数据库没有如你所料附上,也不要气馁,还有别的打算。

我们可以尝试重建一个日志,先将数据库设置为紧急模式,sysdatabases的状态是32768,也就是说数据库处于这种状态。

但是,不能随便改系统表。如果设置了它,您应该首先
使用master
go
sp _ configure“允许更新”。1
用override重新配置
go
然后
更新sysdatabases set status = 32768 where name = ' '
现在,祈求所有神佛的保佑,重新建立日志文件。成功的几率还是挺大的,系统一般会认可你新建立的日志。如果没有错误报告,您现在可以松一口气了。

虽然数据已经恢复了,但是不要以为事情就算完了,正在进行的交易就一定会丢失,原始数据也有可能被破坏。

首先重新启动sql server,然后检查您的数据库。
先设置为单用户模式,然后做DBCC
sp _ dboption ' ','单用户',' true '
DBCC CheckDB(')
如果没有大问题,可以把数据库状态改回来。记住关闭系统表的修改选项。
UPDATE SYSDATABASES SET STATUS = 28 WHERE NAME = ' '-当然,您的数据库状态可能不是这个。自己把它改成一个合适的值。还可以使用sp _ resetstatus
go
sp _ configure '允许更新',0
reconfigure with override
go。

checkdb DB时可能会报告一些错误,您可能必须丢弃这些错误的数据。
checkdb有几个修复选项。自己用吧,但是最后可能还是要用repair_allow_data_loss来完成所有的修复。
check CDB无法完成所有修复。我们需要进一步修理。用dbcc checktable检查每个表。
表的列表可以通过sysobjects获得。找出所有可表的对象属性并检查它们。这样就基本解决问题了。如果您仍然报告错误,请尝试将数据选择到另一个表中并检查它。
完成所有这些后,重新构建所有的索引、视图、存储过程、触发器等。Dbcdbreindex或许能帮到你。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 当SQLServer数据库崩溃时如何恢复

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情