SQL Server数据库崩溃后的恢复方法简介

maye19880106

maye19880106

2016-01-29 15:48

SQL Server数据库崩溃后的恢复方法简介,SQL Server数据库崩溃后的恢复方法简介
任何数据库系统都无法避免崩溃的状况,即使你使用了Clustered,双机热备……仍然无法完全根除系统中的单点故障,何况对于大部分用户来说,无法承受这样昂贵的硬件投资。所以,在系统崩溃的时候,如何恢复原有的宝贵数据就成为一个极其重要的问题了。


在恢复的时候,最理想的情况就是你的数据文件和日志文件都完好无损了,这样只需要sp_attach_db,把数据文件附加到新的数据库上即可,或者在停机的时候把所有数据文件(一定要有master等)都copy到原有路径下也行,不过一般不推荐这样的做法,sp_attach_db比较好,虽然麻烦许多。


但是呢,一般数据库崩溃的时候系统是未必能有时间把未完成的事务和脏页等写入磁盘的,这样的情况sp_attach_db就会失败。那么,寄期望于DBA制定了一个良好的灾难恢复计划吧。按照你的恢复计划,还原最新的完全备份,增量备份或者事务日志备份,然后如果你的活动事务日志还能读得出来的话,恭喜你!你可以还原到崩溃前的状态。


一般的单位都是没有专职的DBA的,如果没有可用的备份,更可能是最近一次备份的时间过于久远而导致不可接受的数据损失,而且你的活动事务日志也处于不可用的状态,那就是最麻烦的情况了。


不幸的很的是,一般数据库崩溃都是由于存储子系统引起的,而这样的情况是几乎不可能有可用的日志用于恢复的。


那么就只好试一下这些方案了。当然,是要求至少你的数据文件是存在的,要是数据文件、日志文件和备份都没有了的话,别找我,你可以到楼顶上去唱“神啊,救救我吧”。


首先,你可以试一下sp_attach_single_file_db,试着恢复一下你的数据文件,虽然能恢复的可能性不大,不过假如这个数据库刚好执行了一个checkpoint的话,还是有可能成功的。


如果你没有好到有摸彩票的手气,最重要的数据库没有像你期盼的那样attach上去,不要气馁,还是有别的方案的。


我们可以试着重新建立一个log,先把数据库设置为emergency mode,sysdatabases的status为32768 就表示数据库处于此状态。


不过系统表是不能随便改的,设置一下先



Use MasterGosp_configure 'allow updates', 1reconfigure with overrideGo


然后 update sysdatabases set status = 32768 where name = ''


现在,祈求满天神佛的保佑吧,重新建立一个log文件。成功的机会还是相当大的,系统一般都会认可你新建立的日志。如果没有报告什么错误,现在就可以松一口气了。


虽然数据是恢复了,可是别以为事情就算完成了,正在进行的事务肯定是丢失了,原来的数据也可能受到一些损坏。


先把SQL Server 重新启动一下,然后检查你的数据库吧。


先设置成单用户模式,然后做



dbcc sp_dboption '', 'single user', 'true'DBCC CHECKDB('')


如果没有什么大问题就可以把数据库状态改回去了,记得别忘了把系统表的修改选项关掉。update sysdatabases set status = 28 where name = '' ,当然你的数据库状态可能不是这个,自己改为合适的值吧。也可以用



sp_resetstatusgosp_configure 'allow updates', 0reconfigure with overrideGo


checkdb的时候可能报告有一些错误,这些错误的数据你可能就只好丢弃了。


checkdb有几种修复选项,自己看着用吧,不过最后你可能还是得REPAIR_ALLOW_DATA_LOSS,完成所有修复。


chekcdb并不能完成所有的修复,我们需要更进一步的修复,用DBCC CHECKTABLE对每一个表做检查吧。


表的列表可以用sysobjects里面得到,把OBJECTPROPERTY是IsTable的全部找出来检查一下吧,这样能够基本上解决问题了,如果还报告错误,试着把数据select into到另一张表检查一下。


这些都做完了之后,把所有索引、视图、存储过程、触发器等重新建立一下。DBCC DBREINDEX也许可以帮你一些忙。
展开更多 50%)
分享

猜你喜欢

SQL Server数据库崩溃后的恢复方法简介

SQLServer
SQL Server数据库崩溃后的恢复方法简介

拷贝的SQL Server 7数据库的恢复方法

SQLServer
拷贝的SQL Server 7数据库的恢复方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

当SQL Server数据库崩溃时如何恢复?

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

当SQL Server数据库崩溃时如何恢复

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

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

恢复SQL Server系统数据库

SQLServer
恢复SQL Server系统数据库

SQL Server2008 数据库误删除数据的恢复方法分享

编程语言 网络编程
SQL Server2008 数据库误删除数据的恢复方法分享

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

SQL Server 索引结构及其使用(一)

SQL Server 索引结构及其使用(一)

教你轻松用PS打造一个七彩虹文字挂链

教你轻松用PS打造一个七彩虹文字挂链
下拉加载更多内容 ↓