手动备份 Azure DevOps Server

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

可以使用 SQL Server 提供的工具手动备份 Azure DevOps Server 的数据。 但是,如果部署具有阻止使用这些工具的安全限制,则可能需要手动配置备份。

若要手动备份 Azure DevOps,请备份部署使用的所有数据库,并将备份同步到同一时间点。 如果使用标记的事务,则可以最有效地管理此同步。 如果定期标记 Azure DevOps 使用的每个数据库中的相关事务,可以在这些数据库中建立一系列常见恢复点。 如果定期备份这些数据库,则降低因设备故障或其他意外事件而失去工作效率或数据的风险。

警告

除非Microsoft支持部门指示你这样做,否则不应手动修改任何 Azure DevOps Server 数据库,否则应遵循本文档中所述的过程。 任何其他修改都可能使服务协议失效。

本文中的过程介绍如何创建维护计划,以执行数据库的完整备份或增量备份,以及如何为标记的事务创建表和存储过程。 为了获得最大的数据保护,应计划每天或每周运行完整备份,并按小时运行增量备份。 还可以备份事务日志。 有关详细信息,请参阅备份事务日志(SQL Server)。

注释

本文中的许多过程都指定了 SQL Server Management Studio 的使用。 如果安装了 SQL Server Express Edition,则必须使用 SQL Server Management Studio Express。 有关详细信息,请参阅 下载 SQL Server Management Studio (SSMS)

先决条件

必须是以下所有组的成员:

  • 运行 Azure DevOps Server 管理控制台的服务器上的 管理员 安全组。
  • SQL Server 系统管理员安全组。 或者,必须在托管要备份的数据库的每个 SQL Server 实例上将 SQL Server 执行备份和创建维护计划 权限设置为 “允许 ”。 

备份 Reporting Services 加密密钥

如果部署使用 SQL Server Reporting Services,则必须不仅备份数据库,还必须备份加密密钥。

对于 Azure DevOps Server 的单服务器部署,可以通过以下两种方式之一备份 SQL Server Reporting Services 的加密密钥。 可以使用 Reporting Services 配置工具,也可以使用 SQL Server 提供的 RSKEYMGMT 命令行工具。 对于多服务器或群集部署,必须使用 RSKEYMGMT。 有关 RSKEYMGMT 的详细信息,请参阅 RSKEYMGMT 实用工具

有关如何备份加密密钥的详细信息,请参阅管理(Reporting Services)。 有关如何还原加密密钥的详细信息,请参阅还原加密密钥(Reporting Services 配置)。

先决条件

若要执行此过程,你必须是 本地管理员 组的成员,该组在 Reporting Services 中具有 内容管理器 的角色,或者必须将 “管理报表服务器”安全 权限设置为 “允许”。

备份加密密钥

若要使用 Reporting Services 配置工具备份加密密钥,请执行以下步骤:

  1. 在运行 Reporting Services 的服务器上,依次选择“ 开始”、“ 所有程序”、“ Microsoft SQL Server”、“ Configuration Tools”,然后选择“ Reporting Services Configuration Manager”。

    此时会打开 “报表服务器安装实例选择 ”对话框。

  2. 输入数据层服务器和数据库实例的名称,然后选择“ 连接”。

  3. 在左侧导航栏中,选择 “加密密钥”,然后选择“ 备份”。

    此时会打开 “加密密钥信息 ”对话框。

  4. “文件位置”中,指定要存储此密钥副本的位置。

    您应该考虑将此密钥存储在与运行 Reporting Services 的计算机不同的单独计算机上。

  5. “密码”中,输入文件的密码。

  6. “确认密码”中,重新输入文件的密码。

  7. 选择“确定”

标识数据库

在开始之前,请确定需要备份的所有数据库才能完全还原部署。 这包括 SQL Server Reporting Services 的数据库。 这些数据库可能位于同一台服务器上,或者数据库分布在多个服务器上。 有关 Azure DevOps Server 数据库的完整表和说明,包括数据库的默认名称,请参阅 了解 Azure DevOps Server 数据库、部署拓扑和备份

