ALTER AVAILABILITY GROUP (Transact-SQL)

Применимо к:SQL Server

Изменяет существующую группу доступности Always On в SQL Server. Большинство аргументов ALTER AVAILABILITY GROUP поддерживаются только в текущей первичной реплике. Однако аргументы JOIN, FAILOVER и FORCE_FAILOVER_ALLOW_DATA_LOSS поддерживаются только во вторичных репликах.

Соглашения о синтаксисе 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  
   | JOIN AVAILABILITY GROUP ON <add_availability_group_spec> [ ,...2 ]  
   | MODIFY AVAILABILITY GROUP ON <modify_availability_group_spec> [ ,...2 ]  
   | GRANT CREATE ANY DATABASE  
   | DENY CREATE ANY DATABASE  
   | 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  
  | DB_FAILOVER  = { ON | OFF }   
  | DTC_SUPPORT  = { PER_DB | NONE }  
  | REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = { integer }
  | ROLE = SECONDARY
  
<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 | CONFIGURATION_ONLY },  
       FAILOVER_MODE = { AUTOMATIC | MANUAL }   
       [ , <add_replica_option> [ ,...n ] ]  
    )   
  
  <add_replica_option>::=  
       SEEDING_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 } ]  
        [,] [ READ_WRITE_ROUTING_URL = { ( '<server_instance>' ) ] 
     } )  
     | SESSION_TIMEOUT = integer
  
<modify_replica_spec>::=  
  <server_instance> WITH  
    (    
       ENDPOINT_URL = 'TCP://system-address:port'   
     | AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }   
     | FAILOVER_MODE = { AUTOMATIC | MANUAL }   
     | SEEDING_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_availability_group_spec>::=  
 <ag_name> WITH  
    (  
       LISTENER_URL = 'TCP://system-address:port',  
       AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT },  
       FAILOVER_MODE = MANUAL,  
       SEEDING_MODE = { AUTOMATIC | MANUAL }  
    )  
  
<modify_availability_group_spec>::=  
 <ag_name> WITH  
    (  
       LISTENER = 'TCP://system-address:port'  
       | AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }  
       | SEEDING_MODE = { AUTOMATIC | MANUAL }  
    )  
  
<add_listener_option> ::=  
   {  
      WITH DHCP [ ON ( <network_subnet_option> ) ]  
    | WITH IP ( { ( <ip_address_option> ) } [ , ...n ] ) [ , PORT = listener_port ]  
   }  
  
  <network_subnet_option> ::=  
     'ipv4_address', '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  
    }  
  

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

group_name
Указывает имя новой группы доступности. group_name должен быть допустимым идентификатором SQL Server и являться уникальным во всех группах доступности в кластере WSFC.

AUTOMATED_BACKUP_PREFERENCE = { PRIMARY | SECONDARY_ONLY | SECONDARY | NONE }
Указывает приоритет, согласно которому задание резервного копирования вычисляет первичную реплику при выборе места для создания резервных копий. Вы можете написать скрипт для того, чтобы задание резервного копирования учитывало приоритет автоматического резервного копирования. Важно понимать, что приоритет не определяется SQL Server, поэтому не влияет на выполнение нерегламентированного резервного копирования.

Поддерживается только в первичной реплике.

Возможны следующие значения.

ОСНОВНОЙ
Указывает, что резервное копирования должно всегда выполняться на первичной реплике. Данный параметр является полезным, если вам требуются такие функции резервного копирования, как создание разностных резервных копий, которые не поддерживаются при выполнении резервного копирования на вторичной реплике.

Важно!

Если планируется использовать доставку журналов для подготовки баз данных-получателей для группы доступности, задайте параметру автоматизированного резервного копирования значение Первичная до тех пор, пока все базы данных-получатели не будут подготовлены и присоединены к группе доступности.

SECONDARY_ONLY
Указывает, что резервное копирование никогда не выполняется на первичной реплике. Если первичная реплика является единственной репликой, находящейся в режиме «в сети», резервное копирование не будет выполняться.

SECONDARY
Указывает, что резервное копирование должно выполняться на вторичной реплике, за исключением тех случаев, когда в режиме «в сети» находится только первичная реплика. В этом случае резервное копирование будет выполняться на первичной реплике. Это поведение принимается по умолчанию.

NONE
Указывает, что вы предпочитаете, чтобы задания резервного копирования пропускали реплики доступности при выборе реплики для создания резервных копий. Примечание. Задания резервного копирования могут учитывать другие факторы, например приоритет резервного копирования каждой реплики доступности в сочетании с ее состоянием работоспособности и соединения.

Важно!

Принудительного применения параметра AUTOMATED_BACKUP_PREFERENCE не существует. Интерпретация данного приоритета зависит от логики (при ее наличии), которая внесена в задания резервного копирования для баз данных в указанной группе доступности. Параметр автоматического резервного копирования не влияет на выполнение нерегламентированного резервного копирования. Дополнительные сведения см. в разделе Настройка резервного копирования в репликах доступности (SQL Server).

Примечание.

Для просмотра приоритета автоматического резервного копирования существующей группы доступности необходимо выбрать столбец automated_backup_preference или automated_backup_preference_desc представления каталога sys.availability_groups. Кроме того, приоритет реплики резервного копирования можно просмотреть в представлении 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 задается на уровне группы, однако он действует только в отношении реплик доступности, настроенных в режиме доступности синхронной фиксации (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT). Более того, условия сбоя могут запустить автоматический переход на другой ресурс только в том случае, если и первичная, и вторичная реплики настроены на режим автоматического перехода на другой ресурс (FAILOVER_MODE = AUTOMATIC), при этом вторичная реплика должна в данный момент быть синхронизирована с первичной.

