手动备份Azure DevOps Server
Azure DevOps Server 2022 | Azure DevOps Server 2020 | Azure DevOps Server 2019
可以使用SQL Server提供的工具手动备份Azure DevOps Server的数据。 但是,如果部署存在阻止使用这些工具的安全限制,则可能需要手动配置备份。
若要手动备份 Azure DevOps,请备份部署使用的所有数据库,并将备份同步到同一时间点。 如果使用标记的事务,则可以最有效地管理这种同步。 如果定期标记 Azure DevOps 使用的每个数据库中的相关事务,则会在这些数据库中建立一系列通用恢复点。 如果您定期备份这些数据库,则可以降低因设备故障或其他意外事件导致的效率降低或数据丢失风险。
警告
不应手动修改任何Azure DevOps Server数据库,除非Microsoft 支持部门指示你这样做,或者你正在按照本文档中所述的过程进行操作。 任何其他修改都可能使你的服务协议失效。
本文中的过程介绍了如何创建维护计划来执行数据库的完整备份或增量备份,以及如何为标记的事务创建表和存储过程。 要实现最大程度的数据保护,应安排每天或每周运行完整备份,并安排每小时运行增量备份。 还可以备份事务日志。 有关详细信息,请参阅备份事务日志 (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 配置工具备份加密密钥,请执行以下操作:
在运行Reporting Services的服务器上,依次选择“开始”、“所有程序”、“Microsoft SQL Server”、“配置工具”,然后选择“Reporting Services Configuration Manager”。
此时会打开“ 报表服务器安装实例选择 ”对话框。
输入数据层服务器和数据库实例的名称,然后选择“ 连接”。
在左侧导航栏中,选择“ 加密密钥”,然后选择“ 备份”。
此时会打开“ 加密密钥信息 ”对话框。
在 “文件位置”中,指定要存储此密钥副本的位置。
应考虑在运行 Reporting Services 的计算机之外的单独计算机上存储此密钥。
在 “密码”中,输入文件的密码。
在 “确认密码”中,重新输入文件的密码。
选择“确定” 。
标识数据库
在开始之前,请确定需要备份的所有数据库才能完全还原部署。 这包括用于SQL Server Reporting Services的数据库。 这些数据库可能位于同一台服务器上,或者您可将数据库分布在多台服务器上。 有关Azure DevOps Server数据库的完整表和说明(包括数据库的默认名称),请参阅了解Azure DevOps Server数据库、部署拓扑和备份。
标识数据库
打开SQL Server Management Studio并连接到数据库引擎。
在 SQL Server Management Studio 对象资源管理器 中,展开服务器的名称,然后展开“数据库”。
检查数据库列表并标识部署使用的数据库。
例如,Fabrikam, Inc.的Azure DevOps Server部署是单服务器配置,它使用以下数据库:
- 配置数据库 (Tfs_Configuration)
- 集合数据库 (Tfs_DefaultCollection)
- 数据仓库的数据库 (Tfs_Warehouse)
- 报告数据库(ReportServer 和 ReportServerTempDB)
在数据库中创建表
若要确保所有数据库均还原到同一点,可以在每个数据库中创建一个表以标记事务。 使用 SQL Server Management Studio 中的 Query 函数在每个数据库中创建相应的表。
创建表以标记相关事务
打开SQL Server Management Studio并连接到数据库引擎。
在“SQL Server Management Studio”中,突出显示服务器的名称,打开子菜单,然后选择“新建查询”。
将打开“数据库引擎查询编辑器”窗口。
在“查询”菜单中,选择“SQLCMD 模式”。
查询编辑器将在其上下文中执行 sqlcmd 语句。 如果未显示“查询”菜单,请在“数据库引擎查询编辑器”窗口中选择新查询中的任意位置。
在“SQL 编辑器”工具栏上,打开“可用数据库”列表,然后选择“TFS_Configuration”。
注意
TFS_Configuration 是配置数据库的默认名称。 此名称可自定义,因此可能会有所不同。
在查询窗口中,输入以下脚本以在配置数据库中创建表:
Use Tfs_Configuration Create Table Tbl_TransactionLogMark ( logmark int ) GO Insert into Tbl_TransactionLogMark (logmark) Values (1) GO
按 F5 运行脚本。
如果脚本正确,则消息“ (1 行 () affected.) ”将显示在查询编辑器中。
(可选)保存脚本。
对部署Azure DevOps Server中的每个数据库重复步骤 4?7。 在示例 Fabrikam, Inc. 部署中,将对以下所有数据库重复此过程:
- Tfs_Warehouse
- Tfs_DefaultCollection
- ReportServer
- ReportServerTempDB
创建用于标记表的存储过程
在要备份的每个数据库中创建表后,必须创建一个用于标记表的过程。
在 SQL Server Management Studio 中,打开查询窗口,并确保 SQLCMD 模式已打开。
在“SQL 编辑器”工具栏上,打开“可用数据库”列表,然后选择“TFS_Configuration”。
在查询窗口中,输入以下脚本以创建一个用于在配置数据库中标记事务的存储过程:
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
按 F5 运行该过程。
如果过程正确,则消息“命令 () 成功完成”。显示在查询编辑器中。
(可选)保存该过程。
对每个Azure DevOps Server数据库重复步骤 2?5。 在 Fabrikam, Inc. 部署中,将对以下所有数据库重复此过程:
- Tfs_Warehouse
- Tfs_DefaultCollection
- ReportServer
- ReportServerTempDB
提示
在创建过程之前,请从 对象资源管理器 中的“可用数据库”列表中选择关联的数据库的名称。 否则,在运行脚本时,将看到一个错误,指出存储过程已存在。
创建用于一次性标记所有表的存储过程
若要确保所有数据库都已标记,可以创建一个过程,该过程将运行刚刚创建的所有过程来标记表。 与上述过程不同的是,此过程仅在配置数据库中运行。
在“SQL Server Management Studio”中,打开查询窗口,并确保 SQLCMD 模式已打开。
在“SQL 编辑器”工具栏上,打开“可用数据库”列表,然后选择“TFS_Configuration”。
在查询窗口中,创建一个存储过程,用于执行在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
按 F5 运行该过程。
注意
如果创建用于标记事务的存储过程后尚未重启SQL Server Management Studio,则一个或多个红色波浪线可能会下划服务器名称和数据库的名称。 但是,该过程仍应该运行。
如果过程正确,查询编辑器中会显示消息“命令 () 成功完成”。
(可选)保存该过程。
创建用于自动标记表的存储过程
创建一个将运行所有存储过程进行表标记的过程后,可以创建一个过程,以使用相同的事务标记标记所有表。 你将使用此标记将所有数据库还原到同一点。
在“SQL Server Management Studio”中,打开查询窗口,并确保 SQLCMD 模式已打开。
在“SQL 编辑器”工具栏上,打开“可用数据库”列表,然后选择“TFS_Configuration”。
在查询窗口中,输入以下脚本以将表标记为“TFSMark”:
EXEC sp_SetTransactionLogMarkAll 'TFSMark' GO
注意
TFSMark 是一个标记示例。 您可以在标记中使用任何支持的字母和数字序列。 如果数据库中有多个标记的表,请记录还原数据库所使用的标记。 有关详细信息,请参阅 使用标记的事务。
按 F5 运行该过程。
如果过程正确,查询编辑器中会显示消息“ (1 行 () 受影响的) ”。 WITH MARK 选项仅适用于每个已标记的表的首个“BEGIN TRAN WITH MARK”语句。
保存该过程。
创建用于运行标记表过程的计划作业
创建并存储所有这些过程后,请将表标记过程安排在数据库的计划备份之前运行。 应将此作业安排在数据库维护计划运行前大约一分钟运行。
在“对象资源管理器”中,展开SQL Server 代理,打开“作业”菜单,然后选择“新建作业”。
此时会打开 “新建作业” 窗口。
在 “名称”中,指定作业的名称。 例如,可以在作业名称中输入 MarkTableJob 。
(可选) 在“说明”中指定作业的说明。
在 “选择页面”中,选择“ 步骤 ”,然后选择“ 新建”。
此时会打开 “新建作业步骤 ”窗口。
在 “步骤名称”中,指定步骤的名称。
在 “数据库”中,选择配置数据库的名称。 例如,如果部署使用该数据库的默认名称,TFS_Configuration,请从下拉列表中选择该数据库。
选择“ 打开”,浏览到为标记表而创建的过程,选择“ 打开 ”两次,然后选择“ 确定”。
注意
为标记表创建的过程将执行以下步骤:
EXEC sp_SetTransactionLogMarkAll 'TFSMark'
在 “选择页面”中,选择“ 计划”,然后选择“ 新建”。
此时会打开 “新建作业计划” 窗口。
在 “名称”中,指定计划的名称。
在 “频率”中,更改频率以匹配将创建的用于备份数据库的计划。 例如,可以在每天凌晨 2 点运行增量备份,在周日凌晨 4 点运行完整备份。 若要为增量备份标记数据库,请将 “发生” 值更改为“ 每日”。 创建另一个作业以标记数据库进行每周完整备份时,将值保留为“每日发生”,然后选择“星期日检查”框。
在 “每日频率”中,更改发生次数,以便作业计划在数据库备份前一分钟运行,然后选择“ 确定”。 在示例部署中,在增量备份的作业中,需要指定凌晨 1:59。 在完整备份的作业中,需要指定凌晨 3:59。
在 “新建作业”中,选择“ 确定 ”以完成计划作业的创建。
为完整备份创建维护计划
创建用于标记数据库的计划作业后,可以使用维护计划向导来计划部署Azure DevOps Server使用的所有数据库的完整备份。
重要
如果部署使用的是企业版或数据中心版SQL Server,但可能需要将数据库还原到运行标准版的服务器,则必须使用在禁用SQL Server压缩的情况下创建的备份集。 除非禁用数据压缩,否则无法将企业版或 Datacenter 版数据库还原到运行标准版的服务器。 在创建维护计划之前,应禁用压缩。 若要关闭压缩,请按照此 Microsoft 知识库文章中的步骤操作。
在“SQL Server Management Studio”中,展开“管理”节点,打开“维护计划”子菜单,然后选择“维护计划向导”。
在“SQL Server维护计划向导”的欢迎页上,选择“下一步”。
此时将显示 “选择计划属性” 页。
在“ 名称 ”框中,指定维护计划的名称。
例如,你可以为名为 TfsFullDataBackup 的完整备份创建计划。
为整个计划选择“单个计划”或“无计划”,然后选择“更改”。
在 “频率 ”和“ 每日频率”下,指定计划的选项。 例如,可以在 “频率”中指定每周备份以在星期日进行,并指定凌晨 4 点。在 “每日频率”中。
在 “持续时间”下,保留默认值“ 无结束日期”。 选择“确定”,然后选择“下一步”。
在“选择维护任务”页上,选择“备份数据库 (完整) ”、“执行SQL Server 代理作业”和“备份数据库 (事务日志) 检查”框,然后选择“下一步”。
在 “选择维护任务顺序” 页上,更改顺序,以便先运行完整备份,然后运行代理作业,再运行事务日志备份,然后选择“ 下一步”。
有关此对话框的详细信息,请按 F1,另请参阅 维护计划向导。
在 “定义备份数据库 (完整) 任务” 页上,选择向下箭头,选择“ 所有数据库”,然后选择“ 确定”。
根据部署和资源,指定用于将文件保存到磁盘或磁带的备份选项,然后选择“ 下一步”。
在“定义执行SQL Server 代理作业任务”页上,选择为表标记创建的计划作业的检查框,然后选择“下一步”。
在 “定义备份数据库 (事务日志) 任务 ”页上,选择向下箭头,选择“ 所有数据库”,然后选择“ 确定”。
指定用于根据部署和资源将文件保存到磁盘或磁带的备份选项,然后选择“ 下一步”。
在 “选择报表选项” 页上,指定报表分发选项,然后选择“ 下一步 ”两次。
在 “完成向导” 页上,选择“ 完成”。
SQL Server创建维护计划,并根据指定的频率备份指定的数据库。
为差异备份创建维护计划
使用维护计划向导为部署Azure DevOps Server使用的所有数据库计划差异备份。
重要
SQL Server Express不包括维护计划向导。 必须手动为差异备份计划编写脚本。 有关详细信息,请参阅 (Transact-SQL) 创建差异数据库备份 。
登录到运行包含要备份的数据库的 SQL Server 实例的服务器。
打开 SQL Server Management Studio 。
在 “服务器类型 ”列表中,选择“ 数据库引擎”。
在 “服务器名称” 和 “身份验证 ”列表中,选择相应的服务器和身份验证方案。
如果 SQL Server 实例需要它,请在“用户名”和“密码”中指定相应帐户的凭据。
选择“连接”。
在“SQL Server Management Studio”中,展开“管理”节点,打开子菜单,选择“维护计划”,然后选择“维护计划向导”。
在“SQL Server维护计划向导”的欢迎页上,选择“下一步”。
在 “选择计划属性” 页上的“ 名称 ”框中,指定维护计划的名称。
例如,可以命名差异备份 TfsDifferentialBackup 的计划。
为整个计划选择“单个计划”或“无计划”,然后选择“更改”。
在 “频率 ”和“ 每日频率”下,指定备份计划的选项。
在 “持续时间”下,保留默认值“ 无结束日期”。 选择“确定”,然后选择“下一步”。
在“选择维护任务”页上,选择“备份数据库 (差异) 检查”框,然后选择“下一步”。
在 “定义备份数据库 (差异) 任务 ”页上,选择向下箭头,选择“ 所有数据库”,然后选择“ 确定”。
指定用于根据部署和资源将文件保存到磁盘或磁带的备份选项,然后选择“ 下一步”。
在 “选择报表选项” 页上,指定报表分发选项,然后选择“ 下一步 ”两次。
在 “完成向导” 页上,选择“ 完成”。
SQL Server创建维护计划,并根据指定的频率备份指定的数据库。
为事务日志创建维护计划
可以使用维护计划向导为部署Azure DevOps Server使用的所有数据库计划事务日志备份。
重要
SQL Server Express不包括维护计划向导。 必须手动为事务日志备份计划编写脚本。 有关详细信息,请参阅 创建事务日志备份 (Transact-SQL) 。
登录到运行包含要备份的数据库的 SQL Server 实例的服务器。
打开 SQL Server Management Studio 。
在 “服务器类型 ”列表中,选择“ 数据库引擎”。
在 “服务器名称” 和 “身份验证 ”列表中,选择相应的服务器和身份验证方案。
如果 SQL Server 实例需要它,请在“用户名”和“密码”中指定相应帐户的凭据。
选择“连接”。
在“SQL Server Management Studio”中,展开“管理”节点,打开子菜单,选择“维护计划”,然后选择“维护计划向导”。
在“SQL Server维护计划向导”的欢迎页上,选择“下一步”。
此时将显示 “选择计划属性” 页。
在“ 名称 ”框中,指定维护计划的名称。
例如,可以命名用于备份事务日志 TfsTransactionLogBackup 的计划。
为整个计划选择“单个计划”或“无计划”,然后选择“更改”。
在 “频率 ”和“ 每日频率”下,指定计划的选项。
在 “持续时间”下,保留默认值“ 无结束日期”。
选择“确定”,然后选择“下一步”。
在“选择维护任务”页上,选择“执行SQL Server 代理作业”和“备份数据库 (事务日志) 检查”框,然后选择“下一步”。
在 “选择维护任务顺序” 页上,更改顺序,使代理作业在事务日志备份之前运行,然后选择“ 下一步”。
有关此对话框的详细信息,请按 F1,另请参阅 维护计划向导。
在“定义执行SQL Server 代理作业任务”页上,选择为表标记创建的计划作业的检查框,然后选择“下一步”。
在 “定义备份数据库 (事务日志) 任务 ”页上,选择向下箭头,选择“ 所有数据库”,然后选择“ 确定”。
指定用于根据部署和资源将文件保存到磁盘或磁带的备份选项,然后选择“ 下一步”。
在 “选择报表选项” 页上,指定报表分发选项,然后选择“ 下一步 ”两次。
在 “完成向导” 页上,选择“ 完成”。
SQL Server创建维护计划,并根据所选频率备份指定数据库的事务日志。
备份Reporting Services的加密密钥
您必须将 Reporting Service 的加密密钥作为系统备份过程的一部分进行备份。 没有此加密密钥,您将无法还原报告数据。 对于 Azure DevOps Server 的单服务器部署,可以使用 Reporting Services 配置工具备份SQL Server Reporting Services的加密密钥。 还可以选择使用 RSKEYMGMT 命令行工具,但配置工具更简单。 有关详细信息,请参阅 RSKEYMGMT 实用工具。
在运行Reporting Services的服务器上,打开Reporting Services Configuration Manager。
此时会打开“ 报表服务器安装实例选择 ”对话框。
指定数据层服务器和数据库实例的名称,然后选择“ 连接”。
在左侧导航栏中,选择“ 加密密钥”,然后选择“ 备份”。
此时会打开“ 加密密钥信息 ”对话框。
在 “文件位置”中,指定要存储此密钥副本的位置。
应考虑在运行 Reporting Services 的计算机之外的单独计算机上存储此密钥。
在 “密码”中,指定文件的密码。
在 “确认密码”中,再次指定文件的密码,然后选择“ 确定”。