数据库误操作和恢复.doc
文本预览下载声明
关于数据库的误操作和误操作后恢复
前段时间,不小心误操作了一下,导致数据错误,一直想搞如何恢复,后来在网上找到了相应的方法,于是就把这个整理了一下,请各位大虾指正一下,有更好的方法也请共享一下。
案例一:
客户数据库,设置每天定时备份,一天一次。某天,客户要求修改一些数据,而且特别是一些历史数据,程序前台因为被引用等原因,无法直接修改,需要后台调整。调整时,相关条件没有写好,导致对应表中的数据全部都出问题了。需要紧急恢复。这个事情可能有不少同事都碰到过,不知道都怎么解决的,可以拿经验分享一下。
案例一解决方法:
解决方法有很多,通常可以还原前一天的数据库,把当天的所有数据再重新做一遍就好了。现在要说的这个方法是使用数据库恢复,尽量少补单据。
步骤一:
因为每天都有备份,所以可以使用前一天备份的数据库作为基础,用于后面的还原用。如果没有每天做备份的,就找一个以前曾经做过的一个完全备份。
步骤二;
调整即将要操作的数据库的属性,在属性设置的选项中设置:
这里设置的时候,其中模型只要不选择“简单”,“自动关闭”和“自动收缩”不打勾就可以了,其他项目并不重要,保持原先的即可。
步骤三:
备份数据库日志:
这里注意选择“事务日志”和“追加到媒体”,如果担心备份数据过于庞大,可以把“选项”页中的打勾。这里备份到所选择的路径和数据库就是前面提到的前一天自动备份的数据库。还需要注意,如果备份出来的数据库一般都会被拷贝到其他地方保存的,在操作备份前请先把它拷回到原先备份的路径,查看路径可以用下面还原中的方法里面查看路径。
步骤四:
备份好了以后,就可以还原数据库了:
此时选择要还原的第一个备份,就是前面所说的自动备份所备份下来的那个数据库备份,选择以后,会在还原明细中显示这个备份所对应各次备份的时间和记录,将要还原的包含最后的时间点的记录全部选上,此时“时点还原”变为可编辑,选择打勾,弹出还原时点的时间输入界面:
在此输入犯错误的时间点,可以稍微提前一点,确定后,返回并开始数据库还原。
步骤五:
还原结束以后,数据库就恢复到刚才输入时间的那一刻了,只要再把相应的从那一个开始的数据再补进去就好了。
操作前提:
这个方法可以实现尽量少的补单据,但是却有一些必要的前提:
这个数据库必须曾经做过完全备份;
这个数据库在完全备份和日志备份的中间没有被清除过数据库日志;
备份日志时,相关参数选择正确。
为了在时候能够做上面这样的操作,因此在实施时需要做一些事先准备:
因为这个前提需要曾经做过完全备份,并且完全备份和做上述操作之间数据库日志不能被清除,因此,做实施时只要客户的硬盘足够大,数据库日志就不要清理它,避免不必要的麻烦。
一般来说,在实施过程中都会做初始化工作,而且初始化完成以后都会做一个数据备份,避免因为没有做定时备份而不能达到恢复数据的目的,这个初始化时备份的数据库一定要保留好,为自己留条后路。
案例一变通解决方法
如果硬盘有限,上述操作备份出来的东西过于庞大,可以采用语句执行的模式:
执行解决方法中的步骤一、步骤二
步骤三:
备份的日志可以采用下面的例子:
BACKUP LOG 数据库名 TO DISK=d:日志备份.logs WITH INIT
执行解决方法中的步骤四、步骤五
后续操作依然采用前一方法操作。特别注意的是,完全备份的路径和前面的方法一样,要拷贝回当时备份的路径。
另类
如果备份还原什么的都喜欢用语句执行的人,可以参考下面的几个语句:
数据库备份:backup database 数据库名 to disk=d:文件名.bak with init
日志备份:BACKUP LOG数据库名 TO DISK=d:日志文件名.logs WITH INIT
还原数据库:RESTORE DATABASE数据库名 from disk=d: 文件名.bak WITH NORECOVERY
还原日志恢复数据:RESTORE LOG数据库名 FROM disk=d: 日志文件名.logs WITH RECOVERY,STOPAT=09/23/2009 09:43
案例二:
上个案例还不算倒霉的,还有比这更倒霉的,发现错误的时候已经发生很多业务了,或者说已经过了很久了,希望只是对中间的部分数据还原的,其他的都仍然保持不变的,则必须使用其他方法了。
案例二解决方法
步骤一:
下载LogExplorer,在数据库服务器上安装
步骤二:
打开log explorer file=attach log file-选择服务器和登陆方式-connect-选择数据库-attach-左面对话框中browse-view log-就可以看到log记录了。
步骤三:
数据恢复: 右键log记录 undo transation-选择保存文件名
显示全部