Restauration d'une base de données SQL Server 2012 en haute disponibilité

13

J'ai une base de données qui est en mode haute disponibilité toujours synchronisée avec une autre base de données sur une instance différente. Comment puis-je restaurer à partir d'un .bakfichier dans la base de données principale en utilisant T-SQL?

Je suis novice en matière de haute disponibilité et on m'a informé que je dois retirer la base de données de la haute disponibilité avant de pouvoir effectuer une restauration, puis la remettre à nouveau en haute disponibilité, mais je ne suis pas sûr.

J'espère que je peux simplement restaurer directement dans le primaire alors que le AlwaysOnest toujours activé et il se synchronisera automatiquement avec le secondaire.

Ragoût
la source

Réponses:

15

Écoutez votre conseiller. En restaurant une sauvegarde, vous remplacez essentiellement le schéma et les données de la base de données. Vous devrez désactiver la synchronisation, supprimer la base de données de HA et effectuer la restauration sur le principal et le réplica, en laissant la version du réplica dans un état de restauration à l'aide de WITH NORECOVERY. Une fois votre sauvegarde en place, replacez la base de données dans HA et recommencez la synchronisation.

HA est très similaire à la mise en miroir et utilise une technologie similaire, mais pas aussi capricieuse. Vous souhaiterez également traiter vos bases de données HA.

Le code serait semblable au suivant:

- au primaire

ALTER AVAILABILITY GROUP MyAG REMOVE DATABASE AdventureWorks2012;

- au primaire

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;

- au secondaire

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;

- au primaire

ALTER AVAILABILITY GROUP MyAG ADD DATABASE AdventureWorks2012;

- au secondaire

ALTER DATABASE AdventureWorks2012 SET HADR AVAILABILITY GROUP = MyAG;
Steve Mangiameli
la source
Question concernant la réponse ci-dessus ... Dans le code fourni, le PRIMAIRE a été restauré avec NoRecovery. Je pensais que seule la réplique se ferait avec NoRecovery.
Truett
Correct, mais continuez à lire. Les restaurations de journaux ont été codées, puis finalement AVEC RECUPERATION pour les rendre disponibles à l'utilisation.
Steve Mangiameli
Si l'un n'est pas en mesure de rejoindre le groupe de disponibilité sur le secondaire, la restauration d'un journal des transactions peut être nécessaire. Cette source a aidé à résoudre l'erreur suivante: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
D'où le journal restaure. Voir le commentaire ci-dessus.
Steve Mangiameli
@SteveMangiameli merci d'avoir mis cela en place. C'est utile. Je comprends maintenant que vous restaurez à partir d'un périphérique de sauvegarde logique au lieu d'un fichier. Lorsque je restaure à partir d'un fichier, j'utilise des fichiers .bak et .trn distincts.
Hans Vonn