Подготовка базы данных-получателя для присоединения к группе доступности Always On

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

В этом разделе описывается подготовка базы данных для группы доступности AlwaysOn в SQL Server с помощью среды SQL Server Management Studio, Transact-SQL или PowerShell. Подготовка базы данных выполняется в два этапа:

  1. Восстановление базы данных из последней резервной копии базы данных-источника и соответствующих резервных копий журнала на каждом экземпляре сервера, где размещена вторичная реплика доступности, при помощи инструкции RESTORE WITH NORECOVERY.
  2. Присоединение восстановленной базы данных к группе доступности.

Совет

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

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

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

  • Имя базы данных-получателя должно совпадать с именем базы данных-источника.

  • Для каждой операции восстановления используйте инструкцию RESTORE WITH NORECOVERY.

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

  • При восстановлении файловой группы базы данных по файловой группе следует восстановить базу данных целиком.

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

Рекомендации

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

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

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

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

Разрешения

Разрешения BACKUP DATABASE и BACKUP LOG назначены по умолчанию членам предопределенной роли сервера sysadmin и предопределенным ролям базы данных db_owner и db_backupoperator . Дополнительные сведения см. в разделе BACKUP (Transact-SQL).

Если восстанавливаемая база данных не существует на нужном экземпляре сервера, для выполнения инструкции RESTORE требуются разрешения CREATE DATABASE. Дополнительные сведения см. в статье Инструкция RESTORE (Transact-SQL).

Используйте SQL Server Management Studio.

Примечание

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

Подготовка базы данных-получателя

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

  2. Создайте минимум одну новую резервную копию журнала базы данных-источника.

Примечание

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

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

    На странице RESTORE DATABASE Options (Параметры RESTORE DATABASE) выберите параметр Leave the database non-operational, and do not roll back the uncommitted transactions. Additional transaction logs can be restored. (RESTORE WITH NORECOVERY) (Оставить базу данных в неработающем состоянии и не выполнять откат незафиксированных транзакций. Можно восстановить дополнительные журналы транзакций. (RESTORE WITH NORECOVERY)).

    Если пути к файлам базы данных-источника и базы данных-получателя отличаются, например если соответствующие основные базы данных находятся на диске «F:», но на экземпляре сервера, на котором размещена дополнительная реплика, нет диска «F:», используйте параметр MOVE в предложении WITH.

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

Примечание

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

Связанные задачи резервного копирования и восстановления

Создание резервной копии базы данных

Создание резервной копии журнала

Восстановление резервных копий

Использование Transact-SQL

Подготовка базы данных-получателя

Примечание

Пример этой процедуры см. в подразделе Пример (Transact-SQL)ранее в этом разделе.

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

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

    Если пути к файлам базы данных-источника и базы данных-получателя отличаются, например если соответствующие основные базы данных находятся на диске «F:», но на экземпляре сервера, на котором размещена дополнительная реплика, нет диска «F:», используйте параметр MOVE в предложении WITH.

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

    Примечание

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

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

Примечание

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

