6.4.3 SQL Server的备份与恢复
1)SQL Server的备份
启动SQL Server Management Studio,在“对象资源管理器”中展开服务器,在需要进行备份与恢复的数据库上单击右键,在出现的快捷菜单中选择“任务”→“备份”,出现如图6-14所示的备份对话框,其中可以选择备份的类型以及备份文件的存储位置。
图6-14 数据库备份对话框
SQL Server的备份有以下3种形式:
(1)完整备份
完整备份是SQL Server所有备份类型中,最简单、最基础的数据库备份方法,它提供了某个数据库在备份时间点的完整复制。但是,它仅支持还原到数据库备份成功结束的时间点,即不支持任意时间点还原操作。全备份做的事情,就是将所有的缓存先刷新到磁盘上,不管在进行的事务是否提交,这样保证了日志的连续性,数据与日志的一致性,如果事务没提交,在日志文件上的标记是active的,这段日志也就不会被清空,下次恢复的时候,就从这段日志开始,接着使用新的日志执行。因此全备份之前肯定会执行一次checkpoint(检查点)。
(2)日志备份
SQL Server数据库完全备份是数据库的完整复制,所以备份文件空间占用相对较大,加之可能会在备份过程中导致事务日志一直不断增长。事务日志备份可以很好地解决这个问题,因为事务日志备份记录了数据库从上一次日志备份到当前时间内的所有事务提交的数据变更,它可以配合数据库完全备份和差异备份(可选)来实现时间点的还原。当日志备份操作成功以后,事务日志文件会被截断,事务日志空间将会被重复循环利用,以此来解决完全备份过程中事务日志文件一直不停增长的问题,因此最好能够周期性对数据库进行事务日志备份,以此来控制事务日志文件的大小。但是这里需要有一个前提,就是数据库必须是完全恢复模式,简单恢复模式的数据库不支持事务日志的备份,当然就无法实现时间点的还原(通过右键数据库—属性—选项,来设置数据库的恢复模式,数据库默认恢复模式为简单恢复模式)。事务日志备份与数据完全备份工作方式截然不同,它不是数据库的一个完整复制,而是从上一次日志备份到当前时间内所有已提交的事务数据变更。日志备份中需要注意的就是对未提交事务的理解,没有提交的事务其实还是占用日志文件的VLF,shrink并不能回收日志空间;提交事务的日志如被备份之后,就会将日志VLF打上unactive或者truncated标记,这个时候执行shrink就可以回收这部分日志VLF了。日志备份体量小,比较适合频率高的执行,比如每5 min执行一次。
(3)差异备份
事务日志备份会导致数据库还原链条过长的问题,而差异备份就是来解决事务日志备份的这个问题的。差异备份是备份从上一次数据库全量备份以来的所有变更的数据页,所以差异备份相对于数据库完全备份而言往往数据空间占用会小很多。因此,备份的效率更高,还原的速度更快,可以大大提升灾难恢复的能力。
2)SQL Server的恢复
启动SQL Server Management Studio,在“对象资源管理器”中展开服务器,在数据库上单击右键,在出现的快捷菜单中选择“属性”→“选项”,出现如图6-15所示的数据库属性对话框,在这里可以设置数据库的恢复模式。
图6-15 数据库恢复模式设置
SQL Server数据库有3种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式。
(1)简单恢复模式
在简单恢复模式下,SQL Server会在每次checkpoint(检查点)或backup(备份)之后自动截断日志,也就是丢弃所有的不活跃的日志记录,仅保留用于实例启动时自动发生的所需的少量日志,这样做的好处是日志文件非常小,不需要DBA去维护、备份日志,但坏处也是显而易见的,就是一旦数据库出现异常,需要恢复时,最多只能恢复到上一次的备份,无法恢复到最近可用状态,因为日志丢失了。简单恢复模式主要用于非关键性的业务,比如开发库和测试库。
(2)完整恢复模式
和简单恢复模式相反,完整恢复模式是SQL Server不主动截断日志,只有备份日志之后,才可以截断日志,否则日志文件会一直增大,直到硬盘不能负荷,因此需要部署一个任务定时备份日志。完整模式的好处是可以做point-in-time恢复,最大限度地保证数据不丢失,一般用于关键性的业务环境里。缺点就是DBA需要维护日志,增加人员成本(其实也就是多了定时备份日志这项工作)。
(3)大容量日志恢复模式
大容量日志恢复模式和完整恢复模式类似,唯一的不同是针对以下大容量操作,会产生尽量少的日志。需要日志备份,是完整恢复模式的附加模式,允许执行高性能的大容量复制操作。通过使用最小方式记录大多数大容量操作,减少日志空间使用量。如果在最新日志备份后发生日志损坏或执行大容量日志记录操作,则必须重做自该上次备份之后所做的更改,否则不丢失任何工作,可以恢复到任何备份的结尾,不支持时点恢复。
与完整恢复模式(完全记录所有事务)相比,大容量日志恢复模式只对大容量操作进行最小记录(尽管会完全记录其他事务)。大容量日志恢复模式保护大容量操作不受媒体故障的危害,提供最佳性能并占用最小日志空间。
但是,大容量日志恢复模式会增加这些大容量复制操作丢失数据的风险,因为大容量日志操作阻止再次捕获对每个事务逐一所做的更改。如果日志备份包含大容量日志操作,则无法还原到该日志备份中的时点,而只能还原整个日志备份。
在大容量日志恢复模式下,如果日志备份覆盖了任何大容量操作,则日志备份包含由大容量操作所更改的日志记录和数据页。这对于捕获大容量日志操作的结果至关重要。合并的数据区可使日志备份变得非常庞大。此外,备份日志需要访问包含大容量日志事务的数据文件。如果无法访问任何受影响的数据库文件,则事务日志将无法备份,并且在此日志中提交的所有操作都会丢失。
启动SQL Server Management Studio,在“对象资源管理器”中展开服务器,在需要进行备份与恢复的数据库上单击右键,在出现的快捷菜单中选择“任务”→“还原”→“数据库”,出现如图6-16所示的还原对话框,根据选择的备份集,系统会按照数据库属性设置的恢复方式进行数据库恢复。
图6-16 数据库还原对话框