在完全恢复模式下将数据库还原到故障点(Transact-SQL)

本主题介绍如何还原到故障发生点。 本主题仅与使用完整或大容量日志恢复模式的数据库相关。

还原到故障点

  1. 通过运行以下基本 BACKUP 语句备份日志尾部的内容:

    BACKUP LOG <database_name> TO <backup_device>   
       WITH NORECOVERY, NO_TRUNCATE;  
    
  2. 通过运行以下基本 RESTORE DATABASE 语句还原完整数据库备份:

    RESTORE DATABASE <database_name> FROM <backup_device>   
       WITH NORECOVERY;  
    
  3. (可选)通过运行以下基本 RESTORE DATABASE 语句来还原差异数据库备份:

    RESTORE DATABASE <database_name> FROM <backup_device>   
       WITH NORECOVERY;  
    
  4. 通过在 RESTORE LOG 语句中指定 WITH NORECOVERY,应用每个事务日志,包括在步骤 1 中创建的尾日志备份:

    RESTORE LOG <database_name> FROM <backup_device>   
       WITH NORECOVERY;  
    
  5. 通过运行以下 RESTORE DATABASE 语句恢复数据库:

    RESTORE DATABASE <database_name>   
       WITH RECOVERY;  
    

示例:

在运行该示例之前,必须完成以下准备:

  1. AdventureWorks2012 数据库的默认恢复模式是简单的恢复模式。 由于此恢复模式不支持还原到故障点,因此通过运行以下 ALTER DATABASE 语句将 AdventureWorks2012 设置为使用完整恢复模式:

    USE master;  
    GO  
    ALTER DATABASE AdventureWorks2012 SET RECOVERY FULL;  
    
  2. 使用以下备份语句创建数据库的完整备份:

    BACKUP DATABASE AdventureWorks2012 TO DISK = 'C:\AdventureWorks2012_Data.bck';  
    
  3. 创建例程日志备份:

    BACKUP LOG AdventureWorks2012 TO DISK = 'C:\AdventureWorks2012_Log.bck';  
    

以下示例在创建 AdventureWorks2012 数据库的结尾日志备份后还原之前创建的备份。 (此步骤假定可以访问日志磁盘。

首先,该示例创建一个尾日志备份以捕获活动日志,并将数据库置于还原状态。 然后,该示例还原数据库备份,应用以前创建的例程日志备份,并应用结尾日志备份。 最后,该示例在单独的步骤中恢复数据库。

注释

默认行为是恢复数据库作为还原最终备份的语句的一部分。

/* Example of restoring a to the point of failure */  
-- Step 1: Create a tail-log backup by using WITH NORECOVERY.  
BACKUP LOG AdventureWorks2012  
   TO DISK = 'C:\AdventureWorks2012_Log.bck'  
   WITH NORECOVERY;  
GO  
-- Step 2: Restore the full database backup.  
RESTORE DATABASE AdventureWorks2012  
   FROM DISK = 'C:\AdventureWorks2012_Data.bck'  
   WITH NORECOVERY;  
GO  
-- Step 3: Restore the first transaction log backup.  
RESTORE LOG AdventureWorks2012  
   FROM DISK = 'C:\AdventureWorks2012_Log.bck'  
   WITH NORECOVERY;  
GO  
-- Step 4: Restore the tail-log backup.  
RESTORE LOG AdventureWorks2012  
   FROM  DISK = 'C:\AdventureWorks2012_Log.bck'  
   WITH NORECOVERY;  
GO  
-- Step 5: Recover the database.  
RESTORE DATABASE AdventureWorks2012  
   WITH RECOVERY;  
GO  

另请参阅

BACKUP (Transact-SQL)
RESTORE (Transact-SQL)