适用范围:SQL Server
本文介绍备份 SQL Server 数据库的好处,介绍了基本的备份和还原术语,并介绍了 SQL Server 的备份和还原策略,以及 SQL Server 备份和还原的安全注意事项。
本文介绍了 SQL Server 备份。 有关备份 SQL Server 数据库的特定步骤,请参阅创建备份。
SQL Server 备份和还原组件提供基本的保护措施,可以保护存储在 SQL Server 数据库中存储的关键数据。 为了尽量降低灾难性数据丢失的风险,需备份数据库,以便定期保存对数据的修改。 计划良好的备份和还原策略有助于保护数据库,使之免受各种故障导致的数据丢失的威胁。 测试策略,方法是先还原一组备份,然后恢复数据库,以便准备好对灾难进行有效的响应。
除了在本地存储中存储备份外,SQL Server 还支持备份到 Azure Blob 存储和从其还原。 有关详细信息,请参阅 使用 Microsoft 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 可用性组或数据库镜像以及进行存档)非常有用。
备份术语的术语表
备份 [动词] \(back up)
通过从 SQL Server 数据库复制数据记录或从其事务日志中记录创建 备份 [名词] 的过程。
备份 [名词] \(backup)
一个数据副本,可用于在发生故障后还原和恢复数据。 数据库备份还可用于将数据库副本还原到新位置。
备份设备 (backup device)
要写入 SQL Server 备份及能从中还原这些备份的磁盘或磁带设备。 SQL Server 备份也可以写入 Azure Blob 存储,并且使用 URL 格式来指定备份文件的目标和名称。 有关详细信息,请参阅 使用 Microsoft Azure Blob 存储进行 SQL Server 备份和还原。
备份介质
已写入一个或多个备份的一个或多个磁带或磁盘文件。
数据备份 (data backup)
完整数据库的数据备份(数据库备份)、部分数据库的数据备份(部分备份)或一组数据文件或文件组的数据备份(文件备份)。
数据库备份 (database backup)
数据库的备份。 完整数据库备份表示备份完成时的整个数据库。 差异数据库备份只包含自最近完整备份以来对数据库所做的更改。
差异备份 (differential backup)
一种数据备份,基于完整数据库或部分数据库或一组数据文件或文件组(差异基准)的最新完整备份,并且仅包含自确定差异基准以来发生更改的数据。
完整备份 (full backup)
一种数据备份,包含特定数据库或者一组特定的文件组或文件中的所有数据,以及可以恢复这些数据的足够的日志。
日志备份 (log backup)
事务日志的备份,其中包括以前日志备份中未备份的所有日志记录(完整恢复模式)。
recover
将数据库恢复到稳定且一致的状态。
recovery
将数据库恢复到事务一致状态的数据库启动阶段或 Restore With Recovery 阶段。
恢复模式
用于控制数据库上的事务日志维护的数据库属性。 有三种恢复模式:简单、完整和大容量记录。 数据库的恢复模式确定其备份和还原要求。
还原 (restore)
这是一个多阶段过程,包括将指定的 SQL Server 备份中的所有数据和日志页复制到指定数据库中,然后通过应用备份中记录的更改来前滚所有事务,使数据前移到最新状态。
备份和还原策略
备份和还原数据必须根据特定环境进行自定义,并且必须使用可用资源。 因此,可靠使用备份和还原进行恢复需要备份和还原策略。 设计良好的备份和还原策略平衡了最大数据可用性和最小数据丢失的业务要求,同时考虑维护和存储备份的成本。
备份和还原策略包含备份部分和还原部分。 策略的备份部分定义了备份的类型和频率、所需硬件的性质和速度、备份测试方式以及备份介质的存储位置以及存储方式(包括安全注意事项)。 策略的还原部分定义谁负责执行还原、如何执行还原以满足数据库可用性目标以及尽量减少数据丢失以及如何测试还原。
设计有效的备份和还原策略需要仔细计划、实现和测试。 需要测试:在还原策略中包含的所有组合中成功还原备份并测试还原的数据库以确保物理一致性之前,才需要执行备份策略。 必须考虑各种因素。 这些设置包括:
组织在生产数据库方面的目标,尤其是在可用性要求以及防止数据丢失或损坏上的要求。
每个数据库的特性包括:大小、使用模式、内容特性以及数据要求等。
对资源的约束,例如硬件、人员、用于存储备份介质的空间、存储介质的物理安全性等。
最佳做法建议
执行备份或还原操作的帐户不应被授予超出必要的权限。 查看备份和还原,了解特定权限详细信息。 建议对备份进行加密,并尽可能压缩备份。
为了确保安全,备份文件的扩展应遵循适当约定:
- 数据库备份文件应具有
.BAK扩展 - 日志备份文件应具有
.TRN扩展。
使用独立的存储
重要
确保将数据库备份放在与数据库文件不同的物理位置或设备上。 存储数据库的物理驱动器出现故障或崩溃时,可恢复性取决于能否访问存储备份的独立驱动器或远程设备以执行还原。 请记住,你可以在同一个物理磁盘驱动器中创建多个逻辑卷或分区。 在为备份选择存储位置之前,请仔细研究磁盘分区和逻辑卷布局。
选择适当的恢复模式
备份和还原操作发生在恢复模式的上下文中。 恢复模式是一种数据库属性,用于控制事务日志的管理方式。 因此,数据库的恢复模式确定数据库支持哪些类型的备份和还原方案,以及事务日志备份的大小。 通常,数据库使用简单恢复模式或完整恢复模式。 可以通过在批量操作之前切换到大容量日志恢复模式来增强完整恢复模式。 有关这些恢复模式及其影响事务日志管理的简介,请参阅 事务日志。
数据库的最佳恢复模式取决于您的业务要求。 若要免去事务日志管理工作并简化备份和还原,请使用简单恢复模式。 若要尽量降低因管理开销而造成的工作损失风险,请使用完整恢复模式。 为了在大容量日志操作期间最大程度减少对日志大小的影响,同时允许这些操作的可恢复性,请使用大容量日志恢复模式。 有关恢复模式对备份和还原的影响的信息,请参阅 备份概述。
设计备份策略
选择满足特定数据库的业务需求的恢复模式后,必须规划和实施相应的备份策略。 最佳备份策略取决于各种因素,以下因素尤其重要:
一天中应用程序访问数据库的时间有多长?
如果有可预测的非高峰期,建议在该时间段内计划完整数据库备份。
更改和更新可能发生的频率如何?
如果更改经常发生,请考虑下列事项:
在简单恢复模式下,请考虑将差异备份安排在完整数据库备份之间。 差异备份只能捕获自上次完整数据库备份之后的更改。
在完整恢复模式下,应安排经常的日志备份。 在完整备份之间安排差异备份可减少数据还原后需要还原的日志备份数,从而缩短还原时间。
可能只是更改数据库的小部分内容,还是需要更改数据库的大部分内容?
对于更改集中于部分文件或文件组的大型数据库,部分备份和/或完整文件备份非常有用。 有关详细信息,请参阅部分备份(SQL Server)和完整文件备份(SQL Server)。
完整数据库备份需要多少磁盘空间?
你的企业需要维护过去多久的备份?
确保你已根据应用程序需求和业务需求制定了适当的备份计划。 随着备份变得陈旧,数据丢失风险会更高,除非你有办法重新生成故障点之前的所有数据。 在因为存储资源限制而选择删除旧备份之前,请考虑是否需要恢复过去的备份数据。
估计完整数据库备份的大小
在实现备份与还原策略之前,应当估计完整数据库备份将使用的磁盘空间。 备份操作会将数据库中的数据复制到备份文件。 备份仅包含数据库中的实际数据,而不包含任何未使用的空间。 因此,备份通常小于数据库本身。 可以使用系统存储过程估算完整数据库备份 sp_spaceused 的大小。 有关详细信息,请参阅 sp_spaceused (Transact-SQL)。
计划备份
执行备份作对正在运行的事务的影响最小;因此,可以在常规作期间运行备份作。 可以在对生产工作负载的影响很小的情况下执行 SQL Server 备份。
有关备份期间并发限制的信息,请参阅备份概述(SQL Server)。
确定所需的备份类型和必须执行每种备份类型的频率后,建议您将定期备份计划为数据库维护计划的一部分。 有关维护计划以及如何为数据库备份和日志备份创建维护计划的信息,请参阅 Use the Maintenance Plan Wizard。
测试备份
在测试备份之前,你没有还原策略。 通过将数据库的副本还原到测试系统,彻底测试每个数据库的备份策略非常重要。 您必须对每种要使用的备份类型进行还原测试。 我们还建议在还原备份后,通过数据库的 DBCC CHECKDB 执行数据库一致性检查,以验证备份介质未损坏。
验证媒体稳定性和一致性
使用备份实用工具提供的验证选项(BACKUP T-SQL 命令、SQL Server 维护计划、备份软件或解决方案等)。 有关示例,请参阅 RESTORE 语句 - VERIFYONLY。
使用高级功能,例如 BACKUP CHECKSUM 检测备份介质本身的问题。 有关详细信息,请参阅 备份和还原期间可能的媒体错误(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
扩展事件的示例输出
继续
有关备份任务的详细信息
使用备份设备和备份介质
创建备份
注意
对于部分备份或仅复制备份,必须分别使用 Transact-SQL BACKUP 语句中的 PARTIAL 选项或 COPY_ONLY 选项。