6.2 SQL Server备份和还原
数据库管理员最担心的情况就是数据库瘫痪,造成数据丢失,而备份作为数据的副本,可以有 效地保护和恢复数据。本节将介绍数据备份的原因,备份的方式.SOL Server的恢复模式.以及备 份策略和备份设备。
6.2.1为什么需要备份
对于生产数据来讲,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果,通 常,造成数据丢失的原因主要包括以下几类。
> 程序错误,例如,程序异常终止或逻辑错误等。在程序运行期间,可能会出现程序异常终 止的情况,或者由于程序的逻辑错误导致数据丢失,包括数据库开发人员没有使用正确的 SQL 语句处理异常等。
> 人为错误(如管理员误操作).人为错误可能在任何时候不经意地发生,如用户或管理员错 误地删除了表,或更新、删除了数据。
> 计算机失败(如系统崩溃).计算机失败包括硬件和软件引起的错误,硬件故障往往导致系 统崩溃,如CPU,内存或总线故障,软件故障往往比硬件故障带来的损失更严重.如操作 sm 系统故障或 SOL Server 本身的故障。
> 磁盘失败。磁盘失败可能是由于磁盘读写磁头损坏,或者是磁盘物理块损坏。
> 灾难和偷窃。通常,灾难(如火灾、地震)和偷窃的发生会造成服务器永久性损失,需要 重新配置所有的系统。
所以,数据库管理员的主要职责之一就是实施和规划一个妥善的备份和还原策略以保护数据库. 避免由于各种故障造成损坏而丢失数据,以在系统失效后尽快地还原数据库。
6.2.2备份类型
在Access、FoxPro这样的桌面型数据库中,备份就是将数据库文件复制到另外一个安全的地方. 还原则是将这些文件复制回原位置,而SQL Server数据库则不仅仅是复制文件这么简单. 在 SQlL Server 中提供了三种常用的备份类型,分别是完整备份,差异备份和事务日志备份。
1.完整备份
完整备份包括对整个数据库,部分事务日志、数据库结构和文件结构的备份。完整备份代表的 是备份完成时刻的数据库。
完整备份是备份的基础,提供了任何其他备份的基准,其他备份(如差异备份)只有在执行完
整备份之后才能被执行。
2.差异备份
差异备份是指对上一次完整备份之后所有更改的数据做备份,备份过程能够识别出数据库中哪 一部分被修改了,并只对这一部分做备份。
差异备份的优势是速度快,备份数据库所需要的时间很少,但差异备份要求事先已执行过一次 完整备份。
3.事务日志备份
事务日志备份记录了数据库的所有改变。在备份事务日志时需要考虑以下因素。
> 在执行了至少一次完整备份后,才能备份事务日志。
> 在简单恢复模式下不能备份事务日志。
> 如果没有与其相一致的数据库备份,则不能恢复事务日志。 在执行数据库事务日志备份期间,SQL Server将做以下工作。
> 备份事务日志:从上一次成功的事务日志备份到当前事务日志的尾部.
> 截断事务日志:到事务日志活动部分的开始,丢弃不活动的部分。 此外,事务日志备份主要是T-SOL语句,而不是整个数据库结构,文件结构或数据。
6.2.3恢复模式
不管是备份还是还原,都是在一定的恢复模式中进行的。恢复模式是数据库的一种特性,控制 着数据库备份和还原的基本行为。数据库管理员应根据企业系统实际运作的需求及对数据可用性和 恢复的需求来选择合适的恢复模式。
SQL Server 提供了三种恢复模式:分别是简单恢复模式、完整恢复模式和大容量日志恢复模式。
1.简单恢复模式
在简单恢复模式下,不活动的日志将被删除,所以不支持事务日志备份,如图6.14所示。
在图6.14中,进行了一些数据库备份。在最近的备份t5之后的一段时间.此数据库中出现了 数据丢失,数据库管理员将使用t5备份来将数据库还原到备份完成的时间点,之后对数据库进行的 更改都将丢失。
由于不支持事务日志备份,数据库只能恢复到备份的时间点,而无法将数据库还原到故障点或 特定的时间点。因此,简单恢复模式主要用于小型数据库和不经常更改的数据库。
2.完整恢复模式
对于十分重要的生产数据库,如银行,电信系统,在发生故障时可能要求恢复到历史上某个时 刻。一旦发生故障时,必须保证数据不丢失,保证数据能够恢复到发生故障时的状态,这样,就必 须采用完整恢复模式。
完整恢复模式可在最大范围内防止出现故障时丢失数据,它包括数据库备份和事务日志备份, 并提供全面保护,使数据库免受媒体故障的影响。这个模式使用数据库和所有日志的备份去恢复数 据库,如果日志没有损坏,SQL Server 可以恢复所有数据,除了在失败那一刻的事务。
由于支持事务日志备份,因此完整恢复模式可以将数据库恢复到任意一个指定的时间点。 如图6.15所示为完整恢复模式过程。
在图6.15中,执行了一个数据库备份(Db_1)和两个例行的日志备份(Log_1和Log2).在执 行Log_2日志备份后,数据库中的数据发生丢失。在还原这三个备份之前,数据库管理员必须先备 份日志尾部,然后还原Db_1.Log_1和Log_2.接着还原并恢复尾日志备份(Tail).这能将数据库恢 复到故障点,从而恢复所有数据。恢复操作可以还原所有已提交的事务,正在进行的事务将回滚。
3.大容量日志恢复模式
DBA在某些场合需要对数据库执行一些大批量的数据插入,更新或删除操作,如一次需要导入 上百万条数据,如果在完整恢复模式下,那么这些操作将产生大量的日志记录,导致数据库性能很 低。在这种环境下,可以采用大容量日志恢复模式来提高性能。
虽然大容量日志恢复模式会完整地记录其他事务,但它只对大容量操作进行最小记录。大容量 日志恢复模式是对完整恢复模式的补充,提供了良好的性能,且占用较少的日志空间,但是,大容 量日志恢复模式增加了这些大容量复制操作丢失数据的风险,因为最小日志记录大容量操作不会逐 个记录事务。
只要日志备份包含大容量操作,数据库就只能恢复到日志备份的结尾,而不能恢复到某个时间 点或日志备份中某个标记的事务。
实验环境(实验案例二)
同实验案例一
需求描述
每周四晚上17:00对bdqn数据库进行完整备份;每天12:00和18:00对该数据库进行事务日志备份。
先启用SQL Server 代理
右键维护计划 > 维护计划向导 > 下一步
名称自定义 > 每项任务单独计划 > 下一步
选择完整备份和事务日记
先完整备份
选择bdqn数据库
选择备份到的路径
每周四的17:00备份
和上一张图片调换顺序
事务日记备份路径
可自行选择报告写入的路径
检查无误后点击完成即可创建维护计划
刷新后就能看到创建好的数据库维护计划
在SSMS中右击需要还原的数据库,在弹出的快捷菜单中选择“任务”→“还原”→“数据库” 命令,在打开的窗口中选择需要使用的备份数据进行还原,在如下图。点确定即可还原数据库
成功还原数据库