数据库、部署拓扑和备份

Azure DevOps Server 2022 | Azure DevOps Server 2020 | Azure DevOps Server 2019

可以通过为 Azure DevOps Server 所依赖的数据库创建定期备份,帮助保护部署免受数据丢失的影响。 若要完全还原 Azure DevOps Server 部署,请先备份所有 Azure DevOps Server 数据库。

如果部署包括 SQL Server Reporting Services,则还必须备份 Azure DevOps 在这些组件中使用的数据库。 若要防止同步错误或数据不匹配错误,必须将所有备份同步到同一时间戳。 确保成功同步的最简单方法是使用标记的事务。 通过定期标记每个数据库中的相关事务,可以在数据库中建立一系列常见的恢复点。 有关备份使用报告的单服务器部署的分步指南,请参阅 创建备份计划和计划

备份数据库

通过创建数据库备份来保护 Azure DevOps 部署免受数据丢失的影响。 下表和随附的插图显示了要备份的数据库,并提供了如何在部署中物理分布这些数据库的示例。

数据库类型 产品 所需的组件?
配置数据库 Azure DevOps Server
仓库数据库 Azure DevOps Server
项目集合数据库 Azure DevOps Server
报告数据库 SQL Server Reporting Services
分析数据库 SQL Server Analysis Services

部署拓扑

根据部署配置,需要备份的所有数据库可能位于同一物理服务器上,如此示例拓扑所示。

注意

此示例不包括 Reporting Services 或 SharePoint 产品,因此您不必备份与报表、分析或 SharePoint 产品关联的任何数据库。

简单的 Azure DevOps Server 数据库结构

或者,数据库可能分布在多个服务器和服务器场中。 在此示例拓扑中,必须备份以下数据库,这些数据库跨六个服务器或服务器场进行缩放:

  • 配置数据库

  • 仓库数据库

  • 位于 SQL Server 群集上的项目集合数据库

  • 位于运行 SQL Server 的独立服务器上的集合数据库

  • 位于运行 Reporting Services 的服务器上的数据库

  • 位于运行 Analysis Services 的服务器上的数据库

  • SharePoint 产品管理数据库和两个 SharePoint Web 应用程序的网站集数据库

    如果 SharePoint 数据库跨多个服务器进行缩放,则无法使用计划备份功能来备份这些数据库。 必须手动配置这些数据库的备份,并确保这些备份与 Azure DevOps Server 数据库备份同步。 有关详细信息,请参阅手动备份 Azure DevOps Server

复杂的 Azure DevOps Server 数据库结构

在这两个示例中,无需备份连接到服务器的任何客户端。 但是,可能需要在客户端计算机上手动清除 Azure DevOps Server 的缓存,然后才能重新连接到还原的部署。

要备份的数据库

以下列表提供了有关必须备份的内容的其他详细信息,具体取决于部署资源。

重要

以下列表中的所有数据库都是 SQL Server 数据库。 尽管可以随时使用 SQL Server Management Studio 备份单个数据库,但应尽可能避免使用此类单个备份。 如果从单个备份还原,则可能会遇到意外结果,因为 Azure DevOps 使用的数据库都是相关的。 如果只备份一个数据库,该数据库中的数据可能不会与其他数据库中的数据同步。

  • Azure DevOps Server 的数据库 - Azure DevOps Server 的逻辑数据层包括多个 SQL Server 数据库,包括配置数据库、仓库数据库和部署中每个项目集合的数据库。 这些数据库可能都位于同一服务器上,分布在同一 SQL Server 部署中的多个实例中,或分布在多个服务器上。 无论其物理分布如何,都必须将所有数据库备份到同一时间戳,以帮助确保防止数据丢失。 可以使用在特定时间或时间间隔运行的维护计划手动或自动执行数据库备份。

    重要

    Azure DevOps 数据库列表不是静态的。 每次创建集合时都会创建新数据库。 创建集合时,请确保将该集合的数据库添加到维护计划。

  • Reporting Services 和 Analysis Services 的数据库 - 如果部署使用 SQL Server Reporting Services 或 SQL Server Analysis Services 为 Azure DevOps Server 生成报表,则必须备份报告和分析数据库。 但是,还原后仍必须重新生成某些数据库,例如仓库。
  • 报表服务器 的加密密钥 - 报表服务器具有必须备份的加密密钥。 此密钥可保护存储在报表服务器数据库中的敏感信息。 可以使用 Reporting Services 配置工具或命令行工具手动备份此密钥。

