Зеркальное отображение базы данных ALTER DATABASE (Transact-SQL)

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

Примечание.

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

Управляет зеркальным отображением базы данных. Значения, указанные с параметрами зеркального отображения базы данных, применяются к обеим копиям базы данных и к сеансу зеркального отображения базы данных в целом. В инструкции ALTER DATABASE допустим только один параметр <database_mirroring_option>.

Примечание.

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

Параметры ALTER DATABASE см. в статье ALTER DATABASE (Transact-SQL). Параметры ALTER DATABASE SET см. в статье Параметры ALTER DATABASE SET (Transact-SQL).

Соглашения о синтаксисе Transact-SQL

Синтаксис


ALTER DATABASE database_name
SET { <partner_option> | <witness_option> }
  <partner_option> ::=
    PARTNER { = 'partner_server'
            | FAILOVER
            | FORCE_SERVICE_ALLOW_DATA_LOSS
            | OFF
            | RESUME
            | SAFETY { FULL | OFF }
            | SUSPEND
            | TIMEOUT integer
            }
  <witness_option> ::=
    WITNESS { = 'witness_server'
            | OFF
            }
  

Примечание.

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

Аргументы

Внимание

Команда SET PARTNER или SET WITNESS может быть завершена успешно, но позднее — привести к ошибке.

Примечание.

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

database_name — имя изменяемой базы данных.

PARTNER <partner_option> — управляет свойствами базы данных, которые определяют сущности и поведение партнеров по обеспечению отработки отказа при сбоях сеанса зеркального отображения базы данных. Некоторые параметры инструкции SET PARTNER могут быть установлены на любом участнике; другие — разграничены для основного или для зеркального сервера. Дополнительные сведения см. в следующем описании индивидуальных параметров PARTNER. Предложение SET PARTNER влияет на обе копии базы данных независимо от участника, на которого оно указывает.

Для выполнения инструкции SET PARTNER требуется, чтобы параметры STATE конечных точек обоих участников имели значение STARTED. Также учтите, что параметр ROLE конечной точки зеркального отображения базы данных каждого экземпляра сервера-участника должен быть установлен в состояние PARTNER или ALL. Сведения об указании конечной точки см. в статье Создание конечной точки зеркального отображения базы данных с проверкой подлинности Windows (Transact-SQL). Чтобы узнать роль и состояние базы данных конечной точки зеркального отображения экземпляра сервера, выполните на этом экземпляре следующую инструкцию Transact-SQL:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

<partner_option> ::=

Примечание.

В предложении SET PARTNER допустим только один аргумент <partner_option>.

'partner_server' — указывает сетевой адрес сервера экземпляра SQL Server, чтобы задействовать его как партнера по обеспечению отработки отказа в новом сеансе зеркального отображения базы данных. Для каждого сеанса необходимы два участника: один запускается как основной сервер, второй — как зеркальный сервер. Рекомендуется, чтобы эти партнеры находились на разных компьютерах.

Этот параметр указывается один раз для сеанса на каждом участнике. Для инициализации сеанса зеркального отображения базы данных необходимо выполнить две инструкции ALTER DATABASE database SET PARTNER ='partner_server'. Их порядок важен. Вначале подключитесь к зеркальному серверу и укажите основной экземпляр сервера как partner_server (SET PARTNER ='principal_server'). Затем подключитесь к основному серверу и укажите зеркальный экземпляр сервера как partner_server (SET PARTNER ='mirror_server'); в результате запустится сеанс зеркального отображения базы данных между этими двумя партнерами. Дополнительные сведения см. в статье Настройка зеркального отображения базы данных (SQL Server).

Значением аргумента partner_server является сетевой адрес сервера. Оно имеет следующий синтаксис:

TCP**://<system-address>:**<port>

где

  • <system-address>> — это строка, которая содержит имя системы, полное доменное имя или IP-адрес, однозначно идентифицирующие целевую компьютерную систему.
  • <port> — это номер порта, связанный с конечной точкой зеркального отображения на экземпляре сервера партнера.

Дополнительные сведения см. в статье Указание сетевого адреса сервера (зеркальное отображение базы данных).

В следующем примере показано предложение SET PARTNER ='partner_server':

'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'

Внимание

Если сеанс создавался с помощью инструкции ALTER DATABASE, а не в среде SQL Server Management Studio, он будет по умолчанию установлен с полной безопасностью транзакций (параметр SAFETY имеет значение FULL) и будет работать в режиме повышенной безопасности без возможности автоматической отработки отказа. Чтобы разрешить автоматическую отработку отказа, настройте следящий сервер для работы в режиме высокой производительности и отключите безопасность транзакций (SAFETY OFF).

FAILOVER — обеспечивает ручное переключение с основного сервера на зеркальный при сбое. Параметр FAILOVER можно указать только на основном сервере. Этот параметр допустим только в том случае, если параметр SAFETY установлен в состояние FULL (значение по умолчанию).

Для параметра FAILOVER контекстом должна быть база данных master.

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

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

  • основной сервер недоступен;
  • параметр WITNESS установлен в состояние OFF или свидетель подключен к зеркальному серверу.

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

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

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

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

SAFETY { FULL | OFF } — устанавливает уровень безопасности транзакций. Параметр SAFETY можно указать только на основном сервере.

