ALTER DATABASE (Transact-SQL) SET HADR

适用于:SQL Server

本主题包含与在辅助数据库中设置 Always On 可用性组选项有关的 ALTER DATABASE 语法。 每个 ALTER DATABASE 语句只允许使用一个 SET HADR 选项。 只有辅助副本支持这些选项。

Transact-SQL 语法约定

语法

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

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

自变量

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

SET HADR
对指定的数据库执行指定的 Always On 可用性组命令。

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

group_name
在针对由 group_name 指定的可用性组执行命令的服务器实例所托管的次要副本上,加入指定的数据库。

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

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

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

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

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

    注意

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

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

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

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

重要

若要从可用性组中完全删除可用性数据库,请连接到承载主副本的服务器实例,并使用 ALTER AVAILABILITY GROUPgroup_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)
更改可用性组 (Transact-SQL)
CREATE AVAILABILITY GROUP (Transact-SQL)(创建可用性组 (Transact-SQL))
Always On 可用性组概述 (SQL Server)对 Always On 可用性组配置进行故障排除 (SQL Server)