本主题是一篇教程,介绍如何将 SQL Server 托管备份配置为Microsoft Azure,以便参与 AlwaysOn 可用性组的数据库。
可用性组配置
SQL Server 托管备份到 Microsoft Azure 适用于可用性组数据库,无论副本是在本地全部配置、完全在 Azure 上配置,还是在本地与一个或多个 Azure 虚拟机之间进行混合配置。 但是,对于一个或多个实现,可能需要考虑以下事项:
日志备份频率:日志备份的频率由时间间隔和日志增长量共同决定。 例如,日志备份每 2 小时执行一次,除非两小时内使用的日志空间为 5 MB 或更多。 这适用于所有实现、本地、云或混合。
网络带宽:这适用于副本位于不同物理位置(例如混合云中)或仅限云配置中不同 Azure 区域的实现。 网络带宽可能会影响辅助数据库延迟,如果辅助数据库设置为同步复制,则这可能会导致主数据库上的日志增长。 如果将辅助数据库设置为同步复制,则由于网络延迟,辅助数据库可能无法跟上,这可能会在故障转移到辅助副本时导致数据丢失。
将 SQL Server 受管理备份配置为 Microsoft Azure 可用性数据库。
权限:
要求数据库角色db_backupoperator的成员身份,并拥有ALTER ANY CREDENTIAL权限,以及对
EXECUTE存储过程的权限。需要对 smart_admin.fn_get_current_xevent_settings函数具有 SELECT 权限。
需要对
EXECUTE存储过程具备 权限。 此外,它还需要VIEW SERVER STATE权限,因为它在内部调用需要此权限的其他系统对象。需要权限
EXECUTE,才能访问smart_admin.sp_set_instance_backup和smart_admin.sp_backup_master_switch存储过程。
以下是将 AlwaysOn 可用性组与 SQL Server 托管备份到 Microsoft Azure 的基本步骤。 本主题后面将介绍详细的分步教程。
创建可用性组后,配置首选备份副本。 SQL Server 托管备份到 Microsoft Azure 也使用可用性组的此设置来确定用于备份的副本。 有关如何设置备份首选项的分步说明,请参阅在可用性副本上配置备份(SQL Server)。 如果要创建新的 AlwaysOn 可用性组,请参阅 AlwaysOn 可用性组(SQL Server)入门。
配置对次要副本的只读连接访问权限。 有关如何配置只读访问的分步说明,请参阅 在可用性副本上配置 Read-Only 访问(SQL Server)
指定备份副本。 SQL Server 托管备份到 Microsoft Azure 使用首选备份副本设置,以确定哪个数据库用于计划备份。 若要确定当前副本是否为首选备份副本,请使用 sys.fn_hadr_backup_is_preferred_replica (Transact-SQL) 函数。
在每个副本上运行 SQL Server 托管备份到 Microsoft Azure,通过使用 smart-admin.sp_set_db_backup 存储过程为数据库配置。
SQL Server 托管备份到 Microsoft Azure 的故障转移后行为:在故障转移事件后,SQL Server 托管备份到 Microsoft Azure 将继续运行,并维护备份副本的可用性和系统的可恢复性。 故障转移后不需要执行任何特定操作。
注意事项和要求:
为参与 AlwaysOn 可用性组的数据库配置 SQL Server 托管备份到 Microsoft Azure 需要特别的注意事项和要求。 下面是注意事项和要求的列表:
在所有参与同一可用性组的 SQL Server 节点上,所有数据库的 SQL Server 托管备份到 Microsoft Azure 的配置设置应保持一致。 可以通过将相同的 SQL Server 托管备份设置为Microsoft数据库级别的主副本和所有副本的 Azure 配置,或者将相同的默认 SQL Server 托管备份设置为Microsoft参与可用性组的所有节点上的 Azure 设置来实现此目的。 我们建议在数据库级别将 SQL Server 托管备份配置为 Microsoft Azure,因为在数据库级别进行配置可让你将设置隔离到各个数据库,对默认设置的更改会影响实例中的所有其他数据库。
指定备份副本。 SQL Server 使用首选备份副本设置,通过管理备份到 Microsoft Azure 来计划备份。 若要确定当前副本是否为首选备份副本,请使用 sys.fn_hadr_backup_is_preferred_replica (Transact-SQL) 函数。
如果将辅助副本配置为首选副本,则应将其配置为至少具有只读连接访问权限。 不支持对辅助数据库没有连接访问权限的可用性组。 有关详细信息,请参阅配置对可用性副本的只读访问 (SQL Server)。
如果在配置可用性组后将 SQL Server 托管备份配置为 Microsoft Azure,SQL Server 托管备份到 Microsoft Azure 将尝试复制任何现有的备份并将其复制到存储容器。 如果 SQL Server 托管备份到 Microsoft Azure 无法找到或访问现有备份文件,它将安排一次全数据库备份。 这是专门为优化可用性组数据库的备份作而完成的。
如果要创建新的可用性数据库,并且不打算将实例级别设置应用于数据库,则可能需要考虑禁用实例级别设置
使用加密时,对所有副本使用相同的证书。 这有助于在故障转移或还原到其他副本的情况下,备份作业继续进行并保持不间断。
为可用性数据库启用和配置 SQL Server 托管备份至 Microsoft Azure
本教程介绍了在 Node1 和 Node2 上为数据库(AGTestDB)启用和配置 SQL Server 托管备份到 Microsoft Azure 的步骤,然后介绍如何启用监视 SQL Server 托管备份到 Microsoft Azure 的健康状态。
创建 Azure 存储帐户: 备份存储在 Azure Blob 存储服务中。 如果还没有 Azure 存储帐户,必须先创建一个。 有关详细信息,请参阅 创建 Azure 存储帐户。 记下存储帐户的名称、访问密钥和存储帐户的 URL。 存储帐户名称和访问密钥信息用于创建 SQL 凭据。 SQL Server 托管备份在备份操作期间使用 SQL 凭据连接到 Microsoft Azure,以便验证存储帐户的身份。
创建 SQL 凭据: 使用存储帐户的名称作为标识和存储访问密钥作为密码创建 SQL 凭据。
确保 SQL Server 代理服务已启动并运行: 启动 SQL Server 代理(如果当前未运行)。 要使用 SQL Server 管理备份到 Microsoft Azure,必须确保 SQL Server 代理正在实例上运行以执行备份操作。 你可能希望将 SQL 代理设置为自动运行,以确保可以定期执行备份作。
确定保留期: 确定备份文件的保留期。 保留期以天为单位指定,范围为 1 到 30。 保留期确定数据库的可恢复性时间范围。
创建用于备份过程中加密的证书或非对称密钥: 在第一个节点 Node1 上创建证书,然后使用 BACKUP CERTIFICATE(Transact-SQL)将其导出到文件。 在节点 2 上,使用从节点 1 导出的文件创建证书。 有关从文件创建证书的详细信息,请参阅 CREATE CERTIFICATE(Transact-SQL)中的示例。
在 Node1 上启用并配置 SQL Server 托管备份到 Microsoft Azure,适用于 AGTestDB: 启动 SQL Server Management Studio,并连接到安装了可用性数据库的 Node1 上的实例。 在根据要求修改数据库名称、存储 URL、SQL 凭据和保留期的值后,在查询窗口中运行以下语句:
Use msdb; GO EXEC smart_admin.sp_set_db_backup @database_name='AGTestDB' ,@retention_days=30 ,@credential_name='MyCredential' ,@encryption_algorithm ='AES_128' ,@encryptor_type= 'Certificate' ,@encryptor_name='MyBackupCert' ,@enable_backup=1; GO有关创建用于加密的证书的详细信息,请参阅“创建加密备份”中的“创建备份证书”步骤。
启用和配置 SQL Server 托管备份到 Microsoft Azure,以用于 AGTestDB 在 Node2 上: 启动 SQL Server Management Studio 并连接到安装了可用性数据库的 Node2 上的实例。 在根据要求修改数据库名称、存储 URL、SQL 凭据和保留期的值后,在查询窗口中运行以下语句:
Use msdb; GO EXEC smart_admin.sp_set_db_backup @database_name='AGTestDB' ,@retention_days=30 ,@credential_name='MyCredential' ,@encryption_algorithm ='AES_128' ,@encryptor_type= 'Certificate' ,@encryptor_name='MyBackupCert' ,@enable_backup=1; GOSQL Server 托管备份到 Microsoft Azure 现已在指定的数据库上启用。 数据库上的备份作可能需要长达 15 分钟才能开始运行。 备份将会在首选的备份副本上进行。
查看扩展事件默认配置: 通过在 SQL Server 托管备份到 Microsoft Azure 的副本上运行以下 transact-SQL 语句来查看扩展事件配置。 这通常是数据库所属的可用性组的首选备份副本设置。
SELECT * FROM smart_admin.fn_get_current_xevent_settings();应会看到管理员、作和分析通道事件默认处于启用状态,并且无法禁用。 这应该足以监视需要手动干预的事件。 可以启用调试事件,但这些通道包括 SQL Server 托管备份到 Microsoft Azure 用来检测问题并解决这些问题的信息和调试事件。 有关更多的信息,请参阅 监控 Azure 上的 SQL Server 托管备份。
启用和配置运行状况通知: SQL Server 托管备份到 Microsoft Azure 包含一个存储过程,它用于创建代理作业,以发送可能需要关注的错误或警告的电子邮件通知。 若要接收此类通知,必须运行启用创建 SQL Server 代理作业的存储过程。 以下步骤介绍了启用和配置电子邮件通知的过程:
设置数据库邮件(如果尚未在实例上启用)。 有关详细信息,请参阅 配置数据库邮件。
将 SQL Server 代理通知配置为使用数据库邮件。 有关详细信息,请参阅 配置 SQL Server 代理邮件以使用数据库邮件。
启用电子邮件通知以接收备份错误和警告: 在查询窗口中,运行以下 Transact-SQL 语句:
EXEC msdb.smart_admin.sp_set_parameter @parameter_name = 'SSMBackup2WANotificationEmailIds', @parameter_value = '<email>'有关详细信息和完整的示例脚本,请参阅 监视到 Azure 的 SQL Server 托管备份。
在 Azure 存储帐户中查看备份文件: 从 SQL Server Management Studio 或 Azure 管理门户连接到存储帐户。 你将看到一个容器,其中的 SQL Server 实例托管的数据库已配置为使用 SQL Server 托管备份至 Microsoft Azure。 在为数据库启用 SQL Server 托管备份Microsoft Azure 后,还可以在 15 分钟内看到数据库和日志备份。
监视运行状况: 可以通过之前配置的电子邮件通知进行监视,也可以主动监视记录的事件。 下面是用于查看事件的一些示例 Transact-SQL 语句:
-- view all admin events Use msdb; Go DECLARE @startofweek datetime DECLARE @endofweek datetime SET @startofweek = DATEADD(Day, 1-DATEPART(WEEKDAY, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) SET @endofweek = DATEADD(Day, 7-DATEPART(WEEKDAY, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) DECLARE @eventresult TABLE (event_type nvarchar(512), event varchar (512), timestamp datetime ) INSERT INTO @eventresult EXEC smart_admin.sp_get_backup_diagnostics @begin_time = @startofweek, @end_time = @endofweek SELECT * from @eventresult WHERE event_type LIKE '%admin%'-- to enable debug events Use msdb; Go EXEC smart_admin.sp_set_parameter 'FileRetentionDebugXevent', 'True'-- View all events in the current week Use msdb; Go DECLARE @startofweek datetime DECLARE @endofweek datetime SET @startofweek = DATEADD(Day, 1-DATEPART(WEEKDAY, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) SET @endofweek = DATEADD(Day, 7-DATEPART(WEEKDAY, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) EXEC smart_admin.sp_get_backup_diagnostics @begin_time = @startofweek, @end_time = @endofweek;
本部分中介绍的步骤专门用于在数据库上首次将 SQL Server 托管备份配置为Microsoft Azure。 可以使用与 smart_admin.sp_set_db_backup 相同的系统存储过程修改现有配置,并提供新值。 有关详细信息,请参阅 SQL Server 托管备份到 Azure - 保留和存储设置。
从 AlwaysOn 可用性组配置中删除数据库时的注意事项
如果数据库已从 AlwaysOn 可用性组配置中删除,并且现在是独立数据库,建议使用 smart_admin.sp_backup_on_demand (Transact-SQL)执行备份。 以这种方式创建数据库备份时,它会建立一个新的备份链,文件将放置在实例特定的容器中,而不再存储于数据库作为可用性组时所在的可用性容器中。
警告
在此方案中,无法保证数据库在可用性组状态更改之前的备份中的可恢复性。