标识数据库

  1. 打开 SQL Server Management Studio 并连接到数据库引擎。

  2. SQL Server Management Studio 的“对象资源管理器”中,展开服务器的名称,然后展开 “数据库”。

  3. 查看数据库列表,并确定部署所使用的数据库。

    例如,Fabrikam, Inc.的 Azure DevOps Server 部署是单服务器配置,它使用以下数据库:

    • 配置数据库 (Tfs_Configuration)
    • 集合数据库(Tfs_DefaultCollection)
    • 数据仓库的数据库(Tfs_Warehouse)
    • 报告数据库(ReportServer 和 ReportServerTempDB)

在数据库中创建表

若要确保所有数据库都还原到同一点,可以在每个数据库中创建一个表来标记事务。 使用 SQL Server Management Studio 中的 Query 函数在每个数据库中创建相应的表。

  1. 打开 SQL Server Management Studio 并连接到数据库引擎。

  2. SQL Server Management Studio 中,突出显示服务器的名称,打开子菜单,然后选择“ 新建查询”。

    此时会打开“数据库引擎查询编辑器”窗口。

  3. 在“查询”菜单中,选择“SQLCMD 模式”。

    查询编辑器在查询编辑器的上下文中执行 sqlcmd 语句。 如果未显示“查询”菜单,请在 “数据库引擎查询编辑器” 窗口中选择新查询中的任意位置。

  4. SQL 编辑器 工具栏上,打开 “可用数据库” 列表,然后选择 TFS_Configuration

    注释

    TFS_Configuration是配置数据库的默认名称。 此名称是可自定义的,可能有所不同。

  5. 在查询窗口中,输入以下脚本以在配置数据库中创建表:

        Use Tfs_Configuration
    Create Table Tbl_TransactionLogMark
    (
    logmark int
    )
    GO
    Insert into Tbl_TransactionLogMark (logmark) Values (1)
    GO
    
  6. F5 运行脚本。

    如果脚本正确,查询编辑器中会显示消息“(1 行受影响)”。

  7. (可选)保存脚本。

  8. 对部署 Azure DevOps Server 中的每个数据库重复步骤 4~7。 在 Fabrikam, Inc. 部署示例中,将针对以下所有数据库重复此过程:

    • Tfs_Warehouse
    • Tfs_DefaultCollection
    • ReportServer
    • ReportServerTempDB

创建用于标记表的存储过程

在要备份的每个数据库中创建表后,必须创建用于标记表的过程。

  1. SQL Server Management Studio 中,打开查询窗口,并确保打开 SQLCMD 模式

  2. SQL 编辑器 工具栏上,打开 “可用数据库” 列表,然后选择 TFS_Configuration

  3. 在查询窗口中,输入以下脚本以创建存储过程以标记配置数据库中的事务:

        Create PROCEDURE sp_SetTransactionLogMark
    @name nvarchar (128)
    AS
    BEGIN TRANSACTION @name WITH MARK
    UPDATE Tfs_Configuration.dbo.Tbl_TransactionLogMark SET logmark = 1
    COMMIT TRANSACTION
    GO
    
  4. F5 运行该过程。

    如果过程正确,则查询编辑器中会显示消息“Command(s)已完成”。

  5. (可选)保存步骤。

  6. 对每个 Azure DevOps Server 数据库重复步骤 2~5。  在 Fabrikam, Inc. 部署中,将针对以下所有数据库重复此过程:

    • Tfs_Warehouse
    • Tfs_默认集合
    • 报告服务器
    • ReportServerTempDB

    小提示

    在创建过程之前,请从对象资源管理器中的 “可用数据库 ”列表中选择关联的数据库的名称。 否则,当你运行脚本时,会看到一个错误信息,提示存储过程已存在。

创建一个存储过程,用于同时标记所有表

