Przywracanie bazy danych SQL Server 2012 w wysokiej dostępności

13

Mam bazę danych, która jest zawsze w trybie wysokiej dostępności, zsynchronizowana z inną bazą danych w innej instancji. Jak mogę przywrócić z .bakpliku do podstawowej bazy danych za pomocą T-SQL?

Jestem nowy w wysokiej dostępności i doradzono mi, że muszę usunąć bazę danych z wysokiej dostępności, zanim będę mógł wykonać przywracanie, a następnie przywrócić ją z powrotem do wysokiej dostępności, ale nie jestem pewien.

Mam nadzieję, że mogę przywrócić bezpośrednio do podstawowego, gdy AlwaysOnjest on nadal włączony i automatycznie zsynchronizuje się z drugim.

Gulasz
źródło

Odpowiedzi:

15

Posłuchaj swojego doradcy. Przywracając kopię zapasową, zasadniczo zastępujesz schemat i dane bazy danych. Trzeba będzie wyłączyć synchronizację, usunąć bazę danych z HA i wykonać przywracanie na podstawowej i replice, pozostawiając wersję repliki w stanie przywracającym za pomocą Z NORECOVERY. Po utworzeniu kopii zapasowej umieść bazę danych z powrotem w HA i ponownie rozpocznij synchronizację.

HA jest bardzo podobny do dublowania i wykorzystuje podobną technologię, tylko nie tak wybredną. Będziesz także chciał traktować swoje bazy danych HA podobnie.

Kod byłby podobny do następującego:

- na podstawowym

ALTER AVAILABILITY GROUP MyAG REMOVE DATABASE AdventureWorks2012;

- na podstawowym

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;

- na wtórnym

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;

- na podstawowym

ALTER AVAILABILITY GROUP MyAG ADD DATABASE AdventureWorks2012;

- na wtórnym

ALTER DATABASE AdventureWorks2012 SET HADR AVAILABILITY GROUP = MyAG;
Steve Mangiameli
źródło
Pytanie dotyczące powyższej odpowiedzi ... W dostarczonym kodzie PODSTAWA została przywrócona za pomocą NoRecovery. Myślałem, że tylko replika zostanie wykonana z NoRecovery.
Truett,
Poprawnie, ale czytaj dalej. Przywracanie dziennika zostało zakodowane, a następnie Z ODZYSKIEM, aby było dostępne.
Steve Mangiameli
Jeśli nie można ponownie dołączyć do grupy dostępności na dodatkowym serwerze, konieczne może być przywrócenie dziennika transakcji. To źródło pomogło rozwiązać następujący błąd: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.
Hans Vonn
Stąd przywraca dziennik. Zobacz komentarz powyżej.
Steve Mangiameli
@ SteveMangiameli dziękuję za postawienie tego. Przydał się. Rozumiem teraz, że przywracasz dane z logicznego urządzenia do tworzenia kopii zapasowych zamiast z pliku. Podczas przywracania z pliku używam osobnych plików .bak i .trn.
Hans Vonn