当前位置:Gxlcms > 
数据库问题 > 
ALTER AVAILABILITY GROUP (Transact-SQL)
                     
                    
                        ALTER AVAILABILITY GROUP (Transact-SQL)
                        
                            时间:2021-07-01 10:21:17
                            帮助过:18人阅读
							                        
                     
                    
                    
                    
 
| 
 适用范围:SQL Server(SQL Server 2012 到当前版本)。                                         
 | 
 Transact-SQL 语法约定
                 语法                             
  
      
ALTER AVAILABILITY GROUP group_name 
  {
     SET ( <set_option_spec> ) 
   | ADD DATABASE database_name 
   | REMOVE DATABASE database_name
   | ADD REPLICA ON <add_replica_spec> 
   | MODIFY REPLICA ON <modify_replica_spec>
   | REMOVE REPLICA ON <server_instance>
   | JOIN
   | FAILOVER
   | FORCE_FAILOVER_ALLOW_DATA_LOSS   | ADD LISTENER ‘dns_name’ ( <add_listener_option> )
   | MODIFY LISTENER ‘dns_name’ ( <modify_listener_option> )
   | RESTART LISTENER ‘dns_name’
   | REMOVE LISTENER ‘dns_name’
   | OFFLINE
  }
[ ; ]
<set_option_spec> ::= 
    AUTOMATED_BACKUP_PREFERENCE = { PRIMARY | SECONDARY_ONLY| SECONDARY | NONE }
  | FAILURE_CONDITION_LEVEL  = { 1 | 2 | 3 | 4 | 5 } 
  | HEALTH_CHECK_TIMEOUT = milliseconds 
<server_instance> ::= 
 { ‘system_name[\instance_name]‘ | ‘FCI_network_name[\instance_name]‘ }
<add_replica_spec>::=
  <server_instance> WITH
    (
       ENDPOINT_URL = ‘TCP://system-address:port‘,
       AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT },
       FAILOVER_MODE = { AUTOMATIC | MANUAL }
       [ , <add_replica_option> [ ,...n ] ]
    ) 
  <add_replica_option>::=
       BACKUP_PRIORITY = n
     | SECONDARY_ROLE ( { 
          ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL } 
        | READ_ONLY_ROUTING_URL = ‘TCP://system-address:port‘ 
          } )
     | PRIMARY_ROLE ( { 
          ALLOW_CONNECTIONS = { READ_WRITE | ALL } 
        | READ_ONLY_ROUTING_LIST = { ( ‘<server_instance>’ [ ,...n ] ) | NONE } 
          } )
     | SESSION_TIMEOUT = seconds 
<modify_replica_spec>::=
  <server_instance> WITH
    (  
       ENDPOINT_URL = ‘TCP://system-address:port‘ 
     | AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT } 
     | FAILOVER_MODE = { AUTOMATIC | MANUAL } 
     | BACKUP_PRIORITY = n
     | SECONDARY_ROLE ( { 
          ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL } 
        | READ_ONLY_ROUTING_URL = ‘TCP://system-address:port‘ 
          } )
     | PRIMARY_ROLE ( { 
          ALLOW_CONNECTIONS = { READ_WRITE | ALL } 
        | READ_ONLY_ROUTING_LIST = { ( ‘<server_instance>’ [ ,...n ] ) | NONE } 
          } )
     | SESSION_TIMEOUT = seconds 
    )  
<add_listener_option> ::=
   {
      WITH DHCP [ ON ( <network_subnet_option> ) ]
    | WITH IP ( { ( <ip_address_option> ) } [ , ...n ] ) [ , PORT = listener_port ]
   }
  <network_subnet_option> ::=
     ‘four_part_ipv4_address’, ‘four_part_ipv4_mask’  
  <ip_address_option> ::=
     { 
        ‘four_part_ipv4_address’, ‘four_part_ipv4_mask’
      | ‘ipv6_address’
     }