若要确保所有数据库都标记,可以创建一个过程,该过程将反过来运行刚刚创建的所有过程来标记表。 与前面的过程不同,此过程仅在配置数据库中运行。

  1. SQL Server Management Studio 中,打开查询窗口,并确保打开 SQLCMD 模式

  2. SQL 编辑器 工具栏上,打开 “可用数据库” 列表,然后选择 TFS_Configuration

  3. 在查询窗口中,创建一个存储过程,用于执行在 Azure DevOps Server 使用的每个数据库中创建的存储过程。 将 ServerName 替换为运行 SQL Server 的服务器的名称,并将 Tfs_CollectionName 替换为每个项目集合的数据库名称。

    在示例部署中,服务器的名称为 FABRIKAMPRIME,部署中只有一个项目集合,这是在安装 Azure DevOps Server(DefaultCollection)时创建的默认项目集合。 考虑到这一点,你将创建以下脚本:

        CREATE PROCEDURE sp_SetTransactionLogMarkAll
    @name nvarchar (128)
    AS
    BEGIN TRANSACTION
    EXEC [FABRIKAMPRIME].Tfs_Configuration.dbo.sp_SetTransactionLogMark @name
    EXEC [FABRIKAMPRIME].ReportServer.dbo.sp_SetTransactionLogMark @name
    EXEC [FABRIKAMPRIME].ReportServerTempDB.dbo.sp_SetTransactionLogMark @name
    EXEC [FABRIKAMPRIME].Tfs_DefaultCollection.dbo.sp_SetTransactionLogMark @name
    EXEC [FABRIKAMPRIME].Tfs_Warehouse.dbo.sp_SetTransactionLogMark @name
    COMMIT TRANSACTION
    GO
    
  4. F5 运行该过程。

    注释

    如果由于创建用于标记事务的存储过程而未重启 SQL Server Management Studio,则一个或多个红色波浪线可能会下划线服务器的名称和数据库的名称。 但是,该过程仍应运行。

    如果过程正确,查询编辑器中会显示消息“命令已成功完成”。

  5. (可选)保存此步骤。

创建存储过程以自动标记表

有了一个将运行所有存储过程进行表标记的过程后,可以创建一个过程,以使用相同的事务标记标记标记所有表。 使用此标记将所有数据库还原到同一点。

  1. SQL Server Management Studio 中,打开查询窗口,并确保打开 SQLCMD 模式

  2. SQL 编辑器 工具栏上,打开 “可用数据库” 列表,然后选择 TFS_Configuration

  3. 在查询窗口中,输入以下脚本以使用“TFSMark”标记表:

    EXEC sp_SetTransactionLogMarkAll 'TFSMark'
    GO
    

    注释

    TFSMark 是标记的示例。 可以在标记中使用任何受支持的字母和数字序列。 如果数据库中有多个标记表,请记录用于还原数据库的标记。 有关详细信息,请参阅 使用标记的事务

  4. F5 运行该过程。

    如果过程正确,会在查询编辑器中显示消息“(影响 1 行)”。 WITH MARK 选项仅适用于已标记的每个表的第一个“BEGIN TRAN WITH MARK”语句。

  5. 保存程序。

创建计划作业以运行表标记过程

在创建并存储完这些过程后,请安排表标记过程及时在数据库的计划备份之前运行。 应在数据库维护计划运行前大约一分钟计划运行此作业。

  1. 在对象资源管理器中,展开 SQL Server 代理,打开 “作业 ”菜单,然后选择“ 新建作业”。

    此时会打开 “新建作业” 窗口。

  2. “名称”中,指定作业的名称。 例如,可以输入 MarkTableJob 以获取作业名称。

  3. (可选)在 “说明”中,指定作业的说明。

  4. “选择页面”中,选择“ 步骤 ”,然后选择“ 新建”。

    此时会打开 “新建作业步骤 ”窗口。

  5. “步骤名称”中,指定步骤的名称。

  6. “数据库”中,选择配置数据库的名称。 例如,如果部署使用该数据库的默认名称,TFS_Configuration,请从下拉列表中选择该数据库。

  7. 选择 “打开”,浏览到为标记表而创建的过程,选择“ 打开 两次”,然后选择“ 确定”。

    注释

    您创建的标记表的过程将运行以下步骤:

    EXEC sp_SetTransactionLogMarkAll 'TFSMark'
    
  8. “选择页面”中,选择“ 计划”,然后选择“ 新建”。

    此时会打开 “新建作业计划” 窗口。

  9. “名称”中,指定计划的名称。

  10. “频率”中,更改频率以匹配要为备份数据库而创建的计划。 例如,可以在凌晨 2 点每天运行增量备份,并在周日凌晨 4 点运行完整备份。 若要标记增量备份的数据库,需要将 “发生” 的值更改为 “每日”。 创建另一个作业以标记每周完整备份的数据库时,请保留“每日发生”的值,然后选择“星期日”复选框。

  11. 每日频率中,更改匹配项,以便作业计划在数据库备份前一分钟运行,然后选择“ 确定”。 在示例部署中,在增量备份的作业中,需要指定上午 1:59。 在进行完整备份的作业时,需要指定凌晨3:59。

  12. “新建作业”中,选择“ 确定 ”以完成计划作业的创建。

