SQL Server 备份和还原操作疑难解答

本文提供了Microsoft SQL Server 备份和还原操作期间可能会遇到的常见问题的解决方案,并提供有关这些操作的详细信息的参考。

原始产品版本:SQL Server
原始 KB 数: 224071

备份和还原操作需要很长时间

备份和还原操作是 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 跟踪备份和还原操作的进度。

  • 可以使用percent_completesys.dm_exec_requests来跟踪正在进行的备份和还原操作的进度。

  • 可以使用性能监视器计数器来度量备份和还原吞吐量信息Device throughput Bytes/secBackup/Restore throughput/sec。 有关详细信息,请参阅 SQL Server 备份设备对象

  • 使用estimate_backup_restore脚本获取备份时间的估计值。

  • 请参阅其工作原理:还原/备份的作用是什么? 此博客文章提供有关备份或还原操作的当前阶段的见解。

要检查的内容

  1. 检查是否遇到下表中列出的任何已知问题。 请考虑是应实施更改,还是应用相应文章中讨论的修补程序和最佳做法。

    知识库或联机丛书链接 说明和建议的操作
    优化 SQL Server 中的备份和还原性能 联机丛书主题介绍了可用于提高备份/还原操作性能的各种最佳做法。 例如,可以将特殊权限分配给 SE_MANAGE_VOLUME_NAME 运行 SQL Server 的 Windows 帐户,以启用数据文件的即时初始化。 这会产生显著的性能提升。
    2920151基于 Windows Server 2012 R2 的故障转移群集的建议修补程序和更新

    2822241 Windows 8 和 Windows Server 2012 更新汇总:2013 年 4 月
    当前系统汇总可以包括系统级别的已知问题的修复,这些问题可能会降低 SQL Server 等程序的性能。 安装这些更新有助于防止此类问题。
    2878182 FIX:应用程序中的用户模式进程在运行 Windows Server 2012 的服务器上无响应

    备份操作是 I/O 密集型操作,可能会受到此 bug 的影响。 应用此修补程序以帮助防止这些问题。
    配置防病毒软件以使用 SQL Server 防病毒软件可能会锁定.bak文件。 这可能会影响备份和还原操作的性能。 按照本文中的指南从病毒扫描中排除备份文件。
    尝试访问 Windows 中不再存在的共享文件夹时,2820470延迟的错误消息 讨论尝试访问 Windows 2012 及更高版本中不再存在的共享文件夹时发生的问题。
    967351 NTFS 卷中的大量碎片文件可能无法超过特定大小 讨论 NTFS 文件系统严重碎片时发生的问题。
    304101备份大型系统卷时备份程序失败
    2455009修复:如果 SQL Server 2005、SQL Server 2008 或 SQL Server 2008 R2 中的事务日志中存在许多 VDF,则恢复数据库时性能降低 存在许多虚拟日志文件可能会影响还原数据库所需的时间。 在还原操作的恢复阶段,这尤其如此。 有关可能导致许多 VDF 的其他可能问题的信息,请参阅 数据库操作需要很长时间才能完成,或者在事务日志包含大量虚拟日志文件时触发错误。
    备份或还原到网络位置的操作速度缓慢 尝试将类似大小的文件从运行 SQL Server 的服务器复制到网络位置,将问题隔离到网络。 验证性能。
  2. 检查 SQL Server 错误日志和 Windows 事件日志中的错误消息,以获取有关问题原因的更多指针。

  3. 如果使用第三方软件或数据库维护计划执行同步备份,请考虑是否应更改计划,以最大程度地减少正在写入备份的驱动器上的争用。

  4. 请与 Windows 管理员合作,检查硬件的固件更新。

影响不同 SQL Server 版本之间的数据库还原的问题

无法将 SQL Server 备份还原到早期版本的 SQL Server,而不是创建备份的版本。 例如,无法将 SQL Server 2019 实例上创建的备份还原到 SQL Server 2017 实例。 否则,将显示以下错误消息:

错误 3169:数据库已在运行版本 %ls 的服务器上备份。 该版本与此服务器(运行版本 %ls)不兼容。 请在支持该备份的服务器上还原该数据库,或者使用与此服务器兼容的备份。

使用以下方法将托管在更高版本的 SQL Server 上的数据库复制到早期版本的 SQL Server。

注意

