本主题介绍如何还原到故障发生点。 本主题仅与使用完整或大容量日志恢复模式的数据库相关。
还原到故障点
通过运行以下基本 BACKUP 语句备份日志尾部的内容:
BACKUP LOG <database_name> TO <backup_device> WITH NORECOVERY, NO_TRUNCATE;通过运行以下基本 RESTORE DATABASE 语句还原完整数据库备份:
RESTORE DATABASE <database_name> FROM <backup_device> WITH NORECOVERY;(可选)通过运行以下基本 RESTORE DATABASE 语句来还原差异数据库备份:
RESTORE DATABASE <database_name> FROM <backup_device> WITH NORECOVERY;通过在 RESTORE LOG 语句中指定 WITH NORECOVERY,应用每个事务日志,包括在步骤 1 中创建的尾日志备份:
RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY;通过运行以下 RESTORE DATABASE 语句恢复数据库:
RESTORE DATABASE <database_name> WITH RECOVERY;
示例:
在运行该示例之前,必须完成以下准备:
AdventureWorks2012 数据库的默认恢复模式是简单的恢复模式。 由于此恢复模式不支持还原到故障点,因此通过运行以下 ALTER DATABASE 语句将 AdventureWorks2012 设置为使用完整恢复模式:
USE master; GO ALTER DATABASE AdventureWorks2012 SET RECOVERY FULL;使用以下备份语句创建数据库的完整备份:
BACKUP DATABASE AdventureWorks2012 TO DISK = 'C:\AdventureWorks2012_Data.bck';创建例程日志备份:
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