ALTER DATABASE SET HADR (Transact-SQL)

本主题包含用于对辅助数据库设置 AlwaysOn 可用性组 选项的 ALTER DATABASE 语法。每个 ALTER DATABASE 语句只允许一个 SET HADR 选项。 只有辅助副本支持这些选项。

主题链接图标 Transact-SQL 语法约定

语法

ALTER DATABASE database_name
   SET HADR 
   {
        { AVAILABILITY GROUP = group_name | OFF }
   | { SUSPEND | RESUME }
   }
;

参数

  • database_name
    要修改的辅助数据库的名称。

  • SET HADR
    在指定的数据库上执行指定的 AlwaysOn 可用性组 命令。

  • { AVAILABILITY GROUP **=**group_name | OFF }
    在指定的可用性组中加入或删除可用性数据库,如下所示:

    • group_name
      在您针对由 group_name 指定的可用性组执行命令的服务器实例所承载的辅助副本上,加入指定的数据库。

      此操作的前提条件如下所示:

      • 数据库必须已经添加到主副本上的可用性组中。

      • 主副本必须处于活动状态。 有关如何解决非活动主副本问题的信息,请参阅解决 AlwaysOn 可用性组配置问题 (SQL Server)

      • 主副本必须处于联机状态,辅助副本必须连接到主副本。

      • 必须已使用 WITH NORECOVERY 从主数据库的最新数据库和日志备份中还原了辅助数据库,并以足够新的日志备份结尾,以便允许辅助数据库赶上主数据库。

        注意注意

        若要将数据库添加到可用性组,请连接到承载主副本的服务器实例,并使用 ALTER AVAILABILITY GROUP group_name ADD DATABASE database_name 语句。

      有关详细信息,请参阅将辅助数据库联接到可用性组 (SQL Server)

    • OFF
      从可用性组中删除指定的辅助数据库。

      如果辅助数据库已远远落后于主数据库,并且您不想等待辅助数据库赶上主数据库,则删除辅助数据库可能有用。 在删除辅助数据库之后,可以通过用最新的日志备份(使用 RESTORE … WITH NORECOVERY)还原备份序列来更新此数据库。

      重要说明重要提示

      若要从可用性组中完全删除可用性数据库,请连接到承载主副本的服务器实例,并使用 ALTER AVAILABILITY GROUP group_name REMOVE DATABASE availability_database_name 语句。 有关详细信息,请参阅从可用性组中删除主数据库 (SQL Server)

  • SUSPEND
    挂起辅助数据库的数据移动。 SUSPEND 命令只要被承载目标数据库的副本接受后就返回,但是实际上挂起数据库以异步方式发生。

    影响的范围取决于您执行 ALTER DATABASE 语句的位置:

    • 如果您在辅助副本上挂起辅助数据库,则只挂起本地辅助数据库。 可读辅助副本上的现有连接会保持可用状态。 可读辅助副本上挂起数据库的新连接在数据移动恢复之前一直处于禁用状态。

    • 如果您在主副本上挂起数据库,则会在每个辅助副本上挂起将数据移到对应辅助数据库的过程。 可读辅助副本上的现有连接会保持可用状态,并且可以创建新连接。

    • 如果数据移动因强制性手动故障转移而挂起,则与新的辅助副本的连接会在数据移动挂起之后进入禁用状态。

    当挂起辅助副本上的数据库时,数据库和副本都变为未同步状态,并被标记为“未同步”。

    重要说明重要提示

    当挂起辅助数据库时,对应主数据库的发送队列将累积未发送的事务日志记录。 与辅助副本的连接将返回在数据移动挂起时可用的数据。

    注意注意

    挂起和恢复 AlwaysOn 辅助数据库并不直接影响主数据库的可用性,但挂起辅助数据库可能会在恢复已挂起的辅助数据库之前影响主数据库的冗余和故障转移功能。 这与数据库镜像相反,在数据库镜像中,在恢复镜像前镜像状态在镜像数据库和主数据库上都挂起。 挂起 AlwaysOn 主数据库将挂起所有相应辅助数据库上的数据移动,并且在恢复主数据库前针对该数据库的冗余和故障转移功能将停止。

    有关详细信息,请参阅挂起可用性数据库 (SQL Server)

  • RESUME
    在指定的辅助数据库上恢复挂起的数据移动。 RESUME 命令只要被承载目标数据库的副本接受后就返回,但是实际上继续数据库以异步方式发生。

    影响的范围取决于您执行 ALTER DATABASE 语句的位置:

    • 如果您在辅助副本上恢复辅助数据库,则只恢复本地辅助数据库。 除非数据库在主副本上也已暂停,否则将恢复数据移动。

    • 如果您在主副本上恢复数据库,则对尚未在本地挂起对应辅助数据库的每个辅助副本,将恢复数据移动。 若要恢复已在辅助副本上单独挂起的辅助数据库,请连接到承载辅助副本的服务器实例,然后在此恢复数据库。

      在同步提交模式下,数据库的状态更改为“正在同步”。 如果当前没有其他数据库被挂起,副本的状态也会更改为“正在同步”。

      有关详细信息,请参阅恢复可用性数据库 (SQL Server)

数据库状态

当辅助数据库加入可用性组后,本地辅助副本会将辅助数据库的状态从“正在还原”更改为“联机”。 当从可用性组中删除辅助数据库后,此数据库将由本地辅助副本设回为“正在还原”状态。 这使您能够将来自主数据库的后续日志备份应用于辅助数据库。

限制

在事务和批处理两者之外执行 ALTER DATABASE 语句。

安全性

权限

需要对数据库具有 ALTER 权限。 将数据库联接到可用性组要求具有 db_owner 固定服务器角色的成员身份。

示例

下面的示例将辅助数据库 AccountsDb1 联接到 AccountsAG 可用性组的本地辅助副本。

ALTER DATABASE AccountsDb1 SET HADR AVAILABILITY GROUP = AccountsAG;
注意注意

若要查看此 Transact-SQL 语句在上下文中使用的情况,请参阅创建可用性组 (Transact-SQL)

请参阅

参考

ALTER DATABASE (Transact-SQL)

ALTER AVAILABILITY GROUP (Transact-SQL)

CREATE AVAILABILITY GROUP (Transact-SQL)

概念

AlwaysOn 可用性组概述 (SQL Server)

解决 AlwaysOn 可用性组配置问题 (SQL Server)