数据库、部署拓扑和备份

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 Web 应用程序的 SharePoint 产品管理数据库和网站集数据库

    如果 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 之间的其他字符,例如安装 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配置、备份和还原它。 但是,您应使用标记的事务并同步数据库的维护,以避免发生同步错误。