Home > Database > Mysql Tutorial > SQLServer 2008 误删除恢复

SQLServer 2008 误删除恢复

WBOY
Release: 2016-06-07 15:26:23
Original
1225 people have browsed it

SQLServer的查询分析器和企业管理器给了我们很大便利,使用起来很方便,真要感谢微软。但是在操作的过程中,也很容易出现问题,少写一个Where语句,就会带来灾难,几年或者几十年的经营数据如果被误删除,而且无法恢复的话,老板非K死你不可,即便每天备份,

SQLServer的查询分析器和企业管理器给了我们很大便利,使用起来很方便,真要感谢微软。但是在操作的过程中,也很容易出现问题,少写一个Where语句,就会带来灾难,几年或者几十年的经营数据如果被误删除,而且无法恢复的话,老板非K死你不可,即便每天备份,但如果只能恢复到昨天的数据,那也是无法接受的,因此必须要能恢复到误删除前的那个时间点的数据,幸好,SQLServer 的 日志恢复提供了这种可行性。

 

进行日志恢复的先决条件

 

1)有一个库备份文件 (aaa.bak)

2)有日志备份文件  (aaa.log)

3)在库备份文件时间-日志备份文件时间间隔内,日志未被截断过

 

一定要注意以上的几个先决条件,很多朋友连日常备份都没有,那就完蛋了,也有很多朋友日志截断做得很勤,那也完蛋了。

 

有了以上的两个条件,就可以用一下SQL命令进行恢复

1、restore database 数据库名 from disk='d:\aaa.BAK' with norecovery

2、restore log 数据库名 from disk='d:\aaa.log' with stopat='2008-1-29 17:56:00'

 

stopat 是你想恢复的时间点。

=================================================================

假设误操作的数据库名为 yddata

1、备份误操作后的数据库的日志:

   backup log yddata to disk='d:\db_log.bak'

2、恢复之前做的完全备份,假设该完全备份的文件名为 d:\db_old.bak

   restore database yddata_2 from disk='d:\db_old.bak' with norecovery

   注意:恢复成的数据库名为 yddata_2,不要覆盖正在使用的库

3、最后一步:

   restore log yddata_2 from disk='d:\db_log.bak'
        with stopat='2007-04-14 12:30:00'

   stopat 代表要将数据库恢复到哪一时刻的状态


其实原理很简单:相当于在之前的备份的基础上将备份之后的操作重新做了一遍。

A:2004/10/13,16:00进行数据库备份,backup database test to disk='d:\db\1600.bak' with init

B:2004/10/14,13:00对数据库进行了update,delete等操作;

C:2004/10/15,18:00使用delete mybbs where id>300时,语句误写成delete mybbs,因而删除了表mybbs中的所有数据。

 

现在在C点,C点对数据库进行了误操作,我们希望数据库能够恢复到C之前的状态,比如恢复到10月15日17:59分的状态。

要恢复数据库B点,使用的是A点备分的数据库1600.bak;而使用的日志备分是最新的备分1820.logs;因而进行如下操作:

 

--备分日志:

BACKUP LOG test TO DISK='d:\1820.logs' WITH INIT

 

--恢复数据库1600.bak,使用WITH NORECOVERY参数:

RESTORE DATABASE test from disk='d:\db\1640.bak' WITH NORECOVERY

 

--使用日志恢复数据库到10月15日17:59分:

RESTORE LOG test
        FROM disk='d:\1820.logs' WITH RECOVERY,STOPAT='10/15/2004 17:59'

 

上面的三条Transact SQL语句的对应过程:

      1.恢复数据库到A点;

      2.执行A-B之间的log记录,把数据库恢复到B点.

 

 

       这样就恢复数据库到了指定的时间点。如果恢复不成功,可能的原因是:1.未使用正确的备分数据库;2.数据库选项选中了Auto

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template