本文主要来源于Microsoft《SQL Server 2008 R2联机丛书》。转裁请注明出处。
恢复模式旨在控制事务日志维护。有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式。通常,数据库使用完整恢复模式或简单恢复模式。
一、概述
1、简单恢复模式
可最大程度地减少事务日志的管理开销,因为不备份事务日志。如果数据库损坏,则简单恢复模式将面临极大的工作丢失风险。数据只能恢复到已丢失数据的最新备份。因此,在简单恢复模式下,备份间隔应尽可能短,以防止大量丢失数据。但是,间隔的长度应该足以避免备份开销影响生产工作。在备份策略中加入差异备份可有助于减少开销。
通常,对于用户数据库,简单恢复模式用于测试和开发数据库,或用于主要包含只读数据的数据库(如数据仓库)。简单恢复模式并不适合生产系统,因为对生产系统而言,丢失最新的更改是无法接受的。在这种情况下,我们建议使用完整恢复模式。
2、完整恢复模式和大容量日志恢复模式
相对于简单恢复模式而言,完整恢复模式和大容量日志恢复模式提供了更强的数据保护功能。这些恢复模式基于备份事务日志来提供完整的可恢复性及在最大范围的故障情形内防止丢失工作。
(1)完整恢复模式
为需要事务持久性的数据库提供了常规数据库维护模式。
完整恢复模式需要日志备份。此模式完整记录所有事务,并将事务日志记录保留到对其备份完毕为止。如果能够在出现故障后备份日志尾部,则可以使用完整恢复模式将数据库恢复到故障点。完整恢复模式也支持还原单个数据页。
(2)大容量日志恢复模式
可大容量日志记录大多数大容量操作,它只用作完整恢复模式的附加模式。对于某些大规模大容量操作(如大容量导入或索引创建),暂时切换到大容量日志恢复模式可提高性能并减少日志空间使用量。
仍需要日志备份。与完整恢复模式相同,大容量日志恢复模式也将事务日志记录保留到对其备份完毕为止。由于大容量日志恢复模式不支持时点恢复,因此必须在增大日志备份与增加工作丢失风险之间进行权衡。
3、日志备份
在完整恢复模式和大容量日志恢复模式下,必须进行日志备份。如果不想进行日志备份,则请使用简单恢复模式。
二、三种恢复模式的对比
1、简单恢复模式
(1)说明
无日志备份。
自动回收日志空间以减少空间需求,实际上不再需要管理事务日志空间。
(2)工作丢失的风险
最新备份之后的更改不受保护。在发生灾难时,这些更改必须重做。
(3)能否恢复到时点?
只能恢复到备份的结尾。
2、完整恢复模式
(1)说明
需要日志备份。
数据文件丢失或损坏不会导致丢失工作。
可以恢复到任意时点(例如应用程序或用户错误之前)。
(2)工作丢失的风险
正常情况下没有。
如果日志尾部损坏,则必须重做自最新日志备份之后所做的更改。
(3)能否恢复到时点?
如果备份在接近特定的时点完成,则可以恢复到该时点。
3、大容量日志恢复模式
(1)说明
需要日志备份。
是完整恢复模式的附加模式,允许执行高性能的大容量复制操作。
通过使用最小方式记录大多数大容量操作,减少日志空间使用量。
(2)工作丢失的风险
如果在最新日志备份后发生日志损坏或执行大容量日志记录操作,则必须重做自该上次备份之后所做的更改。
否则不丢失任何工作。
(3)能否恢复到时点?
可以恢复到任何备份的结尾。不支持时点恢复。
二、选择数据库恢复模式
1、何时使用简单恢复模式
如果符合下列所有要求,则使用简单恢复模式:
不需要故障点恢复。如果数据库丢失或损坏,则会丢失自上一次备份到故障发生之间的所有更新,但您愿意接受这个损失。
您愿意承担丢失日志中某些数据的风险。
您不希望备份和还原事务日志,希望只依靠完整备份和差异备份。
2、何时使用完整恢复模式
如果符合下列任一要求,则使用完整恢复模式(还可以选择使用大容量日志恢复模式):
您必须能够恢复所有数据。
数据库包含多个文件组,并且您希望逐段还原读/写辅助文件组(以及可选地还原只读文件组)。
您必须能够恢复到故障点。
您希望可以还原单个页。
您愿意承担事务日志备份的管理开销。
3、何时使用大容量日志恢复模式
大容量日志恢复模式旨在严格作为完整恢复模式的附加补充。我们建议您仅在运行大规模大容量操作期间以及在不需要数据库的时点恢复时使用该模式。
在该恢复模式下,多数大容量操作仅进行最小日志记录。如果使用完整恢复模式,则可以在执行此类大容量操作前临时切换到大容量日志恢复模式。
通常,大容量日志恢复模式与完整恢复模式相似,只是它按最小方式记录多数大容量操作。事务日志备份捕获日志以及自上次备份后已完成的所有按最小方式记录的操作结果。这会使日志备份非常大。因此,大容量日志恢复模式仅适合在能够以最小方式记录操作的大容量操作期间使用。我们建议在其余时间使用完整恢复模式。当完成一组大容量操作后,我们建议您立即切换回完整恢复模式。
三、切换恢复模式
数据库可以随时切换为其他恢复模式。但是,通常不从简单恢复模式进行切换。注意,如果在大容量操作过程中切换到完整恢复模式,则大容量操作的日志记录将从最小日志记录更改为最大日志记录,反之亦然。
1、从简单恢复模式切换之后
如果必须从简单恢复模式切换到完整恢复模式,则我们建议您:
(1)启动日志链
完成到完整恢复模式或大容量日志恢复模式的切换之后,立即进行完整数据库备份或差异数据库备份以启动日志链。
到完整恢复模式或大容量日志恢复模式的切换仅在第一个数据备份之后才生效。
(2)更新还原计划
计划常规日志备份并相应地更新还原计划。
日志备份是完整恢复模式和大容量日志恢复模式的不可或缺的一部分。日志备份允许截断事务日志。如果不经常备份日志,则事务日志可能会展开直到占满磁盘空间。
2、切换到简单恢复模式之后
如果从完整恢复模式或大容量日志恢复模式切换到简单恢复模式,则需要中断备份日志链。因此,极力建议您在切换之前备份日志,这样可允许您将数据库恢复到该点。
切换之后,需要定期备份数据,以保护数据并截断事务日志的不活动部分。
3、更改恢复模式 (Transact-SQL)
使用 ALTER DATABASE,如下所示:
USE master;
ALTER DATABASE database_name SET RECOVERY SIMPLE;
注意: 若要更改新数据库的默认恢复模式,请使用 ALTER DATABASE 更改 model 数据库的恢复模式。
4、更改恢复模式 (SQL Server Management Studio)
连接到相应的 Microsoft SQL Server 数据库引擎实例之后,在对象资源管理器中,单击服务器名称以展开服务器树。
展开“数据库”,然后根据数据库的不同,选择用户数据库,或展开“系统数据库”,再选择系统数据库。
右键单击该数据库,再单击“属性”,这将打开“数据库属性”对话框。
在“选择页”窗格中,单击“选项”。
当前恢复模式显示在“恢复模式”列表框中。
也可以从列表中选择不同的模式来更改恢复模式。可以选择“完整”、“大容量日志”或“简单”。