<modify_listener_option>::=
    {
       ADD IP ( <ip_address_option> ) 
     | PORT = listener_port
    }
                 参数                             
- group_name        
 - 
指定新可用性组的名称。 group_name 必须是一个有效的 SQL Server 标识符,并且它必须在 WSFC 群集的所有可用性组中保持唯一。 
 - AUTOMATED_BACKUP_PREFERENCE = { PRIMARY | SECONDARY_ONLY| SECONDARY | NONE }  
 - 
指定在选择执行备份的位置时有关备份作业应该如何评估主副本的首选项。 您可以编写给定备份作业的脚本,以便纳入自动备份首选项。 SQL Server 不会强制执行首选项,因此它对即席备份没有影响,了解这一点很重要。 
仅在主副本上支持。     
这些值如下所示:     
- PRIMARY      
 - 
指定备份应该始终在主副本上发生。 如果您需要在对辅助副本运行备份时不支持的备份功能,例如创建差异备份,此选项将很有用。 
                  重要提示               | 
| 
 如果您计划使用日志传送为可用性组准备任何辅助数据库,请将自动备份首选项设置为“主要”,直到准备好所有辅助数据库并将其加入可用性组。                  
 | 
 - SECONDARY_ONLY      
 - 
指定备份应该永远不会在主副本上执行。 如果主副本是唯一的联机副本,则备份应不会发生。 
 - SECONDARY      
 - 
指定备份应在辅助副本上发生,但在主副本是唯一联机的副本时除外。 在该情况下,备份应在主副本上发生。 这是默认行为。 
 - NONE      
 - 
指定您希望在选择要执行备份的副本时备份作业将忽略可用性副本的角色。 请注意,备份作业可能评估其他因素,例如每个可用性副本的备份优先级及其操作状态和已连接状态。 
 
              重要提示           | 
| 
 没有强制的 AUTOMATED_BACKUP_PREFERENCE 设置。 对此首选项的解释依赖于您为给定可用性组中的数据库撰写作业脚本的逻辑(如果有)。 自动备份首选项设置对即席备份没有影响。 有关详细信息,请参阅配置可用性副本备份 (SQL Server)。  
 | 
              注意           | 
| 
 若要查看现有可用性组的自动备份首选项,请选择 sys.availability_groups 目录视图的 automated_backup_preference 或 automated_backup_preference_desc 列。 此外,sys.fn_hadr_backup_is_preferred_replica (Transact-SQL) 还可以用于确定首选备份副本。 此函数始终对至少一个副本返回 1(即使 AUTOMATED_BACKUP_PREFERENCE = NONE)。  
 | 
 - FAILURE_CONDITION_LEVEL = { 1 | 2 | 3 | 4 | 5 }  
 - 
指定将为此可用性组触发自动故障转移的失败条件。 FAILURE_CONDITION_LEVEL 在组级别设置,但仅针对为同步-提交可用性模式 (AVAILIBILITY_MODE = SYNCHRONOUS_COMMIT) 配置的可用性副本。 此外,只有在主副本和辅助副本均配置为自动故障转移模式 (FAILOVER_MODE = AUTOMATIC) 并且辅助副本当前与主副本同步的情况下,失败条件才可以触发自动故障转移。 
仅在主副本上支持。     
失败条件级别的范围 (1–5) 是从最少限制的级别 1 到最多限制的级别 5。 给定的条件级别包含所有限制较少的级别。 因此,最严格的条件级别 5 包含四个限制较少的级别 (1-4),级别 4 包含级别 1-3,依此类推。 下表介绍了与各级别相对应的失败条件。 
 
| 
 级别              
 | 
 失败条件              
 | 
| 
 1              
 | 
 指定在发生以下任何情况时应启动自动故障转移:              
 | 
| 
 2              
 | 
 指定在发生以下任何情况时应启动自动故障转移:              
 | 
