Восстановление базы данных SQL Server 2012 в режиме высокой доступности

13

У меня есть база данных, которая всегда находится в режиме высокой доступности и синхронизирована с другой базой данных в другом экземпляре. Как я могу восстановить .bakфайл из основной базы данных, используя T-SQL?

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

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

тушеное мясо
источник

Ответы:

15

Слушай своего советника. Восстанавливая резервную копию, вы по сути заменяете схему базы данных и данные. Вам нужно будет отключить синхронизацию, удалить базу данных из HA и выполнить восстановление на первичном сервере и реплике, оставив версию реплики в состоянии восстановления с помощью WITH NORECOVERY. Как только ваша резервная копия установлена, поместите БД обратно в HA и снова запустите синхронизацию.

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

Код будет похож на следующее:

- на начальном

ALTER AVAILABILITY GROUP MyAG REMOVE DATABASE AdventureWorks2012;

- на начальном

RESTORE DATABASE AdventureWorks2012
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks2012_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks2012_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\NewAdvWorks.

RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH RECOVERY;

- на вторичном

RESTORE DATABASE AdventureWorks2012
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks2012_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks2012_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\NewAdvWorks.ldf';

RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH NORECOVERY;

- на начальном

ALTER AVAILABILITY GROUP MyAG ADD DATABASE AdventureWorks2012;

- на вторичном

ALTER DATABASE AdventureWorks2012 SET HADR AVAILABILITY GROUP = MyAG;
Стив Мангиамели
источник
Вопрос относительно ответа выше ... В предоставленном коде ПЕРВИЧНОЕ было восстановлено с NoRecovery. Я думал, что только Реплика будет сделана с NoRecovery.
Truett
Исправьте, но продолжайте читать. Восстановление журнала было закодировано, а затем, наконец, WITH RECOVERY, чтобы сделать его доступным для использования.
Стив
Если не удается повторно присоединиться к группе доступности на дополнительном устройстве, может потребоваться восстановление журнала транзакций. Этот источник помог устранить следующую ошибку:The mirror database, "dbname", has insufficient transaction log data to preserve the log backup chain of the principal database. This may happen if a log backup from the principal database has not been taken or has not been restored on the mirror database.
Ганс Вонн
Отсюда бревно восстанавливает. Смотрите комментарий выше.
Стив
@SteveMangiameli спасибо, что подняли это. Это пригодилось. Теперь я понимаю, что вы восстанавливаете данные с логического устройства резервного копирования, а не из файла. При восстановлении из файла я использую отдельные файлы .bak и .trn.
Ганс Вонн