SQL Server 的恢复和备份模式

时间:2022-04-17 06:19:36

事务日志

每一个SQL Server数据库在硬盘上包含至少两个物理文件,一个MDF文件和一个LDF文件。MDF文件包含所有被存储的实际数据。LDF文件或日志文件,包含了每一个数据变化的纪录。记录每个数据变化使撤销操作和“时间点”备份成为可能。一个时间点的备份使我们能够恢复我们希望的任何时间点的数据库,昨天,两个小时前,两分钟前。默认情况下,MDF和LDF文件位于硬盘上SQL Server下的Server\Version\MSSQL\Data 目录下。

SQL Server 的恢复和备份模式 

虽然这有历史记录不可能永远保存在事物日志文件中。如果这样做,随着时间的推移日志文件的大小将变得巨大和无法控制。相反,日志文件应该定期清理,或“删节” 。在被删节之间有多少时间允许日志文件增长是由数据库“恢复模式”决定的。

恢复模式

一个“恢复模式”决定一个数据库的事务日志如何保存。每个数据库都有自己的恢复模式设置。这意味着SQL Server可以包含多个数据库,每一个都有自己的恢复模式,并且独于其他数据库的配置。

要查看一个数据库恢复模式设置,打开SQL Server服务器管理,右键点击一个数据库,然后选择属性。一旦属性对话框中打开后,从左边的菜单选择“选项”。

SQL Server 的恢复和备份模式 

恢复模式可以是完全,简单,或批日志恢复。

简单恢复

当一个数据库设置为简单恢复模式,这意味着日志文件不会被永久保存。因此,当执行一个TSQL声明,任何改变被写入数据和日志文件,但这些日志文件在被删节(清理)之前不会保存很长一段时间。这删节又SQL Server签发“检查点”所造成的。对于造成检查点事件完整描述,请参阅Microsoft文章: http://msdn.microsoft.com/en-us/library/ms188748.aspx。删节日志文件对我们意味着,这些日志文件不能被用于数据库恢复。这是因为我们无法控制日志何时将被清除。因此,当一个数据库设置为简单恢复,唯一的可选的备份类型是一个全备份。

SQL Server 的恢复和备份模式 

完整备份恢复你所有的数据,但你不能要求它恢复我在某一特定的时间点的所有数据。对于时间点的恢复,我们需要一个事物日志。

全恢复

不要与“全备份”混淆,全恢复涉及到一个保存历史事务日志文件的数据库。由于日志文件现将是数据库不可分割的一部分,所以当创建数据库就必创建日志文件。当创建一个数据库,要考虑有两个文件选项, “初始大小”和“自动增长” ,这两个选项可在SQL Server数据库管理属性页上进行配置。在该文件页面上,可设置初始化大小和自增大小。

SQL Server 的恢复和备份模式 

如果数据库设置为全恢复,那么每一个数据变动操作历史记录都将被保存。如果日志文件锉光或用完物理磁盘空间,那么数据库将停止工作。这种风险可以由SQL Server自动增加日志文件的功能来降低。要启用自动成长功能,就要给日志文件初始兆字节大小的空间。下一步,选择“ Autogrowth ”复选框,并输入一个增长的大小。日志文件的大小也可以加以限制或不加限制的增长。如果没有设置自动增长,一个固定大小的日志文件将自动生成。如果日志文件填满了,那么该数据库将停止工作。自动增长功能可以避免了这一点,但带有一些额外开销。当SQL Server设置自动增加日志文件大小时,资源(内存, CPU ,以及硬盘)利用率和数据库的性能,可能遭受影响。一旦对日志进行了调整,性能将恢复正常。

差异备份

当数据库运行在“全恢复”的模式,那么事物日志正在不断的被保存,这样我们就又可以有几个新的备份选择。除了全备份现在可以进行差异备份和事物日志备份。

SQL Server 的恢复和备份模式 

差异备份复制上次完全备份所有的数据变化。因此,这些备份通常比完全备份更快和更小。但随着时间的推移,越来越多的数据发生变化,差异备份文件将变得很大。完整备份创建一个检查点的意义在于,新的差异备份可以从这一点开始进行。

事物日志备份

事务日志备份将复制上次完全或以前的事务日志备份的所有数据变化。事物日志备份通常是非常快并且非常小。缺点是它们的恢复能力有限。例如,如果您创建一个星期一的全备份和周二至周五事务日志备份,然后需要在周六恢复,恢复的步骤将是先恢复星期一的全备份,然后恢复星期二的日志备份,星期三的日志,星期四的日志,并最终恢复星期五的日志备份。显然这个过程,是需要耗费很多资源的。此外,如果一个由于某种原因日志备份损坏或无法使用,那么整个恢复链将中断,而不会获得日志备份良好时那样的效果。

结论

SQL Server2008提供了几种恢复方法,包括全恢复和简单恢复。恢复方法的选择将取决于事物日志文件是否被保存,如果是的话,任何类型的备份可以执行,如全备份,差异备份,或事务日志备份。