Пример (Transact-SQL)

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

  1. Чтобы использовать базу данных AdventureWorks2022 , следует ее изменить так, чтобы использовалась модель полного восстановления:

    USE master;  
    GO  
    ALTER DATABASE MyDB1   
    SET RECOVERY FULL;  
    GO  
    
  2. После изменения модели восстановления с SIMPLE на FULL создайте полную резервную копию, с помощью которой затем можно будет создать базу данных-получатель. Так как модель восстановления только что была изменена, указывается параметр WITH FORMAT для создания нового набора носителей. Это полезно для отделения резервных копий при модели полного восстановления от резервных копий, сделанных при простой модели восстановления. В этом примере файл резервной копии (C:\AdventureWorks2022.bak) создается на том же диске, что и база данных.

    Примечание

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

    На экземпляре сервера, на котором размещена основная реплика (INSTANCE01), создайте полную резервную копию базы данных-источника, выполнив следующие действия.

    BACKUP DATABASE MyDB1   
        TO DISK = 'C:\MyDB1.bak'   
        WITH FORMAT  
    GO  
    
  3. Скопируйте полную резервную копию на экземпляр сервера, на котором размещается вторичная реплика.

  4. На сервере, на котором размещена вторичная реплика, восстановите полную резервную копию с помощью инструкции RESTORE WITH NORECOVERY. Команда восстановления зависит от того, идентичны ли пути к базе данных-источнику и базе данных-получателю.

    • Если пути идентичны:

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

      RESTORE DATABASE MyDB1   
          FROM DISK = 'C:\MyDB1.bak'   
          WITH NORECOVERY  
      GO  
      
    • Если пути отличаются:

      Если путь к базе данных-получателю отличается от пути к базе данных-источнику (например, отличаются имена дисков), то для создания базы данных-получателя в операцию восстановления нужно будет добавить предложение MOVE.

      Важно!

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

      Например, следующая команда восстанавливает базу данных-источник из резервной копии, размещенной в каталоге данных экземпляра SQL Serverпо умолчанию, C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA. Операция восстановления базы данных должна переместить базы данных в каталог удаленного экземпляра SQL Server с именем (Always On1), на котором размещается вторичная реплика на другом узле кластера. Там файлы данных и журнала восстанавливаются в каталог C:\Program Files\Microsoft SQL Server\MSSQL13.On1\MSSQL\DATA . Операция восстановления использует параметр WITH NORECOVERY, чтобы оставить базу данных-получатель в восстанавливающейся базе данных.

      RESTORE DATABASE MyDB1  
        FROM DISK='C:\MyDB1.bak'  
       WITH NORECOVERY,   
          MOVE 'MyDB1_Data' TO   
           'C:\Program Files\Microsoft SQL Server\MSSQL13.Always On1\MSSQL\DATA\MyDB1_Data.mdf',   
          MOVE 'MyDB1_Log' TO  
           'C:\Program Files\Microsoft SQL Server\MSSQL13.Always On1\MSSQL\DATA\MyDB1_Data.ldf';  
      GO  
      
  5. После того как полная резервная копия базы данных будет восстановлена, необходимо создать резервную копию журнала базы данных-источника. Например, следующая инструкция Transact-SQL выполняет резервное копирование журнала в файл резервной копии с именем E:\MyDB1_log.trn:

    BACKUP LOG MyDB1   
      TO DISK = 'E:\MyDB1_log.trn'   
    GO  
    
  6. Перед присоединением базы данных к вторичной реплике необходимо применить эту обязательную резервную копию журнала (и все последующие резервные копии журнала).

    Например, следующая инструкция Transact-SQL восстанавливает первый журнал из файла C:\MyDB1.trn:

    RESTORE LOG MyDB1   
      FROM DISK = 'E:\MyDB1_log.trn'   
        WITH FILE=1, NORECOVERY  
    GO  
    
  7. Если перед присоединением базы данных-получателя будут созданы любые дополнительные резервные копии журнала, необходимо будет последовательно восстановить все эти резервные копии журналов на том экземпляре сервера, на котором размещена вторичная реплика. При этом необходимо использовать инструкцию RESTORE WITH NORECOVERY.

    Например, следующая инструкция Transact-SQL восстанавливает два дополнительных журнала из файла E:\MyDB1_log.trn:

    RESTORE LOG MyDB1   
      FROM DISK = 'E:\MyDB1_log.trn'   
        WITH FILE=2, NORECOVERY  
    GO  
    RESTORE LOG MyDB1   
      FROM DISK = 'E:\MyDB1_log.trn'   
        WITH FILE=3, NORECOVERY  
    GO  
    

Использование PowerShell

Подготовка базы данных-получателя

  1. Если резервная копия базы данных-источника отсутствует и вы создаете ее самостоятельно, перейдите в каталог (cd) экземпляра сервера, на котором размещена первичная реплика.

  2. Используйте командлет Backup-SqlDatabase , чтобы создать каждую их этих резервных копий.

  3. Перейдите в каталог (cd) экземпляра сервера, на котором размещается вторичная реплика.

  4. Чтобы восстановить резервные копии базы данных и журналов для каждой базы данных-источника, используйте командлет restore-SqlDatabase , указывая параметр восстановления NoRecovery . Если пути к файлам различны на компьютерах, на которых размещена основная реплика и целевая вторичная реплика, также следует использовать параметр восстановления RelocateFile .

    Примечание

    Чтобы просмотреть синтаксис командлета, воспользуйтесь командлетом Get-Help в среде PowerShell SQL Server . Дополнительные сведения см. в разделе Get Help SQL Server PowerShell.

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

Настройка и использование поставщика SQL Server PowerShell

Образцы скрипта и команды резервного копирования и восстановления

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

# Create database backup  
Backup-SqlDatabase -Database "MyDB1" -BackupFile "\\share\backups\MyDB1.bak" -ServerInstance "SourceMachine\Instance"  
# Create log backup  
Backup-SqlDatabase -Database "MyDB1" -BackupAction "Log" -BackupFile "\\share\backups\MyDB1.trn" -ServerInstance "SourceMachine\Instance"  
# Restore database backup   
Restore-SqlDatabase -Database "MyDB1" -BackupFile "\\share\backups\MyDB1.bak" -NoRecovery -ServerInstance "DestinationMachine\Instance"  
# Restore log backup   
Restore-SqlDatabase -Database "MyDB1" -BackupFile "\\share\backups\MyDB1.trn" -RestoreAction "Log" -NoRecovery -ServerInstance "DestinationMachine\Instance"  
  

Дальнейшие действия

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

См. также раздел

Обзор групп доступности AlwaysOn SQL Server)
BACKUP (Transact-SQL)
Аргументы инструкции RESTORE (Transact-SQL)
RESTORE (Transact-SQL)
Устранение неполадок с операцией добавления файла, завершившейся сбоем (группы доступности AlwaysOn)