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.