Поддерживается только в первичной реплике.

Уровни условий сбоя (1–5) варьируются от наименее ограничительного уровня 1 до наиболее ограничительного уровня 5. Заданный уровень условий включает в себя ограничения всех предыдущих уровней. Таким образом, наиболее строгий уровень 5 включает в себя ограничения уровней с 1 по 4, уровень 4 содержит ограничения уровней с 1 по 3 и т. д. Уровни условий сбоя описаны в следующей таблице.

Уровень Условия сбоя
1 Указывает, что следует запустить автоматический переход на другой ресурс при возникновении любой из следующих ситуаций.

Служба SQL Server отключена.

Аренда группы доступности для подключения к кластеру WSFC истекла, поскольку от экземпляра сервера не было получено сообщение ACK. Дополнительные сведения см. в разделе Принцип работы. Время ожидания аренды AlwaysOn в SQL Server.
2 Указывает, что следует запустить автоматический переход на другой ресурс при возникновении любой из следующих ситуаций.

Экземпляр SQL Server не подключается к кластеру, а определяемый пользователем порог HEALTH_CHECK_TIMEOUT для группы доступности превышен.

Реплика доступности находится в неисправном состоянии.
3 Указывает, что автоматическая отработка отказа должна быть инициирована при критических внутренних ошибках SQL Server, таких как потерянные спинлоки, серьезные нарушения доступа к записи или слишком много дампа.

Это поведение принимается по умолчанию.
4 Указывает, что автоматическая отработка отказа должна быть инициирована при умеренных внутренних ошибках SQL Server, таких как постоянное состояние вне памяти в внутреннем пуле ресурсов SQL Server.
5 Указывает, что следует запустить автоматический переход на другой ресурс при любом удовлетворяющим условиям состоянии сбоя, включая:

Исчерпание рабочих потоков SQL Engine.

Обнаружение неразрешимой взаимоблокировки.

Примечание.

Отсутствие ответа экземпляром SQL Server на клиентские запросы не относится к группам доступности.

Значения FAILURE_CONDITION_LEVEL и HEALTH_CHECK_TIMEOUT определяют гибкую политику отработки отказа для заданной группы. Данная гибкая политика отработки отказа предоставляет гранулярное управление условиями, которые могут вызвать автоматический переход на другой ресурс. Дополнительные сведения см. в разделе Гибкая политика автоматического перехода на другой ресурс группы доступности (SQL Server).

HEALTH_CHECK_TIMEOUT =milliseconds
Указывает время ожидания (в миллисекундах) возвращения сведений о состоянии сервера системной хранимой процедурой sp_server_diagnostics перед тем, как кластер WSFC признает, что экземпляр сервера не отвечает на запросы или его работа замедлена. Параметр HEALTH_CHECK_TIMEOUT задается на уровне группы, но применяется только в репликах доступности, настроенных для работы в режиме доступности синхронной фиксации с автоматическим переходом на другой ресурс (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT). Более того, время ожидания для проверки состояния системы может запустить автоматический переход на другой ресурс только в том случае, если первичная и вторичная реплики настроены на режим автоматического перехода на другой ресурс (FAILOVER_MODE = AUTOMATIC), при этом вторичная реплика должна быть в данный момент синхронизирована с первичной.

Значение параметра HEALTH_CHECK_TIMEOUT по умолчанию — 30 000 миллисекунд (30 секунд). Минимальное значение — 15 000 миллисекунд (15 секунд), а максимальное значение — 4 294 967 295 миллисекунд.

Поддерживается только в первичной реплике.

Важно!

sp_server_diagnostics не выполняет проверку работоспособности на уровне базы данных.

DB_FAILOVER = { ON | OFF }
Задает реакцию в случае, когда база данных в первичной реплике находится в автономном режиме. Если задано значение ON, любое состояние базы данных в группе доступности, отличное от ONLINE, инициирует автоматический переход на другой ресурс. Если этот параметр имеет значение OFF, для запуска автоматического перехода на другой ресурс учитывается только работоспособность экземпляра.

Дополнительные сведения об этом параметре см. в разделе Параметр определения уровня работоспособности баз данных

DTC_SUPPORT = { PER_DB | NONE }
Указывает, включены ли распределенные транзакции для этой группы доступности. Распределенные транзакции поддерживаются для баз данных группы доступности только начиная с версии SQL Server 2016 (13.x), а транзакции между базами данных — начиная с версии SQL Server 2016 (13.x) с пакетом обновления SP2. PER_DB создает группу доступности с поддержкой таких транзакций и автоматически делает транзакции между базами данных в группе доступности распределенными транзакциями. NONE запрещает автоматическое преобразование транзакций между базами данных в распределенные транзакции и не регистрирует базу данных с устойчивым RMID в DTC. При использовании параметра NONE распределенные транзакции не запрещаются, однако отработка отказа и автоматическое восстановление базы данных в некоторых условиях могут быть невозможны. Дополнительные сведения см. в статье Транзакции — группы доступности Always On и зеркальное отображение баз данных.

Примечание.

Поддержка изменения параметра DTC_SUPPORT группы доступности появилась в SQL Server 2016 (13.x) с пакетом обновления SP2. Этот параметр нельзя использовать с более ранними версиями. Чтобы изменить этот параметр в более ранних версиях SQL Server, необходимо удалить (DROP), а затем снова создать (CREATE) группу доступности.

