sqlserver 还原到时间点

本文介绍了 SQLServer 数据库在 Full 模式下的恢复方法,包括使用备份文件还原数据库到特定时间点的过程。提供了详细的 Transact-SQL 命令示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天一不冷静就把sqlserver数据库初始化了,在网上找了半天发现了几篇帖子,受益非浅,记录下

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.

摘自http://www.bentium.org/ReadNews.asp?NewsID=259

 

Server 2005 联机丛书(2007 年 9 月)

执行数据库完整还原(完整恢复模式)

数据库完整还原的目的是还原整个数据库。整个数据库在还原期间处于离线状态。在数据库的任何部分变为在线之前,必须将所有数据恢复到同一点,即数据库的所有部分都处于同一时间点并且不存在未提交的事务。

在完整恢复模式下,数据库可以还原到特定时间点。时间点可以是最新的可用备份、特定的日期和时间或者标记的事务。

安全说明:
建议您不要从未知源或不可信源附加或还原数据库。这些数据库可能包含执行非预期 Transact-SQL 代码的恶意代码,或通过修改架构或物理数据库结构导致错误。使用来自未知源或不可信源的数据库前,请在非生产服务器上针对数据库运行 DBCC CHECKDB,然后检查数据库中的代码,例如存储过程或其他用户定义代码。

 

 

通常,将数据库恢复到故障点分为下列基本步骤:

  1. 备份活动事务日志(称为日志尾部)。此操作将创建尾日志备份。如果活动事务日志不可用,则该日志部分的所有事务都将丢失。
    重要提示:
    在大容量日志恢复模式下,备份任何包含大容量日志操作的日志都需要访问数据库中的所有数据文件。如果无法访问该数据文件,则不能备份事务日志。在这种情况下,您必须手动重做自最近备份日志以来所做的所有更改。

     

     

    有关详细信息,请参阅尾日志备份
  2. 还原最新完整数据库备份而不恢复数据库 (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。
  3. 如果存在差异备份,则还原最新的差异备份而不恢复数据库 (RESTORE DATABASE database_name WITH NORECOVERY)。
  4. 从还原备份后创建的第一个事务日志备份开始,使用 NORECOVERY 依次还原日志。
  5. 恢复数据库 (RESTORE DATABASE database_name WITH RECOVERY)。此步骤也可以与还原上一次日志备份结合使用。
  6. 数据库完整还原通常可以恢复到日志备份中的某一时间点或标记的事务。但是,在大容量日志恢复模式下,如果日志备份包含大容量更改,则不能进行时点恢复。有关详细信息,请参阅将数据库还原到备份中的某个时间点

还原整个数据库时,应使用单一还原顺序。下面的示例说明还原顺序中用于将数据库还原到故障点的数据库完整还原方案的关键选项。还原顺序由通过一个或多个还原阶段来移动数据的一个或多个还原操作组成。将省略与此目的不相关的语法和详细信息。

数据库将还原并前滚。数据库差异用于减少前滚时间。此还原顺序用于避免丢失工作;上次还原的备份为尾日志备份。

还原顺序的基本 RESTORE 语法是:

  1. RESTORE DATABASE database FROM full database backup WITH NORECOVERY;
  2. RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;
  3. RESTORE LOG database FROM log_backup WITH NORECOVERY; 对于其他每个日志备份,重复此还原日志步骤。
  4. RESTORE DATABASE database WITH RECOVERY;

示例

对于以下示例,AdventureWorks 示例数据库已设置为在数据库备份之前使用完整恢复模式。此示例将创建 AdventureWorks 数据库的尾日志备份。接下来,示例将还原较早的完整数据库备份和日志备份,然后还原尾日志备份。示例将在最后的单独步骤中恢复数据库。

注意:
此示例使用在完整数据库备份的“在完整恢复模式下使用数据库备份”部分中创建的数据库备份和日志备份。

 

 

此示例以 ALTER DATABASE 语句开头,该语句将恢复模式设置为 FULL

USE master;
--Make sure the database is using the full recovery model.
ALTER DATABASE AdventureWorks SET RECOVERY FULL;
GO
--Create tail-log backup.
BACKUP LOG AdventureWorks 
TO DISK = 'Z:/SQLServerBackups/AdventureWorks.bak''Z:/SQLServerBackups/AdventureWorks.bak' 
   WITH NORECOVERY; GO
--Restore the full database backup (from backup set 1).
RESTORE DATABASE AdventureWorks 
  FROM DISK = 'Z:/SQLServerBackups/AdventureWorks.bak' 
  WITH FILE=1, 
    NORECOVERY;

--Restore the regular log backup (from backup set 2).
RESTORE LOG AdventureWorks 
  FROM DISK = 'Z:/SQLServerBackups/AdventureWorks.bak' 
  WITH FILE=2, 
    NORECOVERY;

--Restore the tail-log backup (from backup set 3).
RESTORE LOG AdventureWorks 
  FROM DISK = 'Z:/SQLServerBackups/AdventureWorks.bak'
  WITH FILE=3, 
    NORECOVERY;
GO
--recover the database:
RESTORE DATABASE AdventureWorks WITH RECOVERY;
GO

恢复到故障点

恢复到时间点

在完整恢复模式下,数据库可以还原到日志备份内的特定时间点。时间点可以是特定的日期和时间、标记的事务或日志序列号 (LSN)。有关详细信息,请参阅将数据库还原到备份中的某个时间点

在 SQL Server 2005 中,您可以还原使用 SQL Server 7.0 版、SQL Server 2000 或 SQL Server 2005 创建的数据库备份。但是,SQL Server 2005 无法还原使用 SQL Server 7.0 或 SQL Server 2000 创建的 mastermodelmsdb 备份。此外,包含创建索引操作的 SQL Server 7.0 日志备份无法还原到 SQL Server 2000 或 SQL Server 2005。

SQL Server 2005 使用与 SQL Server 早期版本不同的默认路径。因此,若要从备份还原在 SQL Server 7.0 或 SQL Server 2000 的默认位置中创建的数据库,必须使用 MOVE 选项。有关新默认路径的信息,请参阅 SQL Server 2005 的默认实例和命名实例的文件位置

注意:
使用 SQL Server 6.5 或早期版本创建的数据库备份采用的格式不兼容,无法在 SQL Server 2005 中还原。有关如何将使用 SQL Server 6.5 或早期版本创建的数据库升级到 SQL Server 2005 的信息,请参阅从 SQL Server 6.5 或更早版本复制数据库

 

摘自http://msdn.microsoft.com/zh-cn/library/ms187495.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值