Restaurando um banco de dados SQL Server 2012 em alta disponibilidade

13

Eu tenho um banco de dados que está sempre no modo de alta disponibilidade sincronizado com outro banco de dados em uma instância diferente. Como posso restaurar de um .bakarquivo para o banco de dados primário usando T-SQL?

Sou iniciante em alta disponibilidade e fui avisado de que preciso retirar o banco de dados da alta disponibilidade antes de poder fazer uma restauração e colocá-lo novamente em alta disponibilidade novamente, mas não tenho certeza.

Espero poder restaurar diretamente para o primário enquanto o AlwaysOnainda estiver ativado e ele será sincronizado automaticamente com o secundário.

Ensopado
fonte

Respostas:

15

Ouça o seu conselheiro. Ao restaurar um backup, você basicamente substitui o esquema e os dados do banco de dados. Você precisará desativar a sincronização, remover o banco de dados do HA e executar a restauração no primário e na réplica, deixando a versão da réplica em um estado de restauração usando WITH NORECOVERY. Depois que seu backup estiver em vigor, coloque o banco de dados novamente em HA e inicie a sincronização novamente.

O HA é muito parecido com o espelhamento e usa tecnologia semelhante, mas não tão minuciosa. Você também deve tratar seus DBs de alta disponibilidade.

O código seria semelhante ao seguinte:

--em primário

ALTER AVAILABILITY GROUP MyAG REMOVE DATABASE AdventureWorks2012;

--em primário

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;

- no secundário

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;

--em primário

ALTER AVAILABILITY GROUP MyAG ADD DATABASE AdventureWorks2012;

- no secundário

ALTER DATABASE AdventureWorks2012 SET HADR AVAILABILITY GROUP = MyAG;
Steve Mangiameli
fonte
Pergunta sobre a resposta acima ... No código fornecido, o PRIMARY foi restaurado com NoRecovery. Eu pensava que apenas a réplica seria feita com o NoRecovery.
quer
Correto, mas continue lendo. As restaurações de log foram codificadas e, finalmente, WITH RECOVERY para disponibilizá-lo para uso.
9788 Steve Jobsiam18:
Se alguém não conseguir se juntar ao grupo de disponibilidade no secundário, poderá ser necessário restaurar um log de transações. Esta fonte ajudou a resolver o seguinte erro: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
Portanto, o log é restaurado. Veja o comentário acima.
9788 Steve Jobsiam3
@SteveMangiameli obrigado por colocar isso. Ele veio a calhar. Entendo agora que você está restaurando de um dispositivo de backup lógico em vez de do arquivo. Quando restauro do arquivo, uso arquivos .bak e .trn separados.
Hans Vonn