适用范围:SQL Server
本文介绍了备份SQL Server数据库的好处,介绍了基本的备份和恢复术语,并涵盖了SQL Server的备份和恢复策略及安全考虑因素。
注意
本文介绍了 SQL Server 备份。 有关备份 SQL Server 数据库的特定步骤,请参阅创建备份。
SQL Server 备份和恢复组件为您的 SQL Server 数据库中存储的关键数据提供了必要的保护措施。 为了最大限度地减少灾难性数据丢失的风险,请定期备份数据库,以保留数据的修改。 精心策划的备份和恢复策略有助于保护数据库免受多种故障导致的数据丢失。 通过恢复一组备份并恢复数据库来检验你的策略,这样你就能随时应对灾难。
除了本地存储,SQL Server 还支持从 Azure Blob 存储 进行备份和恢复。 有关详细信息,请参阅使用 Azure Blob 存储 进行 SQL Server 备份和还原。 对于使用 Azure Blob 存储服务存储的数据库文件,SQL Server 2016 (13.x) 提供了使用 Azure 快照的选项,以实现近乎即时的备份和更快的还原。 有关详细信息,请参阅 Azure 中数据库文件的文件快照备份。 Azure 还为 Azure VM 中运行的 SQL Server 提供企业级备份解决方案。 作为完全托管的备份解决方案,支持 Always On 可用性组、长期保留、时点恢复以及集中管理和监视。 有关详细信息,请参阅 关于 Azure VM 上的 SQL Server 备份。
为何备份?
备份您的SQL Server数据库、对备份运行测试恢复程序,并将备份副本存储在安全的异地位置,可以保护您免受潜在灾难性的数据丢失。 备份是保护数据的唯一方法。
使用有效的数据库备份,可从多种故障中恢复数据,例如:
介质故障。
用户错误(例如,误删除了某个表)。
硬件故障(例如,磁盘驱动器损坏或服务器报废)。
自然灾难。 通过使用 SQL Server 备份到 Azure Blob 存储,你可以在与本地部署不同区域创建异地备份,以备自然灾害影响本地部署时使用。
此外,数据库备份对于进行日常管理(如将数据库从一台服务器复制到另一台服务器、设置 Always On 可用性组或数据库镜像以及进行存档)非常有用。
备份术语表
| 术语 | Definition |
|---|---|
| 备份[动词] | 通过从SQL Server数据库复制数据记录或从其事务日志复制日志记录来创建备份[名词]。 |
| 备份[名词] | 一个数据副本,可用于在发生故障后还原和恢复数据。 数据库备份还可用于将数据库副本还原到新位置。 |
| 备份设备 | 用于写入 SQL Server 备份并可从中还原这些备份的磁盘或磁带设备。 SQL Server 备份也可以写入 Azure Blob 存储,并且使用 URL 格式来指定备份文件的目标和名称。 有关详细信息,请参阅使用 Azure Blob 存储 进行 SQL Server 备份和还原。 |
| 备份介质 | 一个或多个已写入一个或多个备份的磁带或磁盘文件。 |
| 数据备份 (data backup) | 完整数据库的数据备份(数据库备份)、部分数据库的数据备份(部分备份)或一组数据文件或文件组的数据备份(文件备份)。 |
| 数据库备份 (database backup) | 数据库的备份。 完整数据库备份表示备份完成时的整个数据库。 差异数据库备份只包含自最近完整备份以来对数据库所做的更改。 |
| 差异备份 (differential backup) | 一种数据备份,它基于完整数据库、部分数据库、一组数据文件或文件组的最新完整备份(即差异基准),并且仅包含自该基准以来已更改的数据。 |
| 完整备份 (full backup) | 一种数据备份,包含特定数据库或者一组特定的文件组或文件中的所有数据,以及可以恢复这些数据的足够的日志。 |
| 日志备份 (log backup) | 事务日志的备份,其中包括以前日志备份中未备份的所有日志记录(完整恢复模式)。 |
| 恢复 | 将数据库恢复到稳定且一致的状态。 |
| 恢复 | 数据库启动过程中的一个阶段,或带恢复的还原过程中的一个阶段,此阶段会使数据库进入事务一致状态。 |
| 恢复模式 | 用于控制数据库上的事务日志维护的数据库属性。 有三种恢复模式:基本恢复、完全恢复和批量日志恢复。 数据库的恢复模式确定其备份和还原要求。 |
| 还原 (restore) | 这是一个多阶段过程,包括将指定的 SQL Server 备份中的所有数据和日志页复制到指定数据库中,然后通过应用备份中记录的更改来前滚所有事务,使数据前移到最新状态。 |
备份和还原策略
你必须根据环境和可用资源定制备份和恢复策略。 可靠的恢复需要备份和恢复策略。 设计良好的策略在最大化数据可用性和最小数据丢失的业务需求与维护和存储备份的成本之间取得平衡。
备份和还原策略包含备份部分和还原部分。 备份部分定义了备份的类型和频率、所需硬件的类型和速度、如何测试备份,以及存储在哪里以及如何存储备份介质(包括安全考虑)。 恢复部分定义了谁负责执行恢复,如何实现数据库可用性和最小数据丢失目标的恢复,以及如何测试恢复。
有效的备份和恢复策略需要细致的规划、实施和测试。 需要测试。 只有当你成功恢复恢复还原策略中包含的每一种备份组合,并测试每个恢复数据库的物理一致性时,你才有了备份策略。 考虑几个因素,包括:
组织在生产数据库方面的目标,尤其是在可用性要求以及防止数据丢失或损坏上的要求。
每个数据库的特性包括:大小、使用模式、内容特性以及数据要求等。
对资源的约束,例如硬件、人员、用于存储备份介质的空间、存储介质的物理安全性等。
最佳做法建议
不要给执行备份或恢复操作的账户赋予超过必要的权限。 欲了解更多信息,请参见 备份 和 恢复 以获取具体权限细节。 加密数据库备份,如果可能的话,进行压缩。
使用一致的文件扩展名,使备份更容易识别和管理。 SQL Server 不要求或强制这些扩展,但一致性有助于操作任务,比如为备份文件配置杀毒排除功能。 有关详细信息,请参阅 配置防病毒软件以使用 SQL Server。
- 数据库备份文件应该有
.BAK扩展名。 - 日志备份文件应具有
.TRN扩展。
使用独立存储
将数据库备份放置在与数据库文件不同的物理位置或设备上。 当存储数据库的物理硬盘故障或崩溃时,恢复取决于你能否访问存储备份的独立硬盘或远程设备。 你可以从同一个物理磁盘驱动器创建多个逻辑卷或分区。 在选择备份存储位置前,请仔细审查磁盘分区和逻辑卷布局。
选择适当的恢复模式
备份和还原操作发生在恢复模式的上下文中。 恢复模式是一种数据库属性,用于控制事务日志的管理方式。 因此,数据库的恢复模型决定了数据库支持的备份和恢复场景类型,以及事务日志备份的大小。 通常,数据库使用简单恢复模式或完整恢复模式。 您可以在执行批量操作之前切换到批量日志记录恢复模型,从而增强完整恢复模型。 有关这些恢复模式及其影响事务日志管理的简介,请参阅 事务日志。
数据库恢复模式的最佳选择取决于您的业务需求。 若要免去事务日志管理工作并简化备份和还原,请使用简单恢复模式。 若要尽量降低因管理开销而造成的工作损失风险,请使用完整恢复模式。 为了在批量日志操作中最小化日志大小的影响,同时仍允许恢复这些操作,可以使用批量日志恢复模型。 有关恢复模型对备份和恢复的影响,请参见备份概述(SQL Server)。
设计备份策略
在您选择了符合特定数据库业务需求的恢复模型后,规划并实施相应的备份策略。 最佳的备份策略取决于多个因素。 以下因素尤为重要:
应用程序每天需要多少小时访问数据库?
如果有可预测的非高峰时段,你应该安排该时段的完整数据库备份。
更改和更新可能发生的频率如何?
如果频繁更换,请考虑:
在简单的恢复模型下,你可以在完整数据库备份之间安排差分备份。 差异备份只能捕获自上次完整数据库备份之后的更改。
在完整恢复模式下,你可以安排频繁的日志备份。 在完整备份之间安排差异备份可减少数据还原后需要还原的日志备份数,从而缩短还原时间。
变化可能只发生在数据库的一小部分,还是大部分?
对于大型数据库,且变更集中在部分文件或文件组中,部分备份或完整文件备份是有用的。 有关详细信息,请参阅部分备份(SQL Server)和完整文件备份(SQL Server)。
完整的数据库备份需要多少磁盘空间?
您的企业需要保留多久以前的备份?
确保你有一个符合应用需求和业务需求的妥善备份计划。 随着备份老化,除非你有办法恢复所有数据直到故障点,否则数据丢失的风险会增加。 在因存储限制而丢弃旧备份之前,考虑一下你是否需要在那么久以前进行恢复。
估计完整数据库备份的大小
在实施备份和恢复策略之前,先估算完整数据库备份所占用的磁盘空间。 备份操作会将数据库中的数据复制到备份文件。 备份只包含数据库中的实际数据,没有未使用的空间。 因此,备份通常小于数据库本身。 要估算完整数据库备份的大小,可以使用 sp_spaceused 系统存储过程。 有关详细信息,请参阅 sp_spaceused。
计划备份
备份操作对运行事务的影响很小,所以你可以在常规操作中运行备份。 可以在对生产工作负载的影响很小的情况下执行 SQL Server 备份。
注意
有关备份期间并发限制的信息,请参阅备份概述(SQL Server)。
确定需要哪种备份类型以及每类备份的频率后,将定期备份纳入数据库维护计划。 有关维护计划以及如何为数据库备份和日志备份创建维护计划的信息,请参阅 Use the Maintenance Plan Wizard。
测试备份
在测试备份之前,你没有还原策略。 通过将数据库副本恢复到测试系统,彻底测试每个数据库的备份策略。 您必须对每种要使用的备份类型进行还原测试。 恢复备份后,针对该数据库运行 DBCC CHECKDB,以确认备份介质未损坏。
验证媒体稳定性和一致性
使用备份工具提供的验证选项(BACKUPT-SQL命令、SQL Server维护计划、你的备份软件或解决方案等)。 示例请参见 RESTORE 陈述 - VERIFYONLY。
使用 BACKUP CHECKSUM 等高级功能来检测备份介质本身的问题。 有关详细信息,请参阅备份和还原期间可能的媒体错误(SQL Server)。
文档备份/还原策略
记录你的备份和恢复流程,并将文档副本保存在运行手册中。
你还应该为每个数据库维护操作手册。 本操作手册应记录备份的位置、备份设备名称(如有)以及恢复测试备份所需的时间。
从不受信任的源还原备份的安全风险
本部分概述了将备份从不受信任的源还原到任何 SQL Server 环境(包括本地、Azure SQL 托管实例、Azure 虚拟机上的 SQL Server 和任何其他环境)相关的安全风险。
为什么这很重要
如果备份源自不受信任的源,则还原 SQL 备份文件 (.bak) 会带来潜在风险。 当 SQL Server 环境有多个实例时,安全风险进一步加剧,因为它放大了威胁区域。 虽然保留在受信任边界内的备份不会造成安全问题,但还原恶意备份可能会损害整个环境的安全性。
恶意 .bak 文件可以:
- 接管整个 SQL Server 实例。
- 提升特权并获取对基础主机或虚拟机的未经授权的访问。
此攻击发生在任何验证脚本或安全检查可以执行之前,这使得它变得极其危险。 还原不受信任的备份相当于在关键服务器或虚拟机上运行不受信任的应用程序,并将任意代码执行引入环境。
最佳做法
遵循以下备份安全最佳做法,减少对 SQL Server 环境的威胁:
- 将备份还原视为高风险操作。
- 使用独立实例减少威胁服务区域。
- 仅允许受信任的备份:从不从未知源或外部源还原备份。
- 仅允许在受信任的边界内保留的备份:确保备份源自受信任的边界。
- 为方便起见,请勿绕过安全控制。
- 启用 服务器级审核 以捕获备份和还原事件并缓解审核逃避。
使用 XEvent 监视进度
由于数据库规模庞大且操作复杂,备份和恢复操作可能耗时较长。 当任一操作出现问题时,利用 backup_restore_progress_trace 扩展事件实时监控进展。 有关扩展事件的详细信息,请参阅 扩展事件概述。
警告
backup_restore_progress_trace扩展事件可能导致性能问题并占用大量磁盘空间。 使用时间短,谨慎,并在投入生产前彻底测试。
-- Create the backup_restore_progress_trace extended event session
CREATE EVENT SESSION [BackupRestoreTrace] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace
ADD TARGET package0.event_file (SET filename = N'BackupRestoreTrace')
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 5 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
GO
-- Start the event session
ALTER EVENT SESSION [BackupRestoreTrace] ON SERVER
STATE = START;
GO
-- Stop the event session
ALTER EVENT SESSION [BackupRestoreTrace] ON SERVER
STATE = STOP;
GO
来自扩展事件的示例输出
有关备份任务的详细信息
使用备份设备和备份介质
- 为磁盘文件定义逻辑备份设备(SQL Server)
- 为磁带机定义逻辑备份设备(SQL Server)
- 指定磁盘或磁带备份目标(SQL Server)
- 删除备份设备 (SQL Server)
- 设置备份的过期日期(SQL Server)
- 查看备份磁带或文件的内容(SQL Server)
- 查看备份集中的数据和日志文件(SQL Server)
- 查看逻辑备份设备的属性和内容(SQL Server)
- 从设备还原备份 (SQL Server)
创建备份
对于部分备份或仅复制备份,请分别使用带有 COPY_ONLY 或 BACKUP 选项的 Transact-SQL PARTIAL 语句。
使用 SSMS
使用 T-SQL
- 使用 Resource Governor 通过备份压缩来限制 CPU 使用率
- 数据库损坏时备份事务日志(SQL Server)
- 在备份或还原过程中启用或禁用备份校验和 (SQL Server)
- 指定备份或还原以在出错后继续或停止