为完整备份创建维护计划

创建用于标记数据库的计划作业后,可以使用维护计划向导来计划部署 Azure DevOps Server 使用的所有数据库的完整备份。

重要

如果部署使用的是 SQL Server 企业版或数据中心版,但可能需要将数据库还原到运行标准版的服务器,则必须使用禁用 SQL Server 压缩的备份集。 除非禁用数据压缩,否则将无法将企业版或数据中心版数据库还原到运行 Standard 版的服务器。 在创建维护计划之前,应关闭压缩。 若要关闭压缩,请按照本 Microsoft知识库文章中的步骤作。

  1. SQL Server Management Studio 中,展开 “管理 ”节点,打开 “维护计划 ”子菜单,然后选择“ 维护计划向导”。

  2. SQL Server 维护计划向导的欢迎页上,选择“ 下一步”。

    此时会显示 “选择计划属性 ”页。

  3. “名称 ”框中,指定维护计划的名称。

    例如,可以创建名为 TfsFullDataBackup 的完整备份计划。

  4. 选择计划的统一时间表或无计划,然后选择更改

  5. “频率 ”和“ 每日频率”下,指定计划的选项。 例如,您可以在频率中指定每周备份在星期日进行,并在每日频率中指定凌晨 4 点。

    “持续时间”下,保留默认值“ 无结束日期”。 选择“确定”,然后选择“下一步”

  6. “选择维护任务 ”页上,选中“ 备份数据库”(完整)“执行 SQL Server 代理作业”和“ 备份数据库”(事务日志) 复选框,然后选择“ 下一步”。

  7. “选择维护任务顺序”页面上,调整顺序,使完整备份首先运行,然后运行代理作业,再然后运行事务日志备份,之后选择“下一步”。

    有关此对话框的详细信息,请按 F1,另请参阅 维护计划向导

  8. 在“ 定义备份数据库”(完整)“任务 页上,选择向下箭头,选择 ”所有数据库“,然后选择” 确定”。

  9. 根据部署和资源,指定用于将文件保存到磁盘或磁带的备份选项,然后选择“ 下一步”。

  10. 在“ 定义执行 SQL Server 代理作业任务” 页上,选中为表标记创建的计划作业的复选框,然后选择“ 下一步”。

  11. 在“ 定义备份数据库”(事务日志)任务 页上,选择向下箭头,选择 “所有数据库”,然后选择“ 确定”。

  12. 指定备份选项,以便根据部署和资源将文件保存到磁盘或磁带,然后选择“ 下一步”。

  13. “选择报表选项 ”页上,指定报表分发选项,然后选择“ 下一 步”两次。

  14. 在“ 完成向导 ”页上,选择“ 完成”。

    SQL Server 创建维护计划,并根据指定的频率备份指定的数据库。

为差异备份创建维护计划

使用维护计划向导为 Azure DevOps Server 部署使用的所有数据库计划差异备份。

重要

SQL Server Express 不包括维护计划向导。 必须手动编写差异备份的计划脚本。 有关详细信息,请参阅创建差异数据库备份(Transact-SQL)。

  1. 登录到运行包含要备份的数据库的 SQL Server 实例的服务器。

  2. 打开 SQL Server Management Studio

    1. “服务器类型 ”列表中,选择 “数据库引擎”。

    2. “服务器名称和身份验证”列表中,选择相应的服务器和身份验证方案。

    3. 如果 SQL Server 实例需要它,请在用户名和密码中指定相应帐户的凭据。

    4. 选择 连接

  3. SQL Server Management Studio 中,展开 “管理 ”节点,打开子菜单,选择“ 维护计划”,然后选择“ 维护计划向导”。

  4. SQL Server 维护计划向导的欢迎页上,选择“ 下一步”。

  5. “选择计划属性 ”页上的“ 名称 ”框中,指定维护计划的名称。

    例如,可以为差异备份 TfsDifferentialBackup 命名计划。

  6. 选择整个计划的单一计划或无计划,然后选择“更改”

  7. “频率 ”和“ 每日频率”下,指定备份计划的选项。

    “持续时间”下,保留默认值“ 无结束日期”。 选择“确定”,然后选择“下一步”

  8. “选择维护任务 ”页上,选中“ 备份数据库”(差异) 复选框,然后选择“ 下一步”。

  9. 在“ 定义备份数据库”(差异)“任务 页上,选择向下箭头,选择 ”所有数据库“,然后选择” 确定”。

  10. 指定备份选项,以便根据部署和资源将文件保存到磁盘或磁带,然后选择“ 下一步”。

  11. “选择报表选项 ”页上,指定报表分发选项,然后选择“ 下一 步”两次。

  12. 在“ 完成向导 ”页上,选择“ 完成”。

    SQL Server 创建维护计划,并根据指定的频率备份指定的数据库。