以下过程假定你有两个 SQL Server 实例,这些实例名为SQL_A(更高版本)和SQL_B(较低版本)。

  1. 在 SQL_A 和 SQL_B 上下载并安装最新版本的 SQL Server Management Studio (SSMS)
  2. 在SQL_A上,请执行以下步骤:
    1. 右键单击 <YourDatabase>任务>生成脚本,然后选择用于编写整个数据库和所有数据库对象的脚本的选项。
    2. “设置脚本选项”屏幕上,选择“高级,然后在“SQL Server 版本常规>脚本”下选择SQL_B版本。 此外,请选择最适合保存生成的脚本的选项。 然后,继续向导。
    3. 使用大容量复制程序实用工具 (bcp) 从不同的表复制数据。
  3. 在SQL_B,请执行以下步骤:
    1. 使用在SQL_A服务器上生成的脚本创建数据库架构。
    2. 在每个表上,禁用任何外键约束和触发器。 如果表具有任何标识列,请启用标识插入。
    3. 使用 bcp 将上一步中导出的数据导入到相应的表中。
    4. 数据导入完成后,启用外键约束和触发器,并为步骤 c 中受影响的每个表禁用标识插入。

此过程通常适用于中小型数据库。 对于较大的数据库,SSMS 和其他工具中可能会出现内存不足问题。 应考虑使用 SQL Server Integration Services(SSIS)、复制或其他选项创建从更高版本到早期版本的 SQL Server 的数据库副本。

有关如何为数据库生成脚本的详细信息,请参阅使用“生成脚本”选项编写数据库脚本

Always On 环境中的备份作业问题

如果在 AlwaysOn 环境中遇到影响备份作业或维护计划的问题,请注意以下事项:

  • 默认情况下,自动备份首选项设置为首选 辅助备份。 这指定应在次要副本上进行备份 , 除非主副本是联机的唯一副本。 不能使用此设置对数据库进行差异备份。 若要更改此设置,请在当前主副本上使用 SSMS,并导航到可用性组属性下的“备份首选项”页。
  • 如果使用维护计划或计划作业来生成数据库的备份,请确保在托管可用性组可用性副本的每个服务器实例上为每个可用性数据库创建作业。

有关 AlwaysOn 环境中备份的详细信息,请参阅以下主题:

如果收到指示文件问题的错误消息,则这是损坏的备份文件的症状。 下面是在备份集损坏时可能会获取的错误示例:

  • 3241:设备 '%ls' 上的媒体系列格式不正确。 SQL Server 无法处理此介质簇。

  • 3242:设备 '%ls' 上的文件不是有效的Microsoft磁带格式备份集。

  • 3243:设备 %ls 上的媒体簇是使用 Microsoft 磁带格式版本 %d.%d 创建的。 SQL Server 支持的版本为 %d.%d。

注意

可以使用 Restore Header 语句检查备份。

这些问题可能会因影响基础硬件(硬盘、网络存储等)或与病毒或恶意软件相关的问题而发生。 查看 Windows 系统事件日志和硬件日志中报告的错误,并采取适当的措施(例如升级固件或修复网络问题)。

若要防止这些错误,请在运行备份时启用 备份 CHECKSUM 选项,以避免备份损坏的数据库。 有关详细信息,请参阅备份和还原期间可能出现的媒体错误(SQL Server)。

还可以启用跟踪标志 3023,以便在使用备份工具运行备份时启用校验和。 有关详细信息,请参阅 “如何启用 CHECKSUM”选项(如果备份实用工具未公开该选项)。

若要解决这些问题,必须找到另一个可用备份文件或创建新的备份集。 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 服务帐户的当前权限。

使用第三方备份应用程序的备份或还原操作失败

SQL Server 提供虚拟备份设备接口 (VDI) 工具。 此 API 使独立的软件供应商能够将 SQL Server 集成到其产品中,以支持备份和还原操作。 这些 API 旨在提供最大的可靠性和性能,并支持各种 SQL Server 备份和还原功能。 这包括各种快照和热备份功能。

常见疑难解答步骤

更多资源

工作原理:可以同时备份多少个数据库?

其他问题

症状/方案 修正操作或其他信息
如果在数据库上启用了更改跟踪,并返回类似于以下内容的错误,则备份可能会失败:

“错误:3999,严重性:17,状态:1。