备份的高级准备

部署 Azure DevOps 时,应保留所创建的帐户的记录以及指定的任何计算机名称、密码和设置选项。 还应在安全位置保留所有恢复材料、文档和数据库和事务日志备份的副本。 若要防范灾难(如火灾或地震),应将服务器备份的副本保存在与服务器位置不同的位置。 此策略有助于防止丢失关键数据。 最佳做法是,应保留备份介质的三个副本,并且应在受控环境中至少保留一个副本。

重要

定期执行试用数据还原,以验证文件是否已正确备份。 试用还原可能会显示未显示仅软件验证的硬件问题。

备份和还原数据库时,必须使用网络地址(例如,作为网络驱动器共享的磁带和磁盘)将数据备份到媒体上。 备份计划应包括用于管理媒体的预配,例如以下策略:

  • 用于存储和回收备份集的跟踪和管理计划。
  • 覆盖备份介质的计划。
  • 在多服务器环境中,决定使用集中式备份或分布式备份。
  • 跟踪媒体的有用生活的方法。
  • 最小化备份集或备份介质丢失的影响的过程(例如磁带)。
  • 决定将备份集存储在现场或异地,并分析此决定如何影响恢复时间。

由于 Azure DevOps 数据存储在 SQL Server 数据库中,因此无需备份安装了 Azure DevOps 客户端的计算机。 如果发生涉及这些计算机的媒体故障或灾难,可以重新安装客户端软件并重新连接到服务器。 通过重新安装客户端软件,你的用户将拥有更简洁、更可靠的替代方法,用于从备份还原客户端计算机。

可以使用 可用的计划备份 功能,或者在 SQL Server 中手动创建维护计划来备份与 Azure DevOps 部署相关的数据库来备份服务器。 Azure DevOps 数据库与其他数据库合作,如果创建手动计划,则应同时备份和还原它们。 有关备份数据库的策略的详细信息,请参阅 备份和还原 SQL Server 数据库

备份类型

了解可用的备份类型有助于确定用于备份部署的最佳选项。 例如,如果使用的是大型部署,并且想要在有效使用有限的存储资源的同时防止数据丢失,则可以配置差异备份以及完整数据备份。 如果使用 SQL Server Always On,则可以备份辅助数据库。 还可以尝试使用备份压缩或跨多个文件拆分备份。 下面是备份选项的简要说明:

完整数据备份(数据库)

部署的可恢复性需要完整数据库备份。 完整备份包括事务日志的一部分,以便可以恢复完整备份。 完整备份是自包含的,它们表示备份时存在的整个数据库。 有关详细信息,请参阅 完整数据库备份

差异数据备份(数据库)

差异数据库备份仅记录自上次完整数据库备份以来已更改的数据,称为差异基础。 差异数据库备份比完整数据库备份更小、更快。 此选项可节省备份时间,代价是复杂性增加。 对于大型数据库,差异备份的间隔可能比数据库备份短,从而减少工作丢失风险。 有关详细信息,请参阅 差异数据库备份

还应定期备份事务日志。 使用完整数据库备份模型时,需要这些备份来恢复数据。 如果备份事务日志,可以将数据库恢复到故障点或更早的时间点。

事务日志备份

事务日志是数据库中发生的所有修改的串行记录,除了执行每个修改的事务外。 事务日志记录每个事务的开始时间、对数据的更改,并在必要时记录足够的信息来撤消在该事务期间所做的修改。 日志随着数据库中的记录操作而持续增长。

通过备份事务日志,可以将数据库恢复到较早的时间点。 例如,可以在输入不需要的数据或发生故障之前将数据库还原到某个点。 除了数据库备份,事务日志备份还必须是恢复策略的一部分。 有关详细信息,请参阅事务日志备份 (SQL Server)

事务日志备份通常使用的资源比完整备份少。 因此,可以比完整备份更频繁地创建事务日志备份,从而降低丢失数据的风险。 但是,有时事务日志备份大于完整备份。 例如,事务速率较高的数据库会导致事务日志快速增长。 在这种情况下,应更频繁地创建事务日志备份。 有关详细信息,请参阅解决事务日志已满的问题(SQL Server 错误 9002)

可以执行以下类型的事务日志备份:

  • 纯日志备份仅包含时间间隔的事务日志记录,无需进行任何批量更改。
  • 大容量日志备份包含批量操作更改的日志和数据页。 不允许执行时间点恢复。
  • 从可能损坏的数据库获取尾日志备份,以捕获尚未备份的日志记录。 在发生故障以防止工作丢失并可能包含纯日志或大容量日志数据后,将执行结尾日志备份。

