Restaurar una base de datos SQL Server 2012 en alta disponibilidad


13

Tengo una base de datos que está siempre en modo de alta disponibilidad sincronizada con otra base de datos en una instancia diferente. ¿Cómo puedo restaurar desde un .bakarchivo a la base de datos primaria usando T-SQL?

Soy nuevo en la alta disponibilidad y me han informado que necesito sacar la base de datos de la alta disponibilidad antes de poder hacer una restauración y luego volver a ponerla en alta disponibilidad, pero no estoy seguro.

Espero poder restaurar directamente en el primario mientras el AlwaysOntodavía está habilitado y se sincronizará automáticamente con el secundario.

Respuestas:


15

Escucha a tu asesor. Al restaurar una copia de seguridad, esencialmente está reemplazando el esquema y los datos de la base de datos. Deberá desactivar la sincronización, eliminar la base de datos de HA y realizar la restauración en el primario y la réplica, dejando la versión de la réplica en un estado de restauración utilizando WITH NORECOVERY. Una vez que su copia de seguridad esté en su lugar, vuelva a colocar la base de datos en HA y comience la sincronización nuevamente.

HA es muy similar a la duplicación y utiliza tecnología similar, pero no tan delicada. También querrá tratar sus HA DB de manera similar.

El código sería similar al siguiente:

--en primaria

ALTER AVAILABILITY GROUP MyAG REMOVE DATABASE AdventureWorks2012;

--en primaria

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;

--en secundaria

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;

--en primaria

ALTER AVAILABILITY GROUP MyAG ADD DATABASE AdventureWorks2012;

--en secundaria

ALTER DATABASE AdventureWorks2012 SET HADR AVAILABILITY GROUP = MyAG;

Pregunta sobre la respuesta anterior ... En el código suministrado, el PRIMARIO se restauró con NoRecovery. Pensé que solo la réplica se haría con NoRecovery.
Truett

Correcto, pero sigue leyendo. Las restauraciones de registros se codificaron y, finalmente, CON RECUPERACIÓN para que esté disponible para su uso.
Steve Mangiameli

Si uno no puede unirse al grupo de disponibilidad en el secundario, puede ser necesario restaurar un registro de transacciones. Esta fuente ayudó a resolver el siguiente error: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

Por lo tanto, el registro se restaura. Ver comentario arriba.
Steve Mangiameli

@SteveMangiameli gracias por poner esto. Ha sido útil. Entiendo que ahora está restaurando desde un dispositivo de respaldo lógico en lugar de desde un archivo. Cuando restauro desde un archivo, uso archivos separados .bak y .trn.
Hans Vonn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.