Поделиться через


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

Управляет зеркальным отображением базы данных. Значения, указанные с параметрами зеркального отображения базы данных, применяются к обеим копиям базы данных и к сеансу зеркального отображения базы данных в целом. В инструкции 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 
            }

Аргументы

Важное примечаниеВажно!

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

  • 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'); в результате запустится сеанс зеркального отображения базы данных между этими двумя партнерами. Дополнительные сведения см. в разделе Настройка зеркального отображения базы данных.

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

      TCP**://<адрес_системы>:**<порт>

      где

      • <адрес_системы> является строкой, полностью уточняющей имя домена или IP адрес, который однозначно идентифицирует целевую компьютерную систему;

      • <порт> — это номер порта, связанного с конечной точкой зеркального отображения, принадлежащей экземпляру партнерского сервера.

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

      В следующем примере показано предложение 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 можно указать для любого из партнеров. Дополнительные сведения о последствиях отключения зеркального отображения см. в разделе Удаление зеркального отображения базы данных.

    • 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.

      Дополнительные сведения см. в разделе Настройки Transact-SQL и режимы зеркального отображения базы данных.

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

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

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

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

      Важное примечаниеВажно!

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

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

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

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

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

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

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    
    ПримечаниеПримечание

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

    <witness_option> ::=

    ПримечаниеПримечание

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

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

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

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

Примеры

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

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

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

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

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'AdventureWorks'; 
GO

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

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

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

    ALTER DATABASE AdventureWorks 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'AdventureWorks'; 
    GO
    

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