| 
 3              
 | 
 指定在发生了严重的 SQL Server 内部错误(例如孤立的自旋锁、严重的写访问冲突或过多的转储)时应启动自动故障转移。              
这是默认行为。              
 | 
| 
 4              
 | 
 指定在发生了中等程度的 SQL Server 内部错误(例如在 SQL Server 内部资源池中出现持久的内存不足情况)时应启动自动故障转移。              
 | 
| 
 5              
 | 
 指定在出现任何符合的失败条件时应启动自动故障转移,这些失败条件包括:              
- 
SQL 引擎的工作线程耗尽。                  
 
- 
检测到无法解决的死锁。                  
 
 
 | 
              注意           | 
| 
 缺少 SQL Server 的实例对客户端请求的响应与可用性组无关。              
 | 
FAILURE_CONDITION_LEVEL 和 HEALTH_CHECK_TIMEOUT 值为给定组定义“灵活的故障转移策略”。 此灵活的故障转移策略向您提供对必须导致自动故障转移的条件的精确控制。 有关详细信息,请参阅针对可用性组的自动故障转移的灵活的故障转移策略 (SQL Server)。 
 - HEALTH_CHECK_TIMEOUT = milliseconds   
 - 
指定在 WSFC 群集假定服务器实例速度较慢或挂起前,等待 sp_server_diagnostics 系统存储过程返回服务器运行状况信息的等待时间(毫秒)。 HEALTH_CHECK_TIMEOUT 在组级别设置,但仅针对为具有自动故障转移的同步-提交可用性模式 (AVAILIBILITY_MODE = SYNCHRONOUS_COMMIT) 配置的可用性副本。 此外,只有在主副本和辅助副本均配置为自动故障转移模式 (FAILOVER_MODE = AUTOMATIC) 并且辅助副本当前与主副本同步的情况下,运行状况检查超时才可以触发自动故障转移。 
默认的 HEALTH_CHECK_TIMEOUT 值为 30000 毫秒(30 秒)。 最小值为 15000 毫秒(15 秒),最大值为 4294967295 毫秒。 
仅在主副本上支持。     
              重要提示           | 
| 
 sp_server_diagnostics 在数据库级别不执行运行状况检查。              
 | 
 - ADD DATABASE database_name   
 - 
指定要添加到可用性组的一个或多个用户数据库的列表。 这些数据库必须位于承载当前主副本的 SQL Server 实例上。 您可以为一个可用性组指定多个数据库,但每个数据库只能属于一个可用性组。 有关可用性组可支持的数据库类型的信息,请参阅针对 AlwaysOn 可用性组的先决条件、限制和建议 (SQL Server)。 若要找出已属于某个可用性组的本地数据库,请参阅 sys.databases 目录视图中的 replica_id 列。 
仅在主副本上支持。     
              注意           | 
| 
 在创建可用性组后,将需要连接到承载辅助副本的每个服务器实例,然后准备每个辅助数据库并将它们加入可用性组。 有关详细信息,请参阅启动 AlwaysOn 辅助数据库的数据移动 (SQL Server)。  
 | 
 - REMOVE DATABASE database_name   
 - 
从可用性组中删除指定的主数据库和相应的辅助数据库。 仅在主副本上支持。 
有关在从可用性组中删除可用性数据库之后推荐执行的后续任务的信息,请参阅从可用性组中删除主数据库 (SQL Server)。     
 - ADD REPLICA ON  
 - 
指定一到四个 SQL Server 实例以便在可用性组中承载辅助副本。 通过在每个副本的服务器实例地址后追加 WITH (…) 子句来指定每个副本。 
仅在主副本上支持。     
您需要将每个新的辅助副本联接到可用性组。 有关详细信息,请参阅本节后面对 JOIN 选项的说明。 
 - <server_instance>  
 - 