为事务日志创建维护计划

可以使用维护计划向导来计划部署 Azure DevOps Server 使用的所有数据库的事务日志备份。

重要

SQL Server Express 不包括维护计划向导。 必须手动编写事务日志备份计划脚本。 有关详细信息,请参阅创建事务日志备份(Transact-SQL)。

  1. 登录到运行包含要备份的数据库的 SQL Server 实例的服务器。

  2. 打开 SQL Server Management Studio

  3. “服务器类型 ”列表中,选择 “数据库引擎”。

    1. “服务器名称和身份验证”列表中,选择相应的服务器和身份验证方案。

    2. 如果 SQL Server 实例需要它,请在用户名和密码中指定相应帐户的凭据。

    3. 选择 连接

  4. SQL Server Management Studio 中,展开“管理”节点,打开子菜单,选择“维护计划”,然后选择“维护计划向导”。

  5. SQL Server 维护计划向导的欢迎页上,选择“ 下一步”。

    此时会显示 “选择计划属性 ”页。

  6. “名称 ”框中,指定维护计划的名称。

    例如,可以命名一个计划来备份事务日志 TfsTransactionLogBackup

  7. 选择整个计划的单个时间表或无时间表,然后选择“更改”

  8. “频率 ”和“ 每日频率”下,指定计划的选项。

    “持续时间”下,保留默认值“ 无结束日期”。

  9. 选择“确定”,然后选择“下一步”

  10. “选择维护任务 ”页上,选中“ 执行 SQL Server 代理作业备份数据库”(事务日志) 复选框,然后选择“ 下一步”。

  11. “选择维护任务订单 ”页上,更改订单,使代理作业在事务日志备份之前运行,然后选择“ 下一步”。

    有关此对话框的详细信息,请按 F1,另请参阅 维护计划向导

  12. 在“ 定义执行 SQL Server 代理作业任务” 页上,选中为表标记创建的计划作业的复选框,然后选择“ 下一步”。

  13. 在“ 定义备份数据库”(事务日志)任务 页上,选择向下箭头,选择 “所有数据库”,然后选择“ 确定”。

  14. 指定备份选项,以便根据部署和资源将文件保存到磁盘或磁带,然后选择“ 下一步”。

  15. “选择报表选项 ”页上,指定报表分发选项,然后选择“ 下一 步”两次。

  16. 在“ 完成向导 ”页上,选择“ 完成”。

    SQL Server 创建维护计划,并根据所选频率备份指定数据库的事务日志。

备份 Reporting Services 的加密密钥

在备份系统时,必须备份 Reporting Services 的加密密钥。 如果没有此加密密钥,将无法还原报告数据。 对于单服务器部署的 Azure DevOps Server,可以使用 Reporting Services 配置工具来备份 SQL Server Reporting Services 的加密密钥。 还可以选择使用 RSKEYMGMT 命令行工具,但配置工具更简单。 有关详细信息,请参阅 RSKEYMGMT 实用工具

  1. 在运行 Reporting Services 的服务器上,打开 Reporting Services Configuration Manager

    此时会打开 “报表服务器安装实例选择 ”对话框。

  2. 指定数据层服务器和数据库实例的名称,然后选择 “连接”。

  3. 在左侧导航栏中,选择 “加密密钥”,然后选择“ 备份”。

    此时会打开 “加密密钥信息 ”对话框。

  4. “文件位置”中,指定要存储此密钥副本的位置。

    应考虑将此密钥存储在与运行 Reporting Services 的计算机不同的计算机上。

  5. “密码”中,指定文件的密码。

  6. “确认密码”中,再次指定文件的密码,然后选择“ 确定”。