Значение по умолчанию FULL. При полном уровне безопасности сеанс зеркального отображения базы данных выполняется синхронно (в режиме повышенной безопасности). Если параметр SAFETY находится в состоянии OFF, сеанс зеркального отображения базы данных выполняется асинхронно (в высокопроизводительном режиме).

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

  • Если безопасность установлена в состояние FULL и для сеанса установлен следящий сервер, то сеанс выполняется в режиме повышенной безопасности с автоматической отработкой отказа. Когда основной сервер становится недоступным, сеанс автоматически переключается на другой ресурс при условии, что база данных находится в синхронном состоянии, а экземпляры зеркального и следящего серверов остаются подключенными друг к другу (имеют кворум). Дополнительные сведения см. в разделе кворум: как следящий сервер влияет на доступность базы данных — зеркальное отображение базы данных.

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

  • Если безопасность установлена в состояние FULL, а следящий сервер находится в состоянии OFF, сеанс выполняется в режиме повышенной безопасности без возможности автоматической отработки отказа. При отказе экземпляра зеркального сервера экземпляр основного сервера остается незатронутым. При отказе экземпляра основного сервера можно переключить обслуживание на экземпляр зеркального сервера (с возможной потерей данных).

  • Если параметр SAFETY установлен в состояние OFF, сеанс выполняется в высокопроизводительном режиме, в котором ни автоматическая отработка отказа, ни отработка отказа вручную не поддерживаются. Однако проблемы на зеркальном сервере не затрагивают основной сервер, и, если экземпляр основного сервера отключается, при необходимости можно переключить обслуживание (с возможной потерей данных) на экземпляр зеркального сервера, если параметр WITNESS установлен в состояние OFF или если следящий сервер в настоящее время подключен к зеркальному серверу. Дополнительные сведения о переключении обслуживания см. в подразделе «FORCE_SERVICE_ALLOW_DATA_LOSS», расположенном выше в этом разделе.

Внимание

Режим высокой производительности не предназначен для использования свидетеля. Однако всякий раз, когда параметру SAFETY присваивается значение OFF, настоятельно рекомендуется проверить, что параметр WITNESS находится в состоянии OFF.

SUSPEND приостанавливает сеанс зеркального отображения базы данных.

Значение SUSPEND можно указать на любом участнике.

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

Параметр TIMEOUT можно указать только на основном сервере. Если этот параметр не определить, интервал времени по умолчанию — 10 секунд. При указании числа 5 или больше интервал времени ожидания будет установлен в указанное количество секунд. При указании значения интервала времени ожидания от 0 до 4 секунд интервал времени ожидания автоматически будет установлен в 5 секунд.

Внимание

Рекомендуется установить интервал времени ожидания в 10 секунд или более. При установке значения меньше 10 секунд возникает вероятность пропуска команды PING в сильно загруженной системе и вероятность ошибочного сообщения об ошибке.

Дополнительные сведения см. в статье Possible Failures During Database Mirroring.

WITNESS <witness_option> — управляет свойствами базы данных, которые определяют свидетеля зеркального отображения базы данных. Предложение SET WITNESS влияет на обе копии базы данных, указать его можно только на основном сервере. Если для сеанса задан свидетель, кворум требуется для обслуживания базы данных независимо от параметра SAFETY; Дополнительные сведения см. в разделе кворум: как свидетель влияет на доступность базы данных — зеркальное отображение базы данных.

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

Для выполнения инструкции SET WITNESS параметр STATE конечных точек экземпляров основного и следящего сервера должен быть установлен в состояние STARTED. Также учтите, что параметр ROLE конечной точки зеркального отображения базы данных экземпляра следящего сервера должен быть установлен в состояние PARTNER или ALL. Сведения об определении конечной точки см. в статье Конечная точка зеркального отображения базы данных (SQL Server).

Чтобы узнать роль и состояние базы данных конечной точки зеркального отображения экземпляра сервера, выполните на этом экземпляре следующую инструкцию Transact-SQL:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

Примечание.

Свойства базы данных не могут быть установлены на свидетеле.

<witness_option> ::=

Примечание.

В предложении SET WITNESS допустим только один параметр <witness_option>.

'witness_server' — указывает экземпляр ядра СУБД, чтобы задействовать его в качестве следящего сервера для сеанса зеркального отображения базы данных. Инструкции SET WITNESS можно указывать только на основном сервере.

В инструкции SET WITNESS ='witness_server' statement, the syntax of witness_server такой же, как синтаксис параметра partner_server.

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

Замечания

Примеры

А. Создание сеанса зеркального отображения базы данных со свидетелем

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

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

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

SELECT db.name, m.mirroring_role_desc
FROM sys.database_mirroring m
JOIN sys.databases db
ON db.database_id = m.database_id
WHERE db.name = N'AdventureWorks2022';
GO

Если экземпляр сервера действительно является основным, значением mirroring_role_desc будет Principal. Если этот экземпляр сервера был зеркальным сервером, инструкция SELECT возвратит Mirror.

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

  1. Ручной переход на другой ресурс участника зеркального отображения базы данных:

    ALTER DATABASE AdventureWorks2022 SET PARTNER FAILOVER;
    GO
    
  2. Чтобы проверить результаты отработки отказа на новое зеркало, выполните следующий запрос:

    SELECT db.name, m.mirroring_role_desc
    FROM sys.database_mirroring m
    JOIN sys.databases db
    ON db.database_id = m.database_id
    WHERE db.name = N'AdventureWorks2022';
    GO
    

Текущее значение параметра mirroring_role_desc теперь Mirror.

См. также