Ripristino di un database SQL Server 2012 in alta disponibilità


13

Ho un database che è sempre attivo in modalità ad alta disponibilità sincronizzato con un altro database su un'istanza diversa. Come posso ripristinare da un .bakfile nel database primario usando T-SQL?

Sono nuovo di disponibilità elevata e mi è stato comunicato che è necessario rimuovere il database dalla disponibilità elevata prima di poter eseguire un ripristino e quindi ripristinarlo nuovamente in disponibilità elevata, ma non sono sicuro.

Spero di poterlo ripristinare direttamente nel primario mentre AlwaysOnè ancora abilitato e si sincronizzerà automaticamente con il secondario.

Risposte:


15

Ascolta il tuo consulente. Ripristinando un backup, si stanno essenzialmente sostituendo lo schema e i dati del database. Sarà necessario disattivare la sincronizzazione, rimuovere il DB da HA ed eseguire il ripristino sul primario e sulla replica, lasciando la versione della replica in uno stato di ripristino utilizzando WITH NORECOVERY. Una volta eseguito il backup, reinserire il DB in HA e riavviare la sincronizzazione.

L'HA è molto simile al mirroring e utilizza una tecnologia simile, ma non altrettanto schizzinosa. Ti consigliamo di trattare anche i tuoi DB HA in modo simile.

Il codice sarebbe simile al seguente:

--on primario

ALTER AVAILABILITY GROUP MyAG REMOVE DATABASE AdventureWorks2012;

--on primario

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;

--su secondario

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;

--on primario

ALTER AVAILABILITY GROUP MyAG ADD DATABASE AdventureWorks2012;

--su secondario

ALTER DATABASE AdventureWorks2012 SET HADR AVAILABILITY GROUP = MyAG;

Domanda relativa alla risposta sopra ... Nel codice fornito, il PRIMARY è stato ripristinato con NoRecovery. Pensavo che solo la replica sarebbe stata eseguita con NoRecovery.
Truett,

Corretto, ma continua a leggere. I ripristini del registro sono stati codificati e infine CON RECUPERO per renderlo disponibile per l'uso.
Steve Mangiameli,

Se uno non è in grado di ricongiungersi al gruppo di disponibilità sul secondario, potrebbe essere necessario ripristinare un registro delle transazioni. Questa fonte ha aiutato a risolvere il seguente errore: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,

Quindi il log ripristina. Vedi il commento sopra.
Steve Mangiameli,

@SteveMangiameli grazie per averlo presentato. È tornato utile. Capisco ora che stai ripristinando da un dispositivo di backup logico anziché da un file. Quando eseguo il ripristino da un file, utilizzo file .bak e .trn separati.
Hans Vonn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.