Важно!

DTC имеет ограничение в 32 перечисления на распределенную транзакцию. Так как каждая база данных в группе доступности включается в DTC отдельно, если транзакция включает более 32 баз данных, при попытке SQL Server заручиться 33-й базой данных может возникнуть следующая ошибка:

Enlist operation failed: 0x8004d101(XACT_E_TOOMANY_ENLISTMENTS). SQL Server could not register with Microsoft Distributed Transaction Coordinator (MS DTC) as a resource manager for this transaction. The transaction may have been stopped by the client or the resource manager.

Дополнительные сведения о распределенных транзакциях в SQL Server см. в разделе "Распределенные транзакции"

REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT

Представлено в SQL Server 2017 (14.x). Задает минимальное количество синхронных вторичных реплика, необходимых для фиксации до фиксации основного реплика фиксации транзакции. Гарантирует, что транзакции SQL Server ожидают обновления журналов транзакций по минимальному количеству дополнительных реплика.

  • По умолчанию: 0. Обеспечивает то же поведение, что и SQL Server 2016 (13.x).
  • Минимум: 0.
  • Максимум: число реплика минус 1.

REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT относится к реплика в синхронном режиме фиксации. Если реплика находятся в синхронном режиме фиксации, запись в основном реплика ожидается, пока запись в синхронных реплика фиксируется в журнале транзакций базы данных реплика. Если SQL Server, на котором размещен вторичный синхронный реплика, перестает отвечать, SQL Server, на котором размещается основной реплика, помечает, что вторичный реплика как NOT SYNCD и продолжается. Когда база данных без ответа возвращается в режим "не синхронизирована" и реплика помечается как неработоспособная, пока основной источник не сможет синхронизировать его снова. Этот параметр гарантирует, что основной реплика не продолжается, пока минимальное количество реплика фиксирует каждую транзакцию. Если минимальное количество реплика недоступно, то фиксируется сбой основного. В кластере типа EXTERNAL этот параметр меняется при добавлении группы доступности в кластерный ресурс. См. Высокий уровень доступности и защита данных для конфигураций группы доступности.

Начиная с SQL Server 2022 (16.x), можно задать REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT в распределенной группе доступности. Этот параметр не поддерживается для CREATE AVAILABILITY GROUP. Для задания REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT можно использовать ALTER AVAILABILITY GROUP. Например:

ALTER AVAILABILITY GROUP [<name>] 
  SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = <integer>);

РОЛЬ
Единственным допустимым параметром является "SECONDARY", и этот параметр SET действителен только в распределенных группах доступности. Он используется для отработки отказа распределенной группы доступности, как описано здесь: ALTER AVAILABILITY GROUP

ADD DATABASE database_name
Задает список из одной или нескольких пользовательских баз данных, которые нужно добавить в группу доступности. Эти базы данных должны размещаться в экземпляре SQL Server, где размещается текущая первичная реплика. Можно указать несколько баз данных для группы доступности, но каждая база данных может принадлежать только к одной группе доступности. Дополнительные сведения о типах баз данных, которые поддерживаются группами доступности, см. в разделе Предварительные требования, ограничения и рекомендации для групп доступности Always On (SQL Server). Чтобы узнать, какие локальные базы данных уже принадлежат группе доступности, просмотрите столбец replica_id в представлении каталога sys.databases.

Поддерживается только в первичной реплике.

Примечание.

После создания группы доступности необходимо подключиться к каждому экземпляру сервера, где размещается вторичная реплика, а затем подготовить каждую базу данных-получатель и включить ее в группу доступности. Дополнительные сведения см. в статье Запуск перемещения данных для базы данных-получателя Always On (SQL Server).

REMOVE DATABASE database_name
Удаляет указанную базу данных-источник и соответствующие базы данных-получатели из группы доступности. Поддерживается только в первичной реплике.

Сведения о рекомендуемых действиях, выполняемых после удаления базы данных доступности из группы доступности, см. в разделе Удаление базы данных-источника из группы доступности (SQL Server).

ADD REPLICA ON
Указывает от одного до восьми экземпляров SQL Server для размещения вторичных реплика в группе доступности. Каждая реплика задается по адресу экземпляра своего сервера, за которым следует предложение WITH (…).

Поддерживается только в первичной реплике.

Необходимо включить каждую новую вторичную реплику в группу доступности. Дополнительные сведения см. в описании параметра JOIN далее в этом разделе.

<server_instance>
Задает адрес экземпляра SQL Server, на котором размещена реплика. Формат адреса зависит от вида экземпляра (именованный или по умолчанию) и типа экземпляра (изолированный или экземпляр отказоустойчивого кластера). Синтаксис выглядит следующим образом:

{ 'system_name[\instance_name]' | 'FCI_network_name[\instance_name]' }

Этот адрес состоит из следующих компонентов:

системное_имя
Имя NetBIOS компьютерной системы, на которой находится целевой экземпляр SQL Server. Этот компьютер должен быть узлом кластера WSFC.

сетевое_имя_FCI
Имя сети, используемое для доступа к отказоустойчивой кластеру SQL Server. Используйте это, если экземпляр сервера участвует в качестве партнера по отработки отказа SQL Server. Выполнение SELECT @@SERVERNAME на экземпляре сервера FCI возвращает всю его строку 'FCI_network_name[\instance_name]' (то есть полное имя реплики).