<由于错误 2601,时间戳> spid Spid <> 未能将提交表刷新到 dbid 8 中的磁盘。 有关详细信息,请查看错误日志。


请参阅以下Microsoft知识库文章:
还原加密数据库的备份时出现问题 将受 TDE 保护的数据库移到其他 SQL Server
尝试从企业版还原 CRM 备份失败,但标准版失败 2567984还原 Microsoft Dynamics CRM 数据库时出现“无法在此版本的 SQL Server 中启动数据库”错误

有关 SQL Server 备份和还原操作的常见问题解答

如何检查备份操作的状态?

使用estimate_backup_restore脚本获取备份时间的估计值。

如果 SQL Server 在备份期间进行故障转移,该怎么办?

每次 重启中断的还原操作(Transact-SQL)重启还原或备份操作。

是否可以从较新版本的较旧程序版本还原数据库备份,反之亦然?

不能使用比创建备份的版本更高的 SQL Server 版本还原 SQL Server 备份。 有关详细信息,请参阅 兼容性支持

如何实现验证 SQL Server 数据库备份?

请参阅 RESTORE 语句 - VERIFYONLY (Transact-SQL)记录的过程。

如何获取 SQL Server 中数据库的备份历史记录?

请参阅 如何获取 SQL Server 中数据库的备份历史记录。

是否可以在 64 位服务器上还原 32 位备份,反之亦然?

是的。 磁盘上的 SQL Server 存储格式在 64 位和 32 位环境中是相同的。 因此,备份和还原操作适用于 64 位和 32 位环境。

常规疑难解答技巧

  • 请确保将读取和写入权限预配到要写入备份的文件夹上的 SQL Server 服务帐户。 有关详细信息,请参阅备份权限
  • 确保正在写入备份的文件夹有足够的空间来容纳数据库备份。 可以使用 sp_spaceused 存储过程大致估计特定数据库的备份大小。
  • 始终使用最新版本的 SSMS 来确保你不会遇到与作业和维护计划配置相关的任何已知问题。
  • 对作业执行测试运行,确保成功创建备份。 始终添加逻辑来验证备份
  • 如果计划将系统数据库从一台服务器移到另一台服务器,请查看 “移动系统数据库”。
  • 如果发现间歇性备份失败,请检查你是否遇到了 SQL Server 版本的最新更新中已修复的问题。 有关详细信息,请参阅 SQL Server 版本和更新
  • 若要计划和自动完成 SQL Express 版本备份,请参阅在 SQL Server Express 中计划和自动完成 SQL Server 数据库备份

SQL Server 备份和还原操作的参考主题

  • 有关备份和还原操作的详细信息,请参阅联机丛书中的以下主题:

    “备份和还原 SQL Server 数据库”:本主题介绍 SQL Server 数据库的备份和还原操作的概念,提供指向其他主题的链接,并提供运行各种备份或还原任务的详细过程(例如验证备份和使用 T-SQL 或 SSMS 进行备份)。 这是 SQL Server 文档中有关此主题的父主题。

  • 下表列出了可能需要查看与备份和还原操作相关的特定任务的其他主题。

    参考 说明
    BACKUP (Transact-SQL) 提供与备份相关的基本问题的解答。 提供不同类型的备份和还原操作的示例。
    备份设备 (SQL Server) 提供了一个很好的参考,用于了解各种备份设备、备份到网络共享、Azure Blob 存储和相关任务。
    恢复模式 (SQL Server) 详细介绍各种恢复模式:简单、完整和大容量记录。 提供有关恢复模式如何影响备份的信息。
    备份和还原:系统数据库(SQL Server) 介绍策略,并讨论在处理系统数据库的备份和还原操作时必须注意的内容。
    还原和恢复概述 (SQL Server) 介绍恢复模式如何影响还原操作。 如果对数据库的恢复模式如何影响还原过程有疑问,则应查看此问题。
    使数据库在其他服务器上可用时管理元数据 移动数据库时应注意的各种注意事项,或者遇到影响登录名、加密、复制、权限等的任何问题。
    使用事务日志备份 介绍有关如何在完整和大容量日志恢复模式下备份和还原(应用)事务日志的概念。 介绍如何对事务日志(日志备份)进行例行备份以恢复数据。
    目标为 Microsoft Azure 的 SQL Server 托管备份 介绍托管备份和关联的过程。