数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
从日志中恢复SQL Server数据库到时间点

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

Author:David Euler
Date: 2004/10/16
Email:
[email protected]

有任何问题,请与我联系:)

         DB2中可以使得数据库回复到指定的时间点,SQL Server数据库的Recovery Model为full 或者Bulk copy的时候,是可以从日志来恢复数据库的。实际上日志中记录的一条一条的transact sql语句,恢复数据库的时候会redo这些sql语句。
  
前提条件:myBBS是数据库test中的一个表,

          数据库test的Recovery Model为Full,Auto Close,Auto Shrink两个选项未选中。

          数据库test的data files和log files均为默认的自动增长状态。

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 Shrink.

 

 

 




相关文章

相关软件