instance_name
Имя экземпляра SQL Server, размещенного на system_name или FCI_network_name с поддержкой Always On. Для экземпляра сервера по умолчанию указывать параметр имя_экземпляра не обязательно. В именах экземпляров не учитывается регистр символов. На экземпляре изолированного сервера это имя значения совпадает со значением, возвращаемым при выполнении инструкции SELECT @@SERVERNAME.

\
Разделитель, используемый только при указании значения instance_name для отделения от аргументов system_name или FCI_network_name.

Дополнительные сведения о предварительных требованиях для узлов WSFC и экземпляров серверов см. в разделе Предварительные требования, ограничения и рекомендации для групп доступности Always On (SQL Server).

ENDPOINT_URL ='TCP://system-address:port'
Задает путь URL-адреса для конечной точки зеркального отображения базы данных в экземпляре SQL Server, на котором будет размещена добавляемая или изменяемая реплика доступности.

ENDPOINT_URL обязательно требуется в предложении ADD REPLICA ON и является необязательным в предложении MODIFY REPLICA ON. Дополнительные сведения см. в разделе Выбор URL-адреса конечной точки при добавлении или изменении реплики доступности (SQL Server).

'TCP://system-address:port'
Задает URL-адрес для конечной точки или URL-адрес маршрутизации, доступный только для чтения. Параметры URL-адреса:

system-address
Это строка, такая как адрес системы, полное доменное имя или IP-адрес, однозначно идентифицирующий целевую компьютерную систему.

port
Номер порта, связанный с конечной точкой зеркального отображения экземпляра сервера (для параметра ENDPOINT_URL), или номер порта, используемый ядром СУБД экземпляра сервера (для параметра READ_ONLY_ROUTING_URL).

AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT | CONFIGURATION_ONLY }
Указывает, должна ли первичная реплика ждать подтверждения фиксации (записи) записей журнала на диск от вторичной реплики перед тем, как фиксировать транзакцию в указанной базе данных. Фиксация транзакций в других базах данных, расположенных в этой первичной реплике, может выполняться независимо.

SYNCHRONOUS_COMMIT
Указывает, что первичная реплика может фиксировать транзакции только после их записи на данной вторичной реплике (режим синхронной фиксации). Вы можете указать SYNCHRONOUS_COMMIT не более чем для трех реплик, включая первичную.

ASYNCHRONOUS_COMMIT
Указывает, что первичная реплика фиксирует транзакции без ожидания записи журнала на данной вторичной реплике (режим доступности синхронной фиксации). Вы можете указать ASYNCHRONOUS_COMMIT не более чем для пяти реплик доступности, включая первичную реплику.

CONFIGURATION_ONLY указывает, что первичная реплика синхронно фиксирует метаданные конфигурации группы доступности в базе данных master этой реплики. Реплика не будет содержать данные пользователя. Этот параметр:

  • Может размещаться в любом выпуске SQL Server, включая экспресс-выпуск.

  • Требует, чтобы конечная точка зеркального отображения данных реплики CONFIGURATION_ONLY имела тип WITNESS.

  • Не может быть изменен.

  • Недопустим, когда CLUSTER_TYPE = WSFC.

    Дополнительные сведения см. в разделе Реплика только с конфигурацией.

AVAILABILITY_MODE обязательно требуется в предложении ADD REPLICA ON и является необязательным в предложении MODIFY REPLICA ON. Дополнительные сведения см. в разделе Режимы доступности (группы доступности Always On).

FAILOVER_MODE = { AUTOMATIC | MANUAL }
Указывает режим отработки отказов определяемой реплики доступности.

AUTOMATIC
Включает автоматический переход на другой ресурс. AUTOMATIC поддерживается, только если указан параметр AVAILABILITY_MODE = SYNCHRONOUS_COMMIT. Значение AUTOMATIC можно задать для трех реплик доступности, включая первичную.

Примечание.

До версии SQL Server 2016 число реплик с автоматическим переходом на другой ресурс было ограничено двумя, включая первичную реплику.

Примечание.

Экземпляры отказоустойчивого кластера SQL Server не поддерживают автоматический переход на другой ресурс с учетом групп доступности, поэтому любая реплика доступности, размещенная в них, должна быть настроена для перехода на другой ресурс вручную.

MANUAL
Позволяет администратору базы данных осуществлять переход на другой ресурс вручную или принудительно (принудительный переход на другой ресурс).

FAILOVER_MODE обязательно требуется в предложении ADD REPLICA ON и является необязательным в предложении MODIFY REPLICA ON. Существует два вида перехода на другой ресурс вручную: переход на другой ресурс вручную без потери данных и принудительный переход на другой ресурс (с возможной потерей данных), которые поддерживаются в зависимости от различных условий. Дополнительные сведения см. в разделе Отработка отказа и режимы отработки отказа (группы доступности Always On).

SEEDING_MODE = { AUTOMATIC | MANUAL }
Указывает, как вторичная реплика изначально заполняется данными.

AUTOMATIC
Включает прямое первоначальное заполнение. Этот метод будет заполнять вторичную реплику начальными значениями по сети. Этот метод не требует резервного копирования и восстановления копии базы данных-источника в реплике.

Примечание.

Для прямого заполнения необходимо разрешить создание базы данных в каждой вторичной реплике с помощью инструкции ALTER AVAILABILITY GROUP с параметром GRANT CREATE ANY DATABASE.

MANUAL
Указывает на присвоение начальных значений вручную (по умолчанию). В этом методе вы создаете резервную копию базы данных на первичной реплике и вручную восстанавливаете эту резервную копию на вторичной реплике.