指定承载副本的 SQL Server 实例的地址。 地址格式依赖于该实例是默认实例还是命名实例以及它是独立实例还是故障转移群集实例 (FCI)。 语法如下: 
{ ‘system_name[\instance_name]‘ |‘FCI_network_name[\instance_name]‘ }
此地址由以下部分组成:     
- system_name                
 - 
SQL Server 的目标实例所在的计算机系统的 NetBIOS 名称。 此计算机必须是一个 WSFC 节点。 
 - FCI_network_name                
 - 
用于访问 SQL Server 故障转移群集的网络名称。 如果服务器实例作为 SQL Server 故障转移伙伴参与,则使用此名称。 在 FCI 服务器实例上执行 SELECT @@SERVERNAME 将返回其完整的 ‘FCI_network_name[\instance_name]‘ 字符串(即完整的副本名称)。 
 - instance_name                
 - 
由 system_name 或 FCI_network_name 承载且已启用 AlwaysOn 的 SQL Server 实例的名称。 对于默认服务器实例,instance_name 是可选的。 此实例名不区分大小写。 在独立服务器实例上,此值名称与执行 @@SERVERNAME 所返回的值相同。 
 - \      
 - 
仅在指定 instance_name 时才使用的分隔符,用来将该名称与 system_name 或 FCI_network_name 区分开来。         
 
有关 WSFC 节点和服务器实例的先决条件的信息,请参阅 针对 AlwaysOn 可用性组的先决条件、限制和建议 (SQL Server)。     
 - ENDPOINT_URL = ‘TCP://system-address:port‘   
 - 
指定 SQL Server 实例(该实例将承载您要添加或修改的可用性副本)的数据库镜像端点的 URL 路径。     
ENDPOINT_URL 在 ADD REPLICA ON 子句中是必需的,在 MODIFY REPLICA ON 子句中是可选的。 有关详细信息,请参阅在添加或修改可用性副本时指定端点 URL (SQL Server)。 
 - ‘TCP://system-address:port‘   
 - 
指定一个 URL,它用于指定端点 URL 或只读路由 URL。 URL 参数如下所示: 
- system-address                
 - 
一个字符串,例如系统名称、完全限定的域名或 IP 地址,它们明确标识了目标计算机系统。         
 - port                
 - 
是与服务器实例的镜像端点关联的端口号(对于 ENDPOINT_URL 选项)或服务器实例的数据库引擎使用的端口号(对于 READ_ONLY_ROUTING_URL 选项)。         
 
 - AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }  
 - 
指定在主副本可以在给定主数据库上提交事务前,是否必须等待辅助副本确认日志记录硬编码(写入)到磁盘。 针对同一主副本上不同数据库的事务可以单独提交。 
- SYNCHRONOUS_COMMIT      
 - 
指定主副本已在此辅助副本上进行硬编码(同步提交模式)前,将等待提交事务。 您可以为最多三个副本(包括主副本)指定 SYNCHRONOUS_COMMIT。 
 - ASYNCHRONOUS_COMMIT      
 - 
指定主副本无需等待此辅助副本对日志进行硬编码(同步提交可用性模式)即可提交事务。 您可以为最多五个可用性副本(包括主副本)指定 ASYNCHRONOUS_COMMIT。 
 
AVAILABILITY_MODE 在 ADD REPLICA ON 子句中是必需的,在 MODIFY REPLICA ON 子句中是可选的。 有关详细信息,请参阅可用性模式(AlwaysOn 可用性组)。 
 - FAILOVER_MODE = { AUTOMATIC | MANUAL }  
 - 
指定您要定义的可用性副本的故障转移模式。     
- AUTOMATIC      
 - 
启用自动故障转移。 仅在指定 VAILABILITY_MODE = SYNCHRONOUS_COMMIT 的情况下才支持 AUTOMATIC。 您可以为最多两个可用性副本(包括主副本)指定 AUTOMATIC。 
                  注意               | 
