SQL Server备份
目录
- SQL Server备份
- 什么是备份
- 为什么要备份
- 备份的存储位置
- 哪些数据库需要备份
- 备份类型
- 完整备份
- 差异备份
- 事务日志备份
- 总结
什么是备份
备份是完整备份时该数据库的镜像。
备份数据库时,将其复制到磁盘等备份设备。稍后,可以使用备份文件将数据库恢复到其原始状态。
重要的是,有一个良好的备份策略来满足业务需求。备份策略的规划从恢复策略开始。
这些是指导恢复策略的重要问题:
- 可以容忍的最大数据丢失量是多少?
- 在发生灾难时恢复数据库的可接受时间是多少?
第一个问题将确定需要的备份类型,第二个问题涉及高可用性解决方案的使用。
为什么要备份
通常,在灾难发生前备份数据库以恢复其状态,例如:
- 硬件故障
- 数据库损坏
- 用户错误操作
此外,还可以使用备份将数据库从一台服务器复制到另一台服务器。例如,在生产服务器上备份一个数据库,然后在测试服务器上恢复它用于测试。
备份的存储位置
理想情况下,应该将备份存储在与SQL Server不同的单独设备上。
因此,不应该将备份存储在SQL server的同一服务器上。原因是如果服务器崩溃,将丢失数据及其备份。
哪些数据库需要备份
您应该备份用户数据库和系统数据库(tempdb
系统数据库除外)
备份类型
SQL Server允许在数据库级别创建备份;它不支持表级备份。SQL Server数据库具有以下备份类型:
- 完整备份
- 差异(增量)备份
- 事务日志备份
假设我们在数据库中有一个表,其中有四条记录:
完整备份
完整备份包含整个数据库的副本,包括备份期间写入的已用数据页和日志文件。 完整备份不会截断事务日志。
要恢复数据库,始终需要完整备份。换句话说,如果没有完整备份,则无法恢复差异备份或事务日志备份。
完整备份可能会导致大量磁盘I/O。因此,应该在工作负载较低的时候执行备份。
下图说明了完整备份:
在这张图中,我们有两个完整备份:
- 第一个完整备份包含id为1的记录
- 第二个完整备份包含id为1、2和3的记录。
执行完全备份,请使用BACKUP DATABASE
语句,语法如下:
BACKUP DATABASE database_name
TO DISK = path_to_backup_file;
此语法中,在TO DISK
子句中指定备份文件路径,在BACKUP DATABASE
后指定数据库名称。
差异备份
差异备份仅包含自上次完全备份以来已修改的数据。除此之外,差异备份与完整备份相同。
下图说明了差异备份:
在这张图中,我们有两个完整备份和三个差异备份:
- 第一次差异备份包含id为2的记录,该记录在第一次完全备份之后插入。
- 第二次差异备份包含id为2和3的记录,这些记录在第一次完全备份之后插入。
- 第三次差异备份包含id为4的记录,该记录在第二次完全备份之后插入。
差异备份语法如下:
BACKUP DATABASE database_name
TO DISK = path_to_backup_file
WITH DIFFERENTIAL;
事务日志备份
事务日志备份包含对数据库所做的所有更改。使用完整
或大容量日志
恢复模式时需要事务日志备份,因为它们需要截断日志。
注意,随后的两个事务日志备份不包含冗余数据。此外,事务日志备份对性能没有影响,因此,可以在工作负载高时执行它。
要执行事务日志备份,数据库的恢复模型需要是FULL
(完整)或BULK_LOGGED
(大容量日志)。
下图说明了事务日志备份:
图片包含两个完整备份和三个事务日志备份:
- 第一个事务日志备份包含id为2的记录
- 第二个事务日志备份包含id为3的记录
- 第三个事务日志备份包含id为4的记录。
注意,完全备份不会清除事务日志。因此,
事务日志备份
将复制以前任何其他事务日志备份
都没有备份的所有记录。
执行事务日志备份,使用backup log
语句,如下:
BACKUP LOG database_name
TO DISK = path_to_backup_file;
总结
- SQL Server为您提供了三种备份类型:完全备份、差异备份和事务日志备份。
- 完整备份备份整个数据库和事务日志的活动部分。它不会清除事务日志。
- 差异备份基于完整备份。差异备份备份自上次完全备份以来的更改,并在备份结束时备份事务日志的活动部分。
- 事务日志备份包括以前日志备份中未备份的所有日志记录。