原始产品版本: SQL Server
原始 KB 数: 224071
总结
本文可帮助你排查常见SQL Server备份和还原操作问题。 这些问题包括备份或还原性能缓慢、版本兼容性错误、AlwaysOn 可用性组备份作业、媒体错误、权限失败、第三方 VDI 和 VSS 备份、更改跟踪失败和加密数据库还原。 本文还包括一个常见问题部分和指向SQL Server备份和还原的参考主题的链接。
备份和还原操作需要很长时间
备份和还原操作是 I/O 密集型的。 备份和还原吞吐量取决于底层 I/O 子系统针对 I/O 负载进行优化的程度。 如果怀疑备份操作已停止或完成时间过长,请使用以下一种或多种方法来估计完成时间或跟踪备份或还原操作的进度:
SQL Server 错误日志包含有关以前的备份和还原作的信息。 可以使用这些详细信息来估计备份和还原数据库当前状态所需的时间。 下面是错误日志中的示例输出:
RESTORE DATABASE successfully processed 315 pages in 0.372 seconds (6.604 MB/sec)在 SQL Server 2016 及更高版本中,使用 XEvent backup_restore_progress_trace跟踪备份和还原操作的进度。
使用
Device throughput Bytes/sec和Backup/Restore throughput/sec性能监视器计数器来测量备份和还原吞吐量。 有关详细信息,请参阅 SQL Server 备份设备对象。使用estimate_backup_restore脚本获取备份时间的估计值。
请参阅其工作原理:还原/备份的作用是什么? 本文介绍了备份或还原操作当前所处的阶段。
排查备份或还原速度缓慢的问题
检查是否在下表中遇到任何已知问题,并考虑应用相关的修补程序或最佳做法。
知识库链接 说明和建议操作 备份和还原 SQL Server 数据库 涵盖可提高备份和还原性能的最佳做法。 例如,向运行SQL Server的 Windows 帐户授予 SE_MANAGE_VOLUME_NAME权限,让即时文件初始化加快数据文件操作的速度。配置防病毒软件以使用 SQL Server 防病毒软件可能会锁定 .bak文件,这可能会影响备份和还原操作的性能。 按照本文中的指南从病毒扫描中排除备份文件。在网络位置执行备份或还原操作的速度缓慢 通过将类似大小的文件从运行SQL Server的服务器复制到网络位置,并检查性能,将问题隔离到网络。 检查SQL Server错误日志并Windows事件日志中是否存在指向问题原因的错误消息。
如果使用第三方软件或数据库维护计划执行同步备份,请考虑更改计划以最大程度地减少备份写入到的驱动器上的争用。
请与 Windows 管理员合作,检查硬件的固件更新。
将备份还原到早期SQL Server版本时出错
症状
不能将 SQL Server 备份还原到比创建该备份时所用 SQL Server 版本更早的版本。 例如,无法将对 SQL Server 2022 实例执行的备份还原到 SQL Server 2019 实例。 否则,将显示以下错误消息:
错误 3169:数据库已在运行版本 %ls 的服务器上备份。 该版本与此服务器(运行版本 %ls)不兼容。 请在支持该备份的服务器上还原该数据库,或者使用与此服务器兼容的备份。
解决方案
使用以下方法将托管在更高版本的 SQL Server 上的数据库复制到早期版本的 SQL Server。
备注
以下过程假定你有两个名为SQL_A(更高版本)和SQL_B(较低版本)的两个SQL Server实例。
- 在 SQL_A 和 SQL_B 上下载并安装最新版本的 SQL Server Management Studio (SSMS)。
- 在SQL_A上,请执行以下步骤:
- 右键单击 <YourDatabase>>任务>生成脚本,然后选择用于编写整个数据库和所有数据库对象的脚本的选项。
- 在“设置脚本选项”界面上,选择“高级”,然后在“常规”>“为 SQL Server 版本编写脚本”下选择 SQL_B 的版本。 然后,选择最适合您的保存选项,并继续完成向导。
- 使用大容量复制程序实用工具 (bcp)从不同的表中复制数据。
- 在SQL_B,请执行以下步骤:
- 使用SQL_A服务器上生成的脚本创建数据库架构。
- 在每个表中,禁用任何外键约束和触发器。 如果该表包含标识列,请启用 IDENTITY_INSERT。
- 使用 bcp 将上一步中导出的数据导入到相应的表中。
- 数据导入完成后,启用外键约束和触发器,并对步骤 c 中更改过的每个表关闭标识插入功能。
此过程通常适用于中小型数据库。 对于较大的数据库,SSMS 和其他工具中可能会出现内存不足问题。 请考虑使用 SQL Server Integration Services(SSIS)、复制或其他选项将数据库从更高版本复制到早期版本的SQL Server。
有关如何为数据库生成脚本的详细信息,请参阅使用“生成脚本”选项编写数据库脚本。
AlwaysOn 可用性组中的备份作业问题
症状
你在 Always On 可用性组环境中遇到影响备份作业或维护计划的问题。
解决方案
- 默认情况下,自动备份首选项设为 Prefer Secondary。 此设置指定在次要副本上进行备份,除非主副本是唯一处于联机状态的副本。 不能使用此设置对数据库执行差异备份。 若要更改此设置,请在当前主副本上使用 SSMS,并转到可用性组属性下的“备份首选项”页。
- 如果使用维护计划或计划作业生成数据库的备份,请在托管可用性组可用性副本的每个服务器实例上为每个可用性数据库创建作业。
有关 AlwaysOn 环境中备份的详细信息,请参阅以下文章:
从备份还原数据库时出现媒体错误
症状
指示文件问题的错误消息通常指向损坏的备份文件。 以下错误是备份集损坏时可能会遇到的问题示例:
3241:设备 '%ls' 上的媒体系列格式不正确。 SQL Server 无法处理此介质簇。
3242:设备 '%ls' 上的文件不是有效的Microsoft磁带格式备份集。
3243:设备 %ls 上的媒体簇是使用 Microsoft 磁带格式版本 %d.%d 创建的。 SQL Server 支持的版本为 %d.%d。
原因
这些问题可能是由于影响基础硬件(硬盘、网络存储等)或病毒或恶意软件而引起的。 查看 Windows 系统事件日志和硬件日志中报告的错误,并采取适当的措施(例如升级固件或修复网络问题)。
解决方案
- 使用 RESTORE HEADERONLY 语句检查备份。
- 若要减少这些还原错误的发生,请在运行备份时启用 Backup CHECKSUM 选项,以避免备份损坏的数据库。 有关详细信息,请参阅备份和还原期间可能出现的媒体错误(SQL Server)。
- 还可以启用跟踪标志 3023,以便在使用备份工具执行备份时启用校验和功能。 有关详细信息,请参阅 服务器配置:备份校验和默认值。
- 若要解决这些问题,请找到另一个可用备份文件或创建新的备份集。 Microsoft不提供任何有助于从损坏的备份集中检索数据的解决方案。
- 如果备份文件在一台服务器上成功还原,但不在另一台服务器上还原,请尝试不同的方法在服务器之间复制文件。 例如,尝试使用 robocopy 而不是常规的复制操作。 调查文件是在网络复制操作期间还是在目标存储设备上进行复制操作期间更改的。
由于权限问题,备份失败
症状
尝试运行数据库备份作时,会发生以下错误之一。
方案 1:从 SQL Server Management Studio 运行备份时,备份失败并返回以下错误消息:
服务器 <服务器名称>的备份失败。 (Microsoft.SqlServer.SmoExtended)
System.Data.SqlClient.SqlError:无法打开备份设备“<设备名称>”。 操作系统错误 5(访问被拒绝。)。 (Microsoft.SqlServer.Smo)方案 2:计划备份失败,并生成在失败作业的作业历史记录中记录的错误消息,如下所示:
Executed as user: <Owner of the job>. ....2 for 64-bit Copyright (C) 2019 Microsoft. All rights reserved. Started: 5:49:14 PM Progress: 2021-08-16 17:49:15.47 Source: {GUID} Executing query "DECLARE @Guid UNIQUEIDENTIFIER EXECUTE msdb..sp...".: 100% complete End Progress Error: 2021-08-16 17:49:15.74 Code: 0xC002F210 Source: Back Up Database (Full) Execute SQL Task Description: Executing the query "EXECUTE master.dbo.xp_create_subdir N'C:\backups\D..." failed with the following error: "xp_create_subdir() returned error 5, 'Access is denied.'". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
原因
如果SQL Server服务帐户对备份写入到的文件夹没有读取和写入权限,则可能会出现任一情况。 备份语句可以作为作业步骤的一部分运行,也可以从SQL Server Management Studio手动运行。 在任一情况下,它们都运行在SQL Server服务启动帐户的上下文下。 因此,如果服务帐户没有必要的权限,则会收到前面记下的错误消息。
解决方案
转到文件夹属性中的“安全”选项卡,选择“高级”,然后使用“有效访问”选项卡,检查文件夹中SQL Server服务帐户的当前权限。有关详细信息,请参阅备份设备。
第三方备份或还原操作失败
SQL Server提供虚拟备份设备接口(VDI)。 此 API 允许独立软件供应商将SQL Server集成到其产品中,以支持备份和还原操作。 这些 API 旨在提供可靠性和性能,并支持各种SQL Server备份和还原功能,包括快照和热备份功能。
常见故障排除步骤
在所有受支持的 SQL Server 版本中,在安装过程中创建并预配名为
NT SERVICE\SQLWriter的登录名。 检查此登录名是否存在于SQL Server中,并且是正在备份的实例上的 sysadmin 服务器角色的一部分。 此外,请检查是否已启动SQL Server VSS 编写器服务,并将其启动帐户设置为本地系统。请在运行 SQL Server 的服务器上,以提升权限的命令提示符运行
SqlServerWriter命令时,检查是否列出了VSSADMIN LIST WRITERS。 写入器必须存在并处于稳定状态,VSS 备份才能成功完成。有关详细信息,请查看备份软件和供应商的支持站点中的日志。
症状或情况 参考 了解 VDI 备份的工作原理 工作原理:SQL Server - VDI (VSS) 备份资源 可以同时备份多少个数据库 工作原理:可以同时备份多少个数据库?
启用更改跟踪时备份失败
症状
在数据库上启用更改跟踪时,备份可能会失败。 你可能会看到如下错误:
错误:3999,严重性:17,状态:1。
<时间戳> spid <spid> 因错误 2601,未能将 dbid 8 中的提交表刷新到磁盘。 有关详细信息,请查看错误日志。
解决方案
如果在受支持的 SQL Server 版本中遇到此问题,请安装版本的最新累积更新。 有关背景和历史修复,请参阅以下文章:
还原加密数据库的备份时出错
症状
还原受透明数据加密保护的数据库备份(TDE)时遇到问题。
解决方案
若要解决此问题,请参阅将受 TDE 保护的数据库移到另一个SQL Server。
有关SQL Server备份和还原的常见问题
如何检查备份操作的状态?
使用 estimate_backup_restore 脚本估计备份时间。
如果 SQL Server 在备份过程中发生故障转移,我该怎么办?
按照 重新启动中断的还原操作(Transact-SQL) 中的说明,重新启动还原操作或备份操作。
是否可以从较新版本的旧版本还原数据库备份,反之亦然?
不能使用早于创建备份的版本SQL Server还原SQL Server备份。 有关详细信息,请参阅 RESTORE 兼容性支持。
如何检查SQL Server数据库备份?
请参阅 RESTORE 语句中所述的过程 - VERIFYONLY (Transact-SQL)。
如何获取 SQL Server 中数据库的备份历史记录?
请参阅 如何获取 SQL Server 中数据库的备份历史记录。
是否可以在 64 位服务器上还原 32 位备份,反之亦然?
是的。 磁盘上的存储格式SQL Server在 64 位和 32 位环境中是相同的。 因此,备份和还原操作适用于 64 位和 32 位环境。
如何备份和还原受透明数据加密(TDE)保护的数据库?
备份数据库、数据库加密密钥的服务器证书和证书的私钥。 若要在另一个实例上还原备份,请先将服务器证书(其私钥)还原到 master 目标实例上的数据库,然后还原用户数据库备份。 有关分步指南,请参阅将受 TDE 保护的数据库移到另一个SQL Server。
备份压缩是否适用于已启用 TDE 的数据库?
是的。 从 SQL Server 2016 开始,如果在 MAXTRANSFERSIZE 语句中指定 BACKUP 大于 65536(64 KB),则可对启用了 TDE 的数据库使用备份压缩。 如果没有该设置,即使请求压缩,备份也会运行未压缩。 有关详细信息,请参阅 备份压缩。
VDI 和 VSS 备份如何与 AlwaysOn 可用性组次要副本进行交互?
仅支持通过 SQL Writer 服务执行的基于 VSS 的(快照)备份,且仅适用于主副本。 在辅助副本上,通过 VDI 客户端请求仅复制完整备份,因为不支持针对辅助副本的 VSS 完整备份。 有关详细信息,请参阅活动辅助副本:备份次要副本(AlwaysOn 可用性组)。
常规疑难解答技巧
- 向写入备份的文件夹上的SQL Server服务帐户授予读取和写入权限。 有关详细信息,请参阅备份权限。
- 检查写入备份的文件夹是否有足够的空间用于数据库备份。 使用
sp_spaceused存储过程大致估计数据库备份大小。 - 使用最新版本的 SSMS 可避免与作业和维护计划配置相关的已知问题。
- 对作业执行测试运行,检查是否已成功创建备份。 为检查备份添加相关逻辑。
- 如果计划将系统数据库从一台服务器移到另一台服务器,请查看 移动系统数据库。
- 如果看到间歇性备份失败,请检查SQL Server版本的最新更新是否修复了该问题。 有关详细信息,请参阅SQL Server版本和更新。
- 若要计划和自动执行 SQL Server Express 版本的备份,请参阅在 SQL Server Express 中计划和自动备份SQL Server数据库。
有关SQL Server备份和还原的参考主题
下表列出了针对特定备份和恢复任务需要参阅的主题。
| Article | 说明 |
|---|---|
| BACKUP (Transact-SQL) | 回答有关备份的基本问题,并提供不同类型的备份和还原操作的示例。 |
| 备份设备(SQL Server) | 用于了解备份设备、备份到网络共享、Azure Blob 存储及相关任务的参考资料。 |
| 恢复模型 (SQL Server) | 详细介绍了简单、完整和大容量日志恢复模式,并介绍了恢复模式如何影响备份。 |
| 备份和还原系统数据库(SQL Server) | 介绍处理系统数据库的备份和还原操作时的策略和注意事项。 |
| 还原和恢复概述 (SQL Server) | 介绍恢复模式如何影响还原操作。 如果对数据库恢复模式如何影响还原过程有疑问,请查看本文。 |
| 使数据库在其他服务器上可用时管理元数据 | 移动数据库或遇到影响登录名、加密、复制、权限等问题时要注意的注意事项。 |
| 事务日志备份 (SQL Server) | 介绍有关如何在完整和大容量日志恢复模式下备份和还原(应用)事务日志的概念。 介绍如何执行常规事务日志备份来恢复数据。 |
| 将 SQL Server 托管备份到 Microsoft Azure | 介绍托管备份和相关过程。 |