BACKUP_PRIORITY =n
Указывает приоритет выполнения резервного копирования на данной реплике по отношению к другим репликам из той же группы доступности. Значение представляет собой целое число в диапазоне от 0 до 100. Данные величины имеют следующие значения:

  • 1..100 показывает, что реплику доступности можно выбрать для выполнения резервного копирования. 1 указывает минимальный приоритет, 100 — наивысший приоритет. При BACKUP_PRIORITY = 1 реплика доступности будет выбрана для создания резервных копий только в том случае, если реплики доступности с более высоким приоритетом отсутствуют.

  • Значение 0 указывает, что эта реплика доступности никогда не будет использоваться для создания резервных копий. Этот параметр может быть полезным, например, для исключения удаленной реплики доступности, создание резервных копий на которой нежелательно.

Дополнительные сведения см. в статье Активные вторичные реплики, резервное копирование во вторичных репликах (группы доступности Always On).

SECONDARY_ROLE ( ... )
Задает параметры роли, которые будут действовать, если эта реплика доступности в данный момент имеет вторичную роль (то есть когда реплика является вторичной). В скобках укажите один или два параметра вторичной роли. Если указываются оба параметра, используйте список с разделителями-запятыми.

Параметры вторичной роли:

ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL }
Указывает, могут ли базы данных заданной реплики доступности, играющей роль вторичной (т. е. служащей вторичной репликой), принимать соединения от клиентов. Может принимать одно из следующих значений:

Нет
Для баз данных-получателей этой реплики соединения пользователя не разрешаются. Для них не разрешен доступ для чтения. Это поведение принимается по умолчанию.

READ_ONLY
Разрешаются только соединения с базами данных во вторичной реплике, у которых свойство "Назначение приложения" имеет значение ReadOnly. Дополнительные сведения об этом свойстве см. в разделе Using Connection String Keywords with SQL Server Native Client.

ВСЕ
К базам данных во вторичной реплике разрешаются все соединения на доступ только для чтения.

Дополнительные сведения см. в разделе Активные вторичные реплики: доступные только для чтения вторичные реплики (группы доступности Always On).

READ_ONLY_ROUTING_URL ='TCP://system-address:port'
Указывает URL-адрес, используемый для маршрутизации запросов на соединение с намерением чтения к этой реплике доступности. Этот URL-адрес прослушивается компонентом ядра СУБД SQL Server. Обычно экземпляр по умолчанию компонента ядра СУБД SQL Server прослушивает TCP-порт 1433.

Номер порта для именованного экземпляра вы можете получить, запросив столбцы port и type_desc динамического административного представления sys.dm_tcp_listener_states. Экземпляр сервера использует прослушиватель Transact-SQL (type_desc='TSQL').

Дополнительные сведения о вычислении URL-адреса маршрутизации только для чтения для реплики доступности см. в разделе Вычисление значения read_only_routing_url для AlwaysOn.

Примечание.

Для именованного экземпляра SQL Server прослушиватель Transact-SQL должен быть настроен для использования определенного порта. Дополнительные сведения см. в разделе Настройка сервера для прослушивания указанного TCP-порта (диспетчер конфигурации SQL Server).

PRIMARY_ROLE ( ... )
Задает параметры роли, которые будут действовать, если эта реплика доступности в данный момент имеет первичную роль (то есть когда реплика является первичной). В скобках укажите один или два параметра первичной роли. Если указываются оба параметра, используйте список с разделителями-запятыми.

Параметры первичной роли:

ALLOW_CONNECTIONS = { READ_WRITE | ALL }
Указывает тип соединений, которые принимаются от клиентов базами данных заданной реплики доступности, которая играет роль первичной. Это может быть один из следующих типов:

READ_WRITE
Соединения, у которых свойство "Назначение приложения" равно ReadOnly , не разрешены. Если свойство «Назначение приложения» имеет значение ReadWrite или не задано, то соединение разрешено. Дополнительные сведения о свойстве соединения «Назначение приложения» см. в разделе Using Connection String Keywords with SQL Server Native Client.

ВСЕ
Разрешаются все соединения с базами данных в первичной реплике. Это поведение принимается по умолчанию.

READ_ONLY_ROUTING_LIST = { ('<server_instance>' [ ,...n ] ) | NONE }
Задает список экземпляров сервера (с разделителями-запятыми), на которых будут размещаться реплики доступности для этой группы доступности, удовлетворяющие следующим требованиям при работе во вторичной роли.

  • Настроены для разрешения всех соединений или соединений только для чтения (см. выше аргумент ALLOW_CONNECTIONS параметра SECONDARY_ROLE).

  • Определен URL-адрес маршрутизации только для чтения (см. выше аргумент READ_ONLY_ROUTING_URL параметра SECONDARY_ROLE).

READ_ONLY_ROUTING_LIST имеет следующие значения.

<server_instance>
Задает адрес экземпляра SQL Server, на котором размещается вторичная реплика доступности, доступная для чтения при выполнении во вторичной роли.

Используйте список с разделителями-запятыми, чтобы указать все экземпляры сервера, где может размещаться доступная для чтения вторичная реплика. При маршрутизации только для чтения будет учитываться порядок, в котором экземпляры сервера заданы в списке. Если включить экземпляр сервера, где размещается реплика, в список маршрутизации только для чтения, то обычно рекомендуется поместить этот экземпляр сервера в конец списка, чтобы подключения с намерением чтения направлялись на вторичную реплику, если она доступна.