| 
 SQL Server 故障转移群集实例 (FCI) 不支持通过可用性组来自动进行故障转移,因此,只能为手动故障转移配置任何由 FCI 承载的可用性副本。                  
 | 
 - MANUAL      
 - 
允许数据库管理员手动故障转移或强制手动故障转移(“强制故障转移”)。         
 
FAILOVER_MODE 在 ADD REPLICA ON 子句中是必需的,在 MODIFY REPLICA ON 子句中是可选的。 存在在不同条件下支持的两种手动故障转移,没有数据丢失的手动故障转移和强制故障转移(可能存在数据丢失)。 有关详细信息,请参阅故障转移和故障转移模式(AlwaysOn 可用性组)。 
 - BACKUP_PRIORITY =n   
 - 
指定相对于同一可用性组中的其他副本,在此副本上执行备份的优先级。 该值是范围 0..100 中的整数。 这些值将具有以下含义: 
有关详细信息,请参阅活动辅助副本:辅助副本备份(AlwaysOn 可用性组)。     
 - SECONDARY_ROLE ( … )  
 - 
指定在此可用性副本当前拥有辅助角色(即它是辅助副本)时将要生效的角色特有设置。 在括号内指定一个或两个辅助角色选项。 如果指定两个选项,则使用以逗号分隔的列表。 
辅助角色选项如下所示:     
- ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL }      
 - 
指定给定的可用性副本(正在执行辅助角色,也就是充当辅助副本)的数据库是否可以接受来自客户端的连接,可以是以下之一:         
- NO          
 - 
不允许与此副本的辅助数据库的用户连接。 它们不可用于读访问。 这是默认行为。 
 - READ_ONLY          
 - 
只允许连接 Application Intent 属性设置为 ReadOnly 的辅助副本中的数据库。 有关此属性的详细信息,请参阅将连接字符串关键字用于 SQL Server Native Client。 
 - ALL          
 - 
允许针对辅助副本中的数据库的所有连接进行只读访问。             
 
有关详细信息,请参阅活动辅助副本:可读辅助副本(AlwaysOn 可用性组)。         
 - READ_ONLY_ROUTING_URL = ‘TCP://system-address:port‘       
 - 
指定要用于此可用性副本的路由读意向连接请求的 URL。 这是 SQL Server 数据库引擎侦听的 URL。 通常,SQL Server 数据库引擎的默认实例侦听 TCP 端口 1433。 
对于命名实例,您可以通过查询 sys.dm_tcp_listener_states 动态管理视图的 port 和 type_desc 列来获取端口号。 服务器实例使用 Transact-SQL 侦听器 (type_desc=‘TSQL‘)。 
有关计算可用性副本的只读路由 URL 的详细信息,请参阅计算 AlwaysOn 的 read_only_routing_url。         
                  注意               | 
| 
 对于 SQL Server 的命名实例,应将 Transact-SQL 侦听器配置为使用特定端口。 有关详细信息,请参阅配置服务器以侦听特定 TCP 端口(SQL Server 配置管理器)。  
 | 
 
 - PRIMARY_ROLE ( … )  
 - 
指定在此可用性副本当前拥有主角色(即它是主副本)时将要生效的角色特有设置。 在括号内指定一个或两个主角色选项。 如果指定两个选项,则使用以逗号分隔的列表。 
主角色选项如下所示:     
- ALLOW_CONNECTIONS = { READ_WRITE | ALL }      
 - 
指定给定的可用性副本(正在执行主要角色,也就是充当主副本)的数据库可以接受的来自客户端的连接类型,可以是以下之一:         
- READ_WRITE          
 - 
不允许 Application Intent 连接属性设置为 ReadOnly 的连接。 在 Application Intent 属性设置为 ReadWrite 或者未设置 Application Intent 连接属性时,将允许连接。 有关 Application Intent 连接属性的详细信息,请参阅将连接字符串关键字用于 SQL Server Native Client。 
 - ALL          
 - 
主副本中的数据库允许所有连接。 这是默认行为。