为可用性组设置针对 Azure 的 SQL Server 托管备份

本主题是有关如何为参与 AlwaysOn 可用性组的数据库配置 microsoft Azure SQL Server托管备份的教程。

可用性组配置

SQL Server可用性组数据库支持托管备份到 Microsoft Azure,无论副本是全部在本地配置,还是完全在 Azure 上配置,还是在本地与一个或多个 Azure 虚拟机之间混合实现。 不过,对于一个或多个实现,可能需要考虑以下方面:

  • 日志备份频率:日志备份频率是时间和日志增长。 例如,日志每两小时备份一次,除非两小时内使用的日志空间为 5 MB 或更多。 这适用于所有实现,包括本地、云或混合实现。

  • 网络带宽:这适用于副本位于不同物理位置(例如混合云中)或跨仅限云配置的不同 Azure 区域的实现。 如果副本设置为同步复制,网络带宽会影响副本的滞后时间,这又可能导致主副本的日志增长。 如果副本设置为同步复制,由于网络滞后时间,副本可能无法保持同步,这在故障转移到辅助副本时可能导致数据丢失。

为可用性数据库配置SQL Server托管备份到 Microsoft Azure。

权限:

  • 需要db_backupoperator数据库角色的成员身份,具有 ALTER ANY CREDENTIAL 权限,以及EXECUTEsp_delete_backuphistory存储过程的权限。

  • 需要对 smart_admin.fn_get_current_xevent_settings函数拥有 SELECT 权限。

  • EXECUTE需要对 smart_admin.sp_get_backup_diagnostics 存储过程的权限。 此外,它还需要 VIEW SERVER STATE 权限,因为它在内部调用其他需要此权限的系统对象。

  • 需要对 EXECUTEsmart_admin.sp_set_instance_backupsmart_admin.sp_backup_master_switch 存储过程具有权限。

以下是设置具有 Microsoft Azure SQL Server托管备份的 AlwaysOn 可用性组的基本步骤。 本主题后面将介绍详细的分步教程。

  1. 创建可用性组后,配置首选备份副本。 SQL Server托管备份到 Microsoft Azure 时,也使用可用性组的此设置来确定要用于备份的副本 (replica) 。 有关如何设置备份首选项的分步说明,请参阅在可用性副本上配置备份 (SQL Server) 。 如果要创建新的 AlwaysOn 可用性组,请参阅使用 AlwaysOn 可用性组入门 (SQL Server)

  2. 配置对辅助副本的只读连接访问。 有关如何配置只读访问权限的分步说明,请参阅在可用性副本上配置Read-Only访问权限 (SQL Server)

  3. 指定备份副本。 首选备份副本 (replica) 设置由 microsoft Azure SQL Server托管备份来确定要用于计划备份的数据库。 若要确定当前副本 (replica) 是否是首选备份副本 (replica) ,请使用 sys.fn_hadr_backup_is_preferred_replica (Transact-SQL) 函数。

  4. 在每个副本 (replica) 使用智能admin.sp_set_db_backup存储过程为数据库运行SQL Server Microsoft Azure 托管备份配置。

    故障转移后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 可以隔离数据库的设置,而对默认设置的更改会影响实例上的所有其他数据库。

  • 指定备份副本。 将首选备份副本 (replica) 设置用于将托管备份SQL Server Microsoft Azure 来计划备份。 若要确定当前副本 (replica) 是否是首选备份副本 (replica) ,请使用 sys.fn_hadr_backup_is_preferred_replica (Transact-SQL) 函数。

  • 如果将辅助副本配置为首选副本,则至少应为它配置只读连接访问权限。 不支持对辅助数据库没有连接访问权限的可用性组。 有关详细信息,请参阅配置对可用性副本的只读访问 (SQL Server)

  • 如果在配置可用性组后配置SQL Server托管备份到 Microsoft Azure,SQL Server Microsoft Azure 托管备份将尝试复制任何基于现有备份并将其复制到存储容器。 如果SQL Server Microsoft Azure 托管备份找不到或访问现有备份,它将计划完整数据库备份。 这是为了优化可用性组数据库的备份操作而专门进行的。

  • 如果要创建新的可用性数据库,并且不打算将实例级别设置应用于数据库,则可能需要考虑禁用实例级别设置

  • 当使用加密时,对所有副本使用相同的证书。 这有助于在故障转移或还原到不同副本时保持连续不间断的备份操作。

为可用性数据库启用和配置 Microsoft Azure SQL Server托管备份