Начиная с SQL Server 2016 (13.x), вы можете сбалансировать запросы на чтение и намерения для чтения в дополнительных реплика. Для этого поместите реплики во вложенный набор с круглыми скобками в список маршрутизации только для чтения. Дополнительные сведения и примеры см. в разделе Настройка балансировки нагрузки между репликами только для чтения.

NONE
Указывает, что, когда эта реплика доступности является первичной, маршрутизация только для чтения не поддерживается. Это поведение принимается по умолчанию. При использовании с параметром MODIFY REPLICA ON это значение отключает существующий список (если он есть).

READ_WRITE_ROUTING_URL = { ('<server_instance>') }
Область применения: SQL Server (начиная с SQL Server 2019 (15.x))

Определяет экземпляры сервера, на которых размещаются реплики доступности для этой группы доступности в соответствии со следующими требованиями при выполнении в первичной роли.

  • Спецификация реплики PRIMARY_ROLE содержит READ_WRITE_ROUTING_URL.
  • Строке подключения задается значение ReadWrite. Для этого параметру ApplicationIntent задается значение ReadWrite или не задается ничего, чтобы использовалось значение по умолчанию (ReadWrite).

Дополнительные сведения см. в статье Перенаправление подключения с правами на чтение и запись с вторичной на первичную реплику (группы доступности AlwaysOn).

SESSION_TIMEOUT =seconds
Указывает интервал времени ожидания сеанса в секундах. Если этот параметр не определить, интервал времени по умолчанию — 10 секунд. Минимальное значение составляет 5 секунд.

Важно!

Рекомендуется установить интервал времени ожидания в 10 секунд или более.

Дополнительные сведения о периоде времени ожидания сеанса см. в разделе Обзор групп доступности Always On (SQL Server).

MODIFY REPLICA ON
Изменяет любую реплику группы доступности. Список реплик для изменения содержит адрес экземпляра сервера с предложением WITH (…) для каждой реплики.

Поддерживается только в первичной реплике.

REMOVE REPLICA ON
Удаляет указанную вторичную реплику из группы доступности. Текущая первичная реплика не может быть удалена из группы доступности. После удаления реплика перестает получать данные. Принадлежащие ей базы данных-получатели удаляются из группы доступности и переходят в состояние RESTORING.

Поддерживается только в первичной реплике.

Примечание.

Если удаляется недоступная или сбойная реплика, то после ее возвращения в режим «в сети» она больше не будет относиться к этой группе доступности.

JOIN
Приводит к созданию вторичной реплики локальным экземпляром сервера в указанной группе доступности.

Поддерживается только во вторичной реплике, которая еще не включена в группу доступности.

Дополнительные сведения см. в статье Присоединение вторичной реплики к группе доступности Always On.

ОТРАБОТКА ОТКАЗА
Инициирует переход группы доступности на другой ресурс вручную без потери данных с переходом на вторичную реплику, к которой вы подключились. Реплика, в которой будет размещаться первичная реплика, является целью отработки отказа. Цель перехода на другой ресурс примет на себя роль первичной, восстановит собственные копии каждой базы данных и переведет их в режим «в сети» в качестве баз данных-источников. Бывшая первичная реплика параллельно переходит в роль вторичной, а ее базы данных становятся базами данных-получателями и немедленно приостанавливаются. Эти роли могут меняться местами при последовательных сбоях.

Поддерживается только во вторичной реплике с синхронной фиксацией, которая в данный момент синхронизирована с первичной репликой. Заметьте, что для синхронизации вторичной реплики первичная реплика также должна работать в режиме синхронной фиксации.

Примечание.

Команда отработки отказа завершает работу сразу после того, как цель перехода принимает команду. Однако восстановление базы данных происходит асинхронно после того, как группа доступности закончит отработку отказа.

Сведения об ограничениях, предварительных условиях и рекомендации по выполнению запланированного перехода на другой ресурс вручную см. в разделе Выполнение запланированного перехода на другой ресурс вручную для группы доступности (SQL Server).

FORCE_FAILOVER_ALLOW_DATA_LOSS

Внимание

Принудительная обработка отказа, которая может привести к потере некоторых данных, используется исключительно в качестве метода аварийного восстановления. Поэтому настоятельно рекомендуется выполнять принудительную отработку отказа только в том случае, если первичная реплика не выполняется и можно пойти на риск потери данных, а также когда требуется срочно восстановить группу доступности.

Поддерживается только в реплике, роль которой находится в состоянии SECONDARY или RESOLVING. --Реплика, на которой вводится команда обработки отказа, называется целью перехода на другой ресурс.

Принудительная обработка отказа группы доступности с возможной потерей данных и переходом на другой указанный ресурс. Цель перехода на другой ресурс примет на себя роль первичной, восстановит собственные копии каждой базы данных и переведет их в режим «в сети» в качестве баз данных-источников. Во всех оставшихся вторичных репликах все базы данных-получатели будут приостановлены до их возобновления вручную. Если бывшая первичная реплика станет доступной, она переключится в роль вторичной; ее базы данных станут базами данных-получателями и будут приостановлены.

Примечание.

Команда отработки отказа завершает работу сразу после того, как цель перехода принимает команду. Однако восстановление базы данных происходит асинхронно после того, как группа доступности закончит отработку отказа.

Дополнительные сведения об ограничениях, предварительных условиях и рекомендациях по выполнению принудительного перехода на другой ресурс, а также о влиянии принудительного перехода на другой ресурс на прежние базы данных-источники в группе доступности см. в разделе Выполнение принудительного перехода на другой ресурс вручную для группы доступности (SQL Server).