由于数据同步对于成功还原 Azure DevOps Server 至关重要,因此在手动配置备份时,应使用标记的事务作为备份策略的一部分。 有关详细信息,请参阅创建备份计划和计划和手动备份 Azure DevOps Server

应用程序层服务备份

逻辑应用程序层所需的唯一备份是 Reporting Services 的加密密钥。 如果使用计划备份功能备份部署,此密钥将作为计划的一部分进行备份。 你可能假设必须备份用作项目门户的网站。

尽管可以比数据层更轻松地备份应用程序层,但还原应用程序层仍需执行几个步骤。 必须为 Azure DevOps Server 安装另一个应用程序层,重定向项目集合以使用新的应用程序层,并重定向项目的门户网站。

默认数据库名称

如果不自定义数据库的名称,可以使用下表标识部署 Azure DevOps Server 中使用的数据库。 如前所述,并非所有部署都具有所有这些数据库。 例如,如果未使用 Reporting Services 配置 Azure DevOps Server,则不会具有 ReportServer 或 ReportServerTempDB 数据库。 同样,除非将 Azure DevOps Server 配置为支持实验室管理,否则不会有 System Center Virtual Machine Manager(SCVMM)、VirtualManagerDB 的数据库。 此外,Azure DevOps Server 使用的数据库可能分布在多个 SQL Server 实例或多个服务器之间。

注意

默认情况下,前缀 TFS_ 添加到安装 Azure DevOps Server 或运行时自动创建的任何数据库的名称。

数据库 说明
TFS_Configuration Azure DevOps Server 的配置数据库包含部署的目录、服务器名称和配置数据。 此数据库的名称可能包括TFS_配置之间的其他字符,例如安装 Azure DevOps Server 的人员的用户名。 例如,数据库的名称可能TFS_UserNameConfiguration
TFS_Warehouse 仓库数据库包含用于生成 Reporting Services 使用的仓库的数据。 此数据库的名称可能包括TFS_Warehouse 之间的其他字符,例如安装 Azure DevOps Server 的人员的用户名。 例如,数据库的名称可能TFS_UserNameWarehouse。
TFS_CollectionName 项目集合的数据库包含该集合中项目的所有数据。 此数据包括源代码、生成配置和实验室管理配置。 集合数据库数等于集合数。 例如,如果在部署中有三个集合,则必须备份这三个集合数据库。 每个数据库的名称可能包含TFS_CollectionName 之间的其他字符,例如创建集合的人员的用户名。 例如,集合数据库的名称可能TFS_UserNameCollectionName。
TFS_Analysis SQL Server Analysis Services 的数据库包含用于部署 Azure DevOps Server 的数据源和多维数据集。 此数据库的名称可能包括TFS_和分析之间的其他字符,例如安装 Analysis Services 的人员的用户名。 例如,数据库的名称可能TFS_UserNameAnalysis。
注意:可以备份此数据库,但必须从还原的TFS_Warehouse数据库重新生成仓库。
ReportServer Reporting Services 数据库包含用于部署 Azure DevOps Server 的报表和报表设置。
注意:如果 Reporting Services 安装在与 Azure DevOps Server 分开的服务器上,则 Azure DevOps Server 的数据层服务器上可能不存在此数据库。 在这种情况下,必须配置、备份和还原它与 Azure DevOps Server 分开。 应同步数据库的维护,以避免同步错误。
ReportServerTempDB Reporting Services 的临时数据库在运行特定报表时临时存储信息。
注意:如果 Reporting Services 安装在与 Azure DevOps Server 不同的服务器上,则 Azure DevOps Server 的数据层服务器上可能不存在此数据库。 在这种情况下,必须独立于 Azure DevOps Server 配置、备份和还原它。 但是,应同步数据库的维护,以避免同步错误。
VirtualManagerDB SCVMM 的管理数据库包含你在 SCVMM 管理员控制台中查看的信息,例如虚拟机、虚拟机主机、虚拟机库服务器及其属性。
注意:如果 SCVMM 安装在与 Azure DevOps Server 不同的服务器上,则 Azure DevOps Server 的数据层服务器上可能不存在此数据库。 在这种情况下,必须配置、备份和还原它与 Azure DevOps Server 分开。 但是,应使用标记的事务并同步数据库的维护,以避免同步错误。