本教程介绍在 Node1 和 Node2 上为数据库 (AGTestDB) 启用和配置SQL Server托管备份到 Microsoft Azure 的步骤,然后是启用监视 Microsoft Azure SQL Server托管备份运行状况的步骤。

  1. 创建 Azure 存储帐户: 备份存储在 Azure Blob 存储服务中。 如果还没有 Azure 存储帐户,必须先创建一个。 有关详细信息,请参阅 创建 Azure 存储帐户。 记录下存储帐户的名称、访问密钥和存储帐户的 URL。 存储帐户名称和访问密钥用于创建 SQL 凭据。 SQL 凭据由在备份操作期间SQL Server托管备份到 Microsoft Azure 以向存储帐户进行身份验证。

  2. 创建 SQL 凭据: 使用存储帐户的名称作为标识,存储访问密钥作为密码创建 SQL 凭据。

  3. 确保 SQL Server 代理服务已启动且正在运行: 如果 SQL Server 代理当前未运行,请启动它。 Microsoft Azure 的 SQL Server 托管备份 需要实例上运行有 SQL Server 代理才能执行备份操作。 可能要将 SQL 代理设置为自动运行以确保可正常进行备份操作。

  4. 确定保留期: 确定备份文件的保留期。 以天为单位指定保持期,范围可为 1 到 30。 保持期决定了可恢复数据库的时段。

  5. 创建在备份期间用于加密的证书或非对称密钥: 在第一个节点 Node1 上创建证书,然后使用 BACKUP CERTIFICATE (Transact-SQL) 将其导出到文件。 在 Node 2 上,使用从 Node 1 导出的文件创建证书。 有关从文件创建证书的详细信息,请参阅 CREATE CERTIFICATE (Transact-SQL) 中的示例。

  6. 在 Node1 上为 AGTestDB 启用和配置SQL Server托管备份到 Microsoft Azure:启动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  
    

    有关为加密创建证书的详细信息,请参阅 创建加密备份 中的 创建备份证书步骤。

  7. 在 Node2 上为 AGTestDB 启用和配置SQL Server托管备份到 Microsoft Azure:启动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;  
    GO  
    

    Microsoft Azure 的 SQL Server 托管备份 。 数据库上的备份操作最多可能需要 15 分钟才能运行。 备份将在首选备份副本上进行。

  8. 查看扩展事件默认配置:查看扩展事件配置,方法是在SQL Server Microsoft Azure 托管备份用于计划备份的副本 (replica) 上运行以下 transact-SQL 语句。 这通常是数据库所属可用性组的首选备份副本设置。

    SELECT * FROM smart_admin.fn_get_current_xevent_settings(); 
    

    你应会看到,默认情况下,管理员、操作和分析通道事件处于启用状态,并且无法禁用。 这对于需要手动干预的事件来说应当已经足够。 可以启用调试事件,但这些通道包括信息和调试事件,这些事件SQL Server Microsoft Azure 托管备份用于检测和解决问题。 有关详细信息,请参阅监视SQL Server Azure 托管备份

  9. 启用和配置运行状况通知: Microsoft Azure 的 SQL Server 托管备份 有一个存储过程,它创建代理作业以发出可能需要注意的错误或警告的电子邮件通知。 若要接收此类通知,必须允许运行这个创建 SQL Server 代理作业的存储过程。 以下步骤说明了启用和配置电子邮件通知的过程:

    1. 如果尚未在此实例上启用数据库邮件,请进行设置。 有关详细信息,请参阅 Configure Database Mail

    2. 将 SQL Server 代理通知配置为使用数据库邮件。 有关详细信息,请参阅 Configure SQL Server Agent Mail to Use Database Mail

    3. 启用电子邮件通知以接收备份错误和警告: 在查询窗口中,运行以下 Transact-SQL 语句:

      EXEC msdb.smart_admin.sp_set_parameter  
      @parameter_name = 'SSMBackup2WANotificationEmailIds',  
      @parameter_value = '<email>'  
      

      有关详细信息和完整示例脚本,请参阅监视SQL Server托管备份到 Azure

  10. 查看 Azure 存储帐户中的备份文件:从 SQL Server Management Studio 或 Azure 管理门户连接到存储帐户。 你将看到SQL Server实例的容器,该容器托管配置为使用 SQL Server Microsoft Azure 托管备份的数据库。 在为数据库启用SQL Server Microsoft Azure 托管备份后,还可能会在 15 分钟内看到数据库和日志备份。

  11. 监视运行状况: 可以通过之前配置的电子邮件通知进行监视,也可以主动监视记录的事件。 以下是一些用于查看事件的示例 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;  
    

本节中描述的步骤是专门用于在数据库上首次配置 Microsoft Azure 的 SQL Server 托管备份 。 可以使用与 smart_admin.sp_set_db_backup 相同的系统存储过程修改现有配置,并提供新值。 有关详细信息,请参阅SQL Server托管备份到 Azure - 保留和存储设置

从 AlwaysOn 可用性组删除数据库时的注意事项

如果数据库已从 AlwaysOn 可用性组配置中删除,并且现在是独立数据库,我们建议使用 smart_admin.sp_backup_on_demand (Transact-SQL) 执行备份。 以这种方式创建数据库备份时,它会建立一个新的备份链,并且文件将放置在特定于实例的容器中,而不是在数据库是可用性组一部分时存储备份的可用性容器中。

警告

无法保证在可用性组状态更改之前可在此场景下从备份恢复数据库。