ADD LISTENER 'dns_name'(<add_listener_option>)
Определяет новый прослушиватель группы доступности. Поддерживается только в первичной реплике.

Важно!

Перед созданием первого прослушивателя настоятельно рекомендуется ознакомиться с разделом Создание или настройка прослушивателя группы доступности (SQL Server).

После создания прослушивателя для заданной группы доступности настоятельно рекомендуется выполнить следующие действия.

  • Попросите сетевого администратора зарезервировать IP-адрес, который будет использоваться только этим прослушивателем.
  • Передайте имя узла DNS прослушивателя разработчикам приложения для использования в строке подключения при запросе клиентских соединений к данной группе доступности.

dns_name
Указывает имя узла DNS для прослушивателя группы доступности. Имя DNS прослушивателя должно быть уникальным в домене и в NetBIOS.

dns_name является строковым значением. Это имя может содержать только буквы, цифры, дефисы (-) и знаки подчеркивания (_) в любом порядке. В именах узлов DNS учитывается регистр. Максимальная длина равна 63 символам.

Мы рекомендуем указывать строку, которая поддается толкованию. Например, для группы доступности с именем AG1понятным именем узла DNS будет ag1-listener.

Важно!

NetBIOS распознает только первые 15 символов в dns_name. При наличии двух кластеров WSFC, которые управляются одной службой Active Directory, и попытке создать в обоих кластерах прослушивателей группы доступности с именами, содержащими более 15 символов, и одинаковым префиксом из 15 символов возникнет ошибка, указывающая, что не удалось подключиться к ресурсу с именем виртуальной сети. Дополнительные сведения о правилах именования префиксов для имен DNS см. в разделе Присвоение имен доменов.

JOIN AVAILABILITY GROUP ON
Присоединение к распределенной группе доступности. Когда вы создаете распределенную группу доступности, группа доступности в кластере, где она создана, является первичной группой доступности. Группа доступности, которая соединяется с распределенной группой доступности, является вторичной группой доступности.

<ag_name>
Указывает имя группы доступности, составляющей половину распределенной группы доступности.

LISTENER ='TCP://system-address:port'
Указывает URL-адрес пути для прослушивателя, связанного с группой доступности.

Требуется предложение LISTENER.

'TCP://system-address:port'
Указывает URL-адрес для прослушивателя, связанного с группой доступности. Параметры URL-адреса:

system-address
Это строка, такая как имя системы, полное доменное имя или IP-адрес, однозначно идентифицирующая прослушивателя.

port
Номер порта, связанный с конечной точкой зеркального отображения группы доступности. Это не порт прослушивателя.

AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }
Указывает, должна ли первичная реплика ждать подтверждения фиксации (записи) записей журнала на диск от вторичной группы доступности перед тем, как фиксировать транзакцию в указанной базе данных.

SYNCHRONOUS_COMMIT
Указывает, что первичная реплика может фиксировать транзакции только после их записи во вторичной группе доступности. Вы можете указать SYNCHRONOUS_COMMIT не более чем для двух групп доступности, включая первичную группу доступности.

ASYNCHRONOUS_COMMIT
Указывает, что первичная реплика фиксирует транзакции без ожидания записи журнала от вторичной группы доступности. Вы можете указать ASYNCHRONOUS_COMMIT не более чем для двух групп доступности, включая первичную группу доступности.

Предложение AVAILABILITY_MODE является обязательным.

FAILOVER_MODE = { MANUAL }
Указывает режим отработки отказа распределенной группы доступности.

MANUAL
Позволяет администратору базы данных осуществлять переход на другой ресурс вручную по плану или принудительно (обычно это называется принудительным переходом на другой ресурс).

Во вторичной группе доступности автоматический переход на другой ресурс не поддерживается.

SEEDING_MODE**=** { AUTOMATIC | MANUAL }
Указывает, как вторичная группа доступности изначально заполняется данными.

AUTOMATIC
Включает автоматическое заполнение. Этот метод будет заполнять вторичную группу доступности начальными значениями по сети. Этот метод не требует резервного копирования и восстановления копии базы данных-источника в репликах вторичной группы доступности.

MANUAL
Задает присвоение начальных значений вручную. В этом методе вы создаете резервную копию базы данных на первичной реплике и вручную восстанавливаете эту резервную копию на репликах вторичной группы доступности.

MODIFY AVAILABILITY GROUP ON
Изменяет любой параметр распределенной группы доступности. Список групп доступности для изменения содержит имя группы доступности и предложение WITH (…) для каждой группы доступности.

Важно!

Эту команду необходимо повторить для первичной группы доступности и экземпляров вторичной группы доступности.

GRANT CREATE ANY DATABASE
Позволяет группе доступности создавать базы данных от имени первичной реплики, которая поддерживает прямое присвоение начальных значений (SEEDING_MODE = AUTOMATIC). Этот параметр следует запускать на каждой вторичной реплике, которая поддерживает прямое присвоение начальных значений, после того, как эта вторичная реплика присоединится к группе доступности. Требуется разрешение CREATE ANY DATABASE.

DENY CREATE ANY DATABASE
Удаляет возможность группы доступности создавать базы данных от имени первичной реплики.

<add_listener_option>
ADD LISTENER принимает один из следующих параметров.

WITH DHCP [ ON { ('four_part_ipv4_address','four_part_ipv4_mask') } ]
Указывает, что прослушиватель группы доступности будет использовать протокол DHCP. Дополнительно можно использовать предложение ON, чтобы определить сеть, для которой будет создан прослушиватель. Протокол DHCP имеет ограничение на работу только с одной подсетью для каждого экземпляра сервера, на котором размещается реплика доступности в группе доступности.

