Wiederherstellen einer SQL Server 2012-Datenbank mit hoher Verfügbarkeit

13

Ich habe eine Datenbank, die sich im Hochverfügbarkeitsmodus befindet und mit einer anderen Datenbank auf einer anderen Instanz synchronisiert ist. Wie kann ich mit von einer .bakDatei in die Primärdatenbank wiederherstellen T-SQL?

Ich bin neu in der Hochverfügbarkeit und wurde darauf hingewiesen, dass ich die Datenbank aus der Hochverfügbarkeit nehmen muss, bevor ich eine Wiederherstellung durchführen und sie dann wieder in die Hochverfügbarkeit versetzen kann, aber ich bin nicht sicher.

Ich hoffe, ich kann gerade in das Primär wiederherstellen, während das AlwaysOnnoch aktiviert ist und es automatisch mit dem Sekundär synchronisiert.

Eintopf
quelle

Antworten:

15

Hören Sie auf Ihren Berater. Durch das Wiederherstellen einer Sicherung ersetzen Sie im Wesentlichen das Datenbankschema und die Daten. Sie müssen die Synchronisierung deaktivieren, die Datenbank aus dem HA entfernen und die Wiederherstellung auf dem Primär- und Replikat ausführen, wobei die Replikatversion mit WITH NORECOVERY in einem Wiederherstellungszustand verbleibt. Sobald Ihre Sicherung vorhanden ist, legen Sie die Datenbank wieder in HA und starten Sie die Synchronisierung erneut.

HA ist dem Spiegeln sehr ähnlich und verwendet eine ähnliche Technologie, die bei weitem nicht so aufwändig ist. Sie werden auch Ihre HA-DBs ähnlich behandeln wollen.

Code würde ungefähr so ​​aussehen:

--auf der Grundschule

ALTER AVAILABILITY GROUP MyAG REMOVE DATABASE AdventureWorks2012;

--auf der Grundschule

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;

--on sekundär

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;

--auf der Grundschule

ALTER AVAILABILITY GROUP MyAG ADD DATABASE AdventureWorks2012;

--on sekundär

ALTER DATABASE AdventureWorks2012 SET HADR AVAILABILITY GROUP = MyAG;
Steve Mangiameli
quelle
Frage zur obigen Antwort ... Im angegebenen Code wurde der PRIMARY mit NoRecovery wiederhergestellt. Ich war der Meinung, dass mit NoRecovery nur die Replik erstellt werden würde.
Truett
Richtig, aber lesen Sie weiter. Protokollwiederherstellungen wurden codiert und schließlich mit WITH RECOVERY zur Verfügung gestellt.
Steve Mangiameli
Wenn die Verfügbarkeitsgruppe auf der Sekundärseite nicht erneut betreten werden kann, muss möglicherweise ein Transaktionsprotokoll wiederhergestellt werden. Diese Quelle hat zur Behebung des folgenden Fehlers beigetragen: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
Daher wird das Protokoll wiederhergestellt. Siehe Kommentar oben.
Steve Mangiameli
@SteveMangiameli, danke, dass du das gemacht hast. Es hat sich als nützlich erwiesen. Ich verstehe jetzt, dass Sie von einem logischen Sicherungsgerät anstatt von einer Datei wiederherstellen. Beim Wiederherstellen aus einer Datei verwende ich separate .bak- und .trn-Dateien.
Hans Vonn