CREATE AVAILABILITY GROUP (Transact-SQL)
Область применения:SQL Server
Создает новую группу доступности, если экземпляр SQL Server включен для функции групп доступности AlwaysOn.
Внимание
Выполните КОМАНДУ CREATE AVAILABILITY GROUP на экземпляре SQL Server, который планируется использовать в качестве начальной реплики новой группы доступности. Этот экземпляр сервера должен располагаться на узле отказоустойчивого кластера Windows Server (WSFC).
Соглашения о синтаксисе Transact-SQL
Синтаксис
CREATE AVAILABILITY GROUP group_name
WITH (<with_option_spec> [ ,...n ] )
FOR [ DATABASE database_name [ ,...n ] ]
REPLICA ON <add_replica_spec> [ ,...n ]
AVAILABILITY GROUP ON <add_availability_group_spec> [ ,...2 ]
[ LISTENER 'dns_name' ( <listener_option> ) ]
[ ; ]
<with_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 }
| [ BASIC | DISTRIBUTED | CONTAINED [ REUSE_SYSTEM_DATABASES ] ]
| REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = { integer }
| CLUSTER_TYPE = { WSFC | EXTERNAL | NONE }
<add_replica_spec>::=
<server_instance> WITH
(
ENDPOINT_URL = 'TCP://system-address:port',
AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT | CONFIGURATION_ONLY },
FAILOVER_MODE = { AUTOMATIC | MANUAL | EXTERNAL }
[ , <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 = 'TCP://system-address:port' ]
} )
| SESSION_TIMEOUT = integer
<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 }
)
<listener_option> ::=
{
WITH DHCP [ ON ( <network_subnet_option> ) ]
| WITH IP ( { ( <ip_address_option> ) } [ , ...n ] ) [ , PORT = listener_port ]
}
<network_subnet_option> ::=
'ip4_address', 'four_part_ipv4_mask'
<ip_address_option> ::=
{
'ip4_address', 'pv4_mask'
| 'ipv6_address'
}
Аргументы
group_name
Указывает имя новой группы доступности.
group_name должен быть допустимым идентификатором SQL Server, и он должен быть уникальным для всех групп доступности в кластере WSFC. Максимальная длина имени группы доступности составляет 128 символов для cluster_type = WSFC
и 64 символов для cluster_type = NONE
и EXTERNAL
.
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. - Обнаружение неразрешимой взаимоблокировки. |
Примечание.
Отсутствие ответа экземпляром 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 (начиная с SQL Server 2016 (13.x))
Указывает, поддерживаются ли межбазовые транзакции с помощью координатора распределенных транзакций (DTC). Транзакции между базами данных поддерживаются только в SQL Server 2016 (13.x). PER_DB создает группу доступности с поддержкой этих транзакций. Дополнительные сведения см. в разделе Транзакции между базами данных и распределенные транзакции для групп доступности Always On и зеркального отображения базы данных (SQL Server).
BASIC
Область применения: SQL Server (начиная с SQL Server 2016 (13.x))
Используется для создания базовой группы доступности. Базовые группы доступности ограничиваются одной базы данных и двумя репликами: одной первичной и одной вторичной. Этот параметр заменяет нерекомендуемую функцию зеркального отображения базы данных в SQL Server Standard Edition. Дополнительные сведения см. в статье Базовые группы доступности (группы доступности AlwaysOn). Базовые группы доступности поддерживаются начиная с SQL Server 2016 (13.x).
DISTRIBUTED
Область применения: SQL Server (начиная с SQL Server 2016 (13.x))
Используется для создания распределенной группы доступности. Этот параметр используется с параметром AVAILABILITY GROUP ON для подключения двух групп доступности в отдельных отказоустойчивых кластерах Windows Server. Дополнительные сведения см. в статье Распределенные группы доступности (группы доступности AlwaysOn). Распределенные группы доступности поддерживаются начиная с SQL Server 2016 (13.x).
CONTAINED [REUSE_SYSTEM_DATABASES]
Впервые представлено в SQL Server 2022 (16.x).
Создает автономную группу доступности. Этот параметр используется для создания группы доступности с собственными базами данных master
и msdb
, которые синхронизируются между набором реплик в группе доступности.
Параметр REUSE_SYSTEM_DATABASES приводит к тому, что автономные базы данных master
и msdb
из предыдущей версии группы доступности будут использоваться при создании новой группы доступности. Дополнительные сведения об автономных группах доступности см. в разделе Общие сведения об автономных группах доступности (группы доступности AlwaysOn).
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
Область применения: SQL Server (начиная с SQL Server 2017 (14.x))
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, на котором размещена первичная реплика, помечает, что вторичная реплика не синхронизирована и продолжается. Когда не отвечает база данных возвращается в режим "не синхронизирована", а реплика будет помечена как неработоспособная, пока основной источник не сможет синхронизировать его снова. Этот параметр гарантирует, что первичная реплика не продолжается, пока минимальное количество реплик фиксирует каждую транзакцию. Если минимальное количество реплик недоступно, фиксация выполняется в основном сбое. Для типа кластера EXTERNAL
параметр изменяется при добавлении группы доступности в ресурс кластера. См. Высокий уровень доступности и защита данных для конфигураций группы доступности.
Не поддерживается для CREATE AVAILABILITY GROUP. Начиная с SQL Server 2022 (16.x), можно использовать ALTER AVAILABILITY GROUP для задания REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT в распределенной группе доступности. См. раздел ALTER AVAILABILITY GROUP (Transact-SQL).
CLUSTER_TYPE
Область применения: SQL Server (начиная с SQL Server 2017 (14.x)).
Используется, чтобы определить, находится ли группа доступности на отказоустойчивом кластере Windows Server (WSFC). Укажите WSFC, если группа доступности находится на экземпляре отказоустойчивого кластера в отказоустойчивом кластере Windows. Установите значение EXTERNAL, если кластер управляется диспетчером кластеров, который не является отказоустойчивой кластером Windows Server, например Linux Pacemaker. Укажите NONE, если группа доступности не использует WSFC для координации кластера. Например, если группа доступности включает серверы Linux без диспетчера кластеров.
DATABASE database_name
Указывает список одной или нескольких пользовательских баз данных на локальном экземпляре SQL Server (то есть экземпляр сервера, на котором создается группа доступности). Можно указать несколько баз данных для группы доступности, но каждая база данных может принадлежать только к одной группе доступности. Дополнительные сведения о типах баз данных, которые поддерживаются группами доступности, см. в разделе Предварительные требования, ограничения и рекомендации для групп доступности Always On (SQL Server). Чтобы узнать, какие локальные базы данных уже принадлежат группе доступности, просмотрите столбец replica_id в представлении каталога sys.databases.
Предложение DATABASE не является обязательным. Если параметр не указывается, новая группа доступности будет пустой.
После создания группы доступности подключитесь к каждому экземпляру сервера, где размещается вторичная реплика, а затем подготовьте каждую базу данных-получатель и включите ее в группу доступности. Дополнительные сведения см. в статье Запуск перемещения данных для базы данных-получателя Always On (SQL Server).
Примечание.
Затем можно добавлять готовые базы данных в экземпляре сервера, где размещается текущая первичная реплика, в группу доступности. Также можно удалять базу данных из группы доступности. Дополнительные сведения см. в статье ALTER AVAILABILITY GROUP (Transact-SQL).
REPLICA ON
Указывает от одного до пяти экземпляров SQL Server для размещения реплик доступности в новой группе доступности. Каждая реплика задается по адресу экземпляра своего сервера, за которым следует предложение WITH (…). Как минимум необходимо указать экземпляр локального сервера, который станет начальной первичной репликой. Дополнительно можно указать до четырех вторичных реплик.
Необходимо включить каждую вторичную реплику в группу доступности. Дополнительные сведения см. в статье ALTER AVAILABILITY GROUP (Transact-SQL).
Примечание.
Если при создании группы доступности указано менее четырех вторичных реплик, можно в любое время указать дополнительную вторичную реплику с помощью инструкции Transact-SQL ALTER AVAILABILITY GROUP. Эту инструкцию можно также использовать для удаления любой вторичной реплики из существующей группы доступности.
server_instance
Указывает адрес экземпляра SQL Server, который является узлом для реплики. Формат адреса зависит от того, является ли экземпляр по умолчанию или именованным экземпляром и является ли он автономным экземпляром или экземпляром отказоустойчивого кластера (FCI), как показано ниже.
{ '*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, и включена служба HADR. Для экземпляра сервера по умолчанию указывать параметр имя_экземпляра не обязательно. В именах экземпляров не учитывается регистр символов. На именованном экземпляре это имя значения совпадает со значением, возвращаемым при выполнении select ServerProperty(N'InstanceName');
.
\
Разделитель, используемый только при указании значения instance_name для отделения от аргументов system_name или FCI_network_name.
Дополнительные сведения о предварительных требованиях для узлов WSFC и экземпляров серверов см. в разделе Предварительные требования, ограничения и рекомендации для групп доступности Always On (SQL Server).
ENDPOINT_URL ='TCP://system-address:port'
Указывает путь URL-адреса для конечной точки зеркального отображения базы данных на экземпляре SQL Server, на котором размещена реплика доступности, определяемая в текущем предложении REPLICA ON.
Предложение ENDPOINT_URL является обязательным. Дополнительные сведения см. в разделе Выбор 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 или ASYNCHRONOUS_COMMIT Указывает, должна ли первичная реплика ждать подтверждения фиксации (записи) записей журнала на диск от вторичной реплики перед тем, как фиксировать транзакцию в указанной базе данных. Фиксация транзакций в других базах данных, расположенных в этой первичной реплике, может выполняться независимо. В SQL Server 2017 (14.x) с CU1 доступен новый вариант CONFIGURATION_ONLY. Реплика CONFIGURATION_ONLY применяется только к группам доступности с CLUSTER_TYPE = EXTERNAL
или CLUSTER_TYPE = NONE
.
SYNCHRONOUS_COMMIT
Указывает, что первичная реплика может фиксировать транзакции только после их записи на данной вторичной реплике (режим синхронной фиксации). Вы можете указать SYNCHRONOUS_COMMIT не более чем для трех реплик, включая первичную.
ASYNCHRONOUS_COMMIT
Указывает, что первичная реплика фиксирует транзакции без ожидания записи журнала на данной вторичной реплике (режим доступности синхронной фиксации). Вы можете указать ASYNCHRONOUS_COMMIT не более чем для пяти реплик доступности, включая первичную реплику.
CONFIGURATION_ONLY
Указывает, что первичная реплика синхронно фиксирует метаданные конфигурации группы доступности в базе данных master этой реплики. Реплика не будет содержать пользовательские данные. Этот параметр:
Может размещаться в любом выпуске SQL Server, включая экспресс-выпуск.
Требует, чтобы конечная точка зеркального отображения данных реплики CONFIGURATION_ONLY имела тип
WITNESS
.Невозможно изменить.
Недопустимо, если
CLUSTER_TYPE = WSFC
.Параметры
failover_mode
иseeding_mode
не поддерживаются, еслиavailability_mode
задано значениеconfiguration_only
для реплики. Пример показан здесь.Дополнительные сведения см. в разделе Реплика только с конфигурацией.
Предложение AVAILABILITY_MODE является обязательным. Дополнительные сведения см. в разделе Режимы доступности (группы доступности Always On).
FAILOVER_MODE = { AUTOMATIC | MANUAL }
Указывает режим отработки отказа реплики доступности, которую вы определяете.
AUTOMATIC
Включает автоматический переход на другой ресурс. Этот параметр поддерживается только в том случае, если также указывается AVAILABILITY_MODE = SYNCHRONOUS_COMMIT. Значение AUTOMATIC можно задать для двух реплик доступности, включая первичную.
Примечание.
Экземпляры отказоустойчивого кластера SQL Server (FCIs) не поддерживают автоматическую отработку отказа по группам доступности, поэтому любая реплика доступности, размещенная FCI, может быть настроена только для отработки отказа вручную.
MANUAL
Позволяет администратору базы данных осуществлять переход на другой ресурс вручную по плану или принудительно (обычно это называется принудительным переходом на другой ресурс).
Предложение FAILOVER_MODE является обязательным. Существует два вида перехода на другой ресурс вручную: переход на другой ресурс вручную без потери данных и принудительный переход на другой ресурс (с возможной потерей данных), которые поддерживаются в зависимости от различных условий. Дополнительные сведения см. в разделе Отработка отказа и режимы отработки отказа (группы доступности 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 указывает, что эта реплика доступности не предназначена для выполнения резервных копий. Этот параметр может быть полезным, например, для исключения удаленной реплики доступности, создание резервных копий на которой нежелательно.
Дополнительные сведения см. в активных вторичных файлов: резервное копирование на вторичные реплики (группы доступности AlwaysOn).
SECONDARY_ROLE ( ... )
Указывает параметры, зависящие от ролей, которые вступают в силу, если эта реплика доступности в настоящее время владеет вторичной ролью (т. е. всякий раз, когда это вторичная реплика). В скобках укажите один или два параметра вторичной роли. Если указываются оба параметра, используйте список с разделителями-запятыми.
Параметры вторичной роли:
ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL }
Указывает, могут ли базы данных заданной реплики доступности, играющей роль вторичной (т. е. служащей вторичной репликой), принимать соединения от клиентов. Может принимать одно из следующих значений:
Нет
Для баз данных-получателей этой реплики соединения пользователя не разрешаются. Они недоступны для доступа на чтение. Это поведение принимается по умолчанию.
READ_ONLY
Разрешаются только соединения с базами данных во вторичной реплике, у которых свойство "Назначение приложения" имеет значение ReadOnly. Дополнительные сведения об этом свойстве см. в разделе Использование ключевых слов строки подключения с SQL Server Native Client.
ВСЕ
К базам данных во вторичной реплике разрешаются все соединения на доступ только для чтения.
Дополнительные сведения см. в разделе Активные вторичные реплики. Доступные только для чтения вторичные реплики (группы доступности Always On).
READ_ONLY_ROUTING_URL ='TCP://system-address:port'
Указывает URL-адрес, используемый для маршрутизации запросов на соединение с намерением чтения к этой реплике доступности. Этот URL-адрес прослушивается компонентом ядра СУБД. Обычно экземпляр по умолчанию компонента 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 или свойство подключения "Намерение приложения" не задано, подключение разрешено. Дополнительные сведения о свойстве соединения "Назначение приложения" см. в разделе Использование ключевых слов строки подключения с 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
Указывает, что если эта реплика доступности является основной репликой, маршрутизация только для чтения не поддерживается. Это поведение принимается по умолчанию.
READ_WRITE_ROUTING_URL ='TCP://системного адреса:порт'
Область применения: SQL Server (начиная с SQL Server 2019 (15.x))
Определяет экземпляры сервера, на которых размещаются реплики доступности для этой группы доступности в соответствии со следующими требованиями при выполнении в первичной роли.
- Спецификация реплики PRIMARY_ROLE содержит READ_WRITE_ROUTING_URL.
- Строке подключения задается значение ReadWrite. Для этого параметру ApplicationIntent задается значение ReadWrite или не задается ничего, чтобы использовалось значение по умолчанию (ReadWrite).
Дополнительные сведения см. в статье Перенаправление подключения с правами на чтение и запись с вторичной на первичную реплику (группы доступности AlwaysOn).
SESSION_TIMEOUT = integer
Указывает интервал времени ожидания сеанса в секундах. Если этот параметр не указан, по умолчанию период времени составляет 10 секунд. Минимальное значение составляет 5 секунд.
Внимание
Рекомендуется установить интервал времени ожидания в 10 секунд или более.
Дополнительные сведения о периоде времени ожидания сеанса см. в разделе Обзор групп доступности Always On (SQL Server).
AVAILABILITY GROUP ON
Указывает две группы доступности, составляющие распределенную группу доступности. Каждая группа доступности является частью своего отказоустойчивого кластера Windows Server (WSFC). Когда вы создаете распределенную группу доступности, группа доступности на текущем экземпляре SQL Server становится первичной группой доступности. Вторая группа доступности становится вторичной группой доступности.
Присоедините вторичную группу доступности к распределенной группе доступности. Дополнительные сведения см. в статье ALTER AVAILABILITY GROUP (Transact-SQL).
ag_name
Указывает имя группы доступности, составляющей половину распределенной группы доступности.
LISTENER_URL ='TCP://system-address:port'
Указывает URL-адрес пути для прослушивателя, связанного с группой доступности.
Требуется предложение LISTENER_URL.
'TCP://system-address:port'
Указывает URL-адрес для прослушивателя, связанного с группой доступности. Параметры URL-адреса:
system-address
Это строка, такая как имя системы, полное доменное имя или IP-адрес, однозначно идентифицирующая прослушивателя.
port
Номер порта, связанный с конечной точкой зеркального отображения группы доступности. Обратите внимание, что это не порт прослушивателя.
AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT | CONFIGURATION_ONLY }
Указывает, должна ли первичная реплика ждать подтверждения фиксации (записи) записей журнала на диск от вторичной группы доступности перед тем, как фиксировать транзакцию в указанной базе данных.
SYNCHRONOUS_COMMIT
Указывает, что первичная реплика может фиксировать транзакции только после их записи во вторичной группе доступности. Вы можете указать SYNCHRONOUS_COMMIT не более чем для двух групп доступности, включая первичную группу доступности.
ASYNCHRONOUS_COMMIT
Указывает, что первичная реплика фиксирует транзакции без ожидания записи журнала от вторичной группы доступности. Вы можете указать ASYNCHRONOUS_COMMIT не более чем для двух групп доступности, включая первичную группу доступности.
Предложение AVAILABILITY_MODE является обязательным.
FAILOVER_MODE = { MANUAL }
Указывает режим отработки отказа распределенной группы доступности.
MANUAL
Позволяет администратору базы данных осуществлять переход на другой ресурс вручную по плану или принудительно (обычно это называется принудительным переходом на другой ресурс).
Предложение FAILOVER_MODE является обязательным, а единственный параметр — MANUAL. Автоматическая отработка отказа в вторичную группу доступности не поддерживается.
SEEDING_MODE = { AUTOMATIC | MANUAL }
Указывает, как вторичная группа доступности изначально заполняется данными.
AUTOMATIC
Включает прямое первоначальное заполнение. Этот метод будет заполнять вторичную группу доступности начальными значениями по сети. Этот метод не требует резервного копирования и восстановления копии базы данных-источника в репликах вторичной группы доступности.
MANUAL
Указывает на присвоение начальных значений вручную (по умолчанию). В этом методе вы создаете резервную копию базы данных на первичной реплике и вручную восстанавливаете эту резервную копию на репликах вторичной группы доступности.
LISTENER 'dns_name'( listener_option )
Определяет новый прослушиватель группы доступности. Аргумент LISTENER является необязательным.
Внимание
Перед созданием первого прослушивателя настоятельно рекомендуется ознакомиться с разделом Создание или настройка прослушивателя группы доступности (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 см. в разделе Присвоение имен доменов.
listener_option
Аргумент LISTENER принимает один из следующих параметров <параметр_прослушивателя>:
WITH DHCP [ ON { ('four_part_ipv4_address','four_part_ipv4_mask') } ]
Указывает, что прослушиватель группы доступности использует протокол DHCP. Дополнительно можно использовать предложение ON, чтобы определить сеть, для которой создается прослушиватель. Протокол DHCP имеет ограничение на работу только с одной подсетью для каждого экземпляра сервера, на котором размещается реплика в группе доступности.
Внимание
Не рекомендуется использовать DHCP в рабочей среде. Если истекает время простоя, а срок аренды DHCP-IP-адреса истекает, требуется дополнительное время для регистрации нового 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') )
ip4_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
Предварительные требования и ограничения
Сведения о предварительных требованиях к созданию групп доступности см. в статье Предварительные требования, ограничения и рекомендации для групп доступности AlwaysOn (SQL Server).
Сведения об ограничениях для инструкции AVAILABILITY GROUP языка Transact-SQL см. в разделе Общие сведения об инструкциях Transact-SQL для групп доступности Always On (SQL Server).
Безопасность
Разрешения
Требуется членство в фиксированной роли сервера sysadmin и одно из разрешений: CREATE AVAILABILITY GROUP, ALTER ANY AVAILABILITY GROUP или CONTROL SERVER.
Примеры
А. Настройка резервного копирования на вторичных репликах, гибких политик обработки отказов и доступа к соединению
В следующем примере создается группа доступности MyAg
для двух пользовательских баз данных, ThisDatabase
и ThatDatabase
. В следующей таблице представлена сводка значений для параметров, установленных для группы доступности в целом.
Параметр группы | Параметр | Description |
---|---|---|
AUTOMATED_BACKUP_PREFERENCE | SECONDARY | Параметр предпочтения автоматического резервного копирования указывает, что резервное копирование должно выполняться на вторичной реплике, за исключением тех случаев, когда в режиме «в сети» находится только первичная реплика (это режим по умолчанию). Чтобы параметр AUTOMATED_BACKUP_PREFERENCE как-то влиял на работу, необходимо создать скрипт заданий резервного копирования для баз данных доступности, чтобы они принимали в расчет предпочтения автоматического резервного копирования. |
FAILURE_CONDITION_LEVEL | 3 | Настройка уровня условия сбоя указывает, что следует запустить автоматический переход на другой ресурс в случае появления критических внутренних ошибок SQL Server, таких как потерянные спин-блокировки, серьезные нарушения доступа для записи или формирование слишком больших дампов. |
HEALTH_CHECK_TIMEOUT | 600 000 | Значение времени ожидания проверки работоспособности в 60 секунд указывает, что кластер WSFC будет ожидать в течение 60 000 миллисекунд, пока системная хранимая процедура sp_server_diagnostics не вернет сведения о работоспособности экземпляра сервера, на котором размещена реплика с синхронной фиксацией с автоматическим копированием, а затем кластер предположит, что экземпляр основного сервера работает медленно или завис. (Значение по умолчанию — 30 000 миллисекунд). |
Три реплики доступности должны быть размещены на экземплярах сервера по умолчанию на компьютерах с именами COMPUTER01
, COMPUTER02
и COMPUTER03
. В следующей таблице приведена сводка значений, указанных в качестве параметров каждой реплики.
Параметр реплики | Настройка на COMPUTER01 |
Настройка на COMPUTER02 |
Настройка на COMPUTER03 |
Description |
---|---|---|---|---|
ENDPOINT_URL | TCP://COMPUTER01:5022 | TCP://COMPUTER02:5022 | TCP://COMPUTER03:5022 | В этом примере системы находятся в одном домене, поэтому URL-адреса конечной точки могут использовать имена компьютерной системы в качестве системного адреса. |
AVAILABILITY_MODE | SYNCHRONOUS_COMMIT | SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT | Две реплики используют режим синхронной фиксации. При синхронизации они поддерживают отработку отказа без потери данных. Третья реплика использует режим доступности с асинхронной фиксацией. |
FAILOVER_MODE | AUTOMATIC | AUTOMATIC | MANUAL | Реплики с синхронной фиксацией поддерживают автоматический переход на другой ресурс и запланированный переход на другой ресурс вручную. Реплика режима доступности с синхронной фиксацией поддерживает только принудительный переход на другой ресурс вручную. |
BACKUP_PRIORITY | 30 | 30 | 90 | Более высокий приоритет со значением 90 назначается реплике с асинхронной фиксацией, а не репликам с синхронной фиксацией. События резервного копирования чаще происходят на том экземпляре сервера, на котором размещена реплика с асинхронной фиксацией. |
SECONDARY_ROLE | ( ALLOW_CONNECTIONS = NO, READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01:1433' ) |
( ALLOW_CONNECTIONS = NO, READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02:1433' ) |
( ALLOW_CONNECTIONS = READ_ONLY, READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03:1433' ) |
В качестве вторичной реплики с доступом для чтения может служить только реплика с асинхронной фиксацией. Указывает имя компьютера и номер порта компонента ядра СУБД по умолчанию (1433). Этот аргумент является необязательным. |
PRIMARY_ROLE | ( ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (COMPUTER03) ) |
( ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (COMPUTER03) ) |
( ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = NONE ) |
В основной роли все реплики отвергают попытки подключения, направленные на чтение данных. Запросы на соединение с намерением чтения направляются на компьютер COMPUTER03, если локальная реплика работает с вторичной ролью. Если эта реплика работает с первичной ролью, то маршрутизация только для чтения отключается. Этот аргумент является необязательным. |
SESSION_TIMEOUT | 10 | 10 | 10 | В этом примере указано значение времени ожидания завершения сеанса по умолчанию (10). Этот аргумент является необязательным. |
И наконец, в примере указано необязательное предложение LISTENER, предназначенное для создания прослушивателя группы доступности для новой группы доступности. Для этого прослушивателя задается уникальное имя DNS — MyAgListenerIvP6
. Две реплики находятся в разных подсетях, поэтому прослушивателю необходимо использовать статические IP-адреса. Для каждой из двух реплик доступности предложение WITH IP указывает статический IP-адрес 2001:4898:f0:f00f::cf3c
и 2001:4898:e0:f213::4ce2
, использующий формат IPv6. В этом примере также используется необязательный аргумент PORT, чтобы указать порт 60173
в качестве порта прослушивателя.
CREATE AVAILABILITY GROUP MyAg
WITH (
AUTOMATED_BACKUP_PREFERENCE = SECONDARY,
FAILURE_CONDITION_LEVEL = 3,
HEALTH_CHECK_TIMEOUT = 600000
)
FOR
DATABASE ThisDatabase, ThatDatabase
REPLICA ON
'COMPUTER01' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER01:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = AUTOMATIC,
BACKUP_PRIORITY = 30,
SECONDARY_ROLE (ALLOW_CONNECTIONS = NO,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = (COMPUTER03) ),
SESSION_TIMEOUT = 10
),
'COMPUTER02' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER02:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = AUTOMATIC,
BACKUP_PRIORITY = 30,
SECONDARY_ROLE (ALLOW_CONNECTIONS = NO,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = (COMPUTER03) ),
SESSION_TIMEOUT = 10
),
'COMPUTER03' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER03:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
BACKUP_PRIORITY = 90,
SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = NONE ),
SESSION_TIMEOUT = 10
);
GO
ALTER AVAILABILITY GROUP [MyAg]
ADD LISTENER 'MyAgListenerIvP6' ( WITH IP ( ('2001:db88:f0:f00f::cf3c'),('2001:4898:e0:f213::4ce2') ) , PORT = 60173 );
GO
Связанные задачи
Использование мастера создания групп доступности (SQL Server Management Studio)
Использование диалогового окна "Создание группы доступности" (SQL Server Management Studio)
Использование мастера создания групп доступности (SQL Server Management Studio)
См. также
ALTER AVAILABILITY GROUP (Transact-SQL)
ALTER DATABASE SET HADR (Transact-SQL)
DROP AVAILABILITY GROUP (Transact-SQL)
Поиск и устранение неисправностей конфигурации групп доступности AlwaysOn (SQL Server)
Обзор групп доступности Always On (SQL Server)
Прослушиватели групп доступности, возможность подключения клиентов и отработка отказа приложений (SQL Server)