Важно!

Использовать протокол DHCP в производственной среде не рекомендуется. Если во время простоя аренда IP-адреса протокола DHCP истечет, то на регистрацию нового сетевого IP-адреса протокола DHCP, связанного с именем DNS-прослушивателя, уйдет дополнительное время, что скажется на производительности клиента. Однако протокол DHCP полезен при настройке среды разработки и проверки и позволяет проверить базовые функции групп доступности и их интеграцию с приложениями.

Например:

WITH DHCP ON ('10.120.19.0','255.255.254.0')

WITH IP ( { ('four_part_ipv4_address','four_part_ipv4_mask') | ('ipv6_address') } [ , ...n ] ) [ , PORT =listener_port ]
Указывает, что вместо использования протокола DHCP прослушиватель группы доступности будет использовать один или несколько статических IP-адресов. Чтобы создать группу доступности, охватывающую несколько подсетей, в конфигурации прослушивателя должен присутствовать один статический IP-адрес для каждой подсети. Для конкретной подсети статический IP-адрес может иметь формат IPv4 или IPv6. Свяжитесь с администратором сети, чтобы получить статический IP-адрес для каждой подсети, в которой будет размещена реплика доступности для новой группы доступности.

Например:

WITH IP ( ('10.120.19.155','255.255.254.0') )

ipv4_address
Задает IPv4-адрес, состоящий из четырех частей, для прослушивателя группы доступности. Например, 10.120.19.155.

ipv4_mask
Задает IPv4-маску, состоящую из четырех частей, для прослушивателя группы доступности. Например, 255.255.254.0.

ipv6_address
Задает IPv6-адрес для прослушивателя группы доступности. Например, 2001::4898:23:1002:20f:1fff:feff:b3a3.

PORT =listener_port
Указывает номер порта listener_port для использования прослушивателем группы доступности, который задается предложением WITH IP. Параметр PORT является необязательным.

По умолчанию поддерживается номер порта 1433. Однако из соображений безопасности, рекомендуется использовать другой номер порта.

Например: WITH IP ( ('2001::4898:23:1002:20f:1fff:feff:b3a3') ) , PORT = 7777

MODIFY LISTENER 'dns_name'(<modify_listener_option>)
Изменяет существующий прослушиватель для данной группы доступности. Поддерживается только в первичной реплике.

<modify_listener_option>
MODIFY LISTENER принимает один из следующих параметров:

ADD IP { ('four_part_ipv4_address','four_part_ipv4_mask') | ('dns_nameipv6_address') }
Добавляет указанный IP-адрес к прослушивателю группы доступности, который задан с помощью dns_name.

PORT =listener_port
См. описание этого аргумента ранее в этом разделе.

RESTART LISTENER 'dns_name'
Перезапускает прослушиватель, который связан с указанным именем DNS. Поддерживается только в первичной реплике.

REMOVE LISTENER 'dns_name'
Удаляет прослушиватель, который связан с указанным именем DNS. Поддерживается только в первичной реплике.

OFFLINE
Переводит группу доступности из режима «в сети» в режим «вне сети». У баз данных с синхронной фиксацией потеря данных невозможна.

После перехода группы доступности в режим «вне сети» ее базы данных становятся недоступными для клиентов, и невозможно перевести группу доступности обратно в режим «в сети». Поэтому используйте параметр OFFLINE только во время миграции групп доступности Always On между кластерами при переносе ресурса группы доступности на другой кластер WSFC.

Дополнительные сведения см. в разделе Перевод группы доступности в режим "вне сети" (SQL Server).

Требования и ограничения

Сведения о других предварительных требованиях и ограничениях для реплик доступности и их экземпляров сервера узла и компьютеров см. в разделе Предварительные требования, ограничения и рекомендации для групп доступности Always On (SQL Server).

Сведения об ограничениях для инструкции AVAILABILITY GROUP языка Transact-SQL см. в разделе Общие сведения об инструкциях Transact-SQL для групп доступности Always On (SQL Server).

Безопасность

Разрешения

Необходимо разрешение ALTER AVAILABILITY GROUP для группы доступности, разрешение CONTROL AVAILABILITY GROUP, разрешение ALTER ANY AVAILABILITY GROUP или разрешение CONTROL SERVER. Кроме того, требуется разрешение ALTER ANY DATABASE.

Примеры

А. Присоединение вторичной реплики к группе доступности

В следующем примере рассматривается присоединение вторичной реплики, с которой установлено соединение, к группе доступности AccountsAG.

ALTER AVAILABILITY GROUP AccountsAG JOIN;  
GO  

B. Принудительный переход на другой ресурс группы доступности

В следующем примере выполняется принудительный переход группы доступности AccountsAG на вторичную реплику, с которой установлено соединение.

ALTER AVAILABILITY GROUP AccountsAG FORCE_FAILOVER_ALLOW_DATA_LOSS;  
GO  

См. также

CREATE AVAILABILITY GROUP (Transact-SQL)
ALTER DATABASE SET HADR (Transact-SQL)
DROP AVAILABILITY GROUP (Transact-SQL)
sys.availability_реплика (Transact-SQL)
sys.availability_groups (Transact-SQL)
Поиск и устранение неисправностей конфигурации групп доступности AlwaysOn (SQL Server)
Обзор групп доступности Always On (SQL Server)
Прослушиватели групп доступности, возможность подключения клиентов и отработка отказа приложений (SQL Server)