Como usuário do SQL Server, existem certos recursos que usamos com frequência e temos um bom entendimento, enquanto outros raramente usamos ou exploramos apenas uma vez. É importante expandir continuamente nosso conhecimento e preencher quaisquer lacunas em nosso entendimento. Neste artigo, exploraremos o conceito de restauração com standby no SQL Server e como ele pode ser útil em determinados cenários.
Backups de Log, Norecovery e Standby
Antes de mergulharmos nos detalhes da restauração com standby, vamos discutir brevemente os backups de log, norecovery e standby no SQL Server. Backups de log são usados para proteger dados desde o último backup completo e nos permitem restaurar o banco de dados para um ponto específico no tempo. A opção norecovery é usada durante o processo de restauração para continuar aplicando backups de log até estarmos prontos para concluir a restauração e começar a usar o banco de dados. Standby é uma variação desse processo que nos permite ler do banco de dados enquanto a restauração final ainda não foi concluída.
Existem várias razões pelas quais podemos querer usar standby durante o processo de restauração:
- Para confirmar que as restaurações de log estão sendo aplicadas corretamente
- Para usar o banco de dados para fins de relatório, sabendo que restaurações adicionais de log exigirão a desconexão de todas as outras sessões
- Para visualizar tabelas e verificar se a restauração progrediu o suficiente, especialmente em cenários de pesquisa de dados ou recuperação de desastres
Restauração com Norecovery
Vamos começar com um exemplo simples de restauração de um backup completo e um arquivo de log com a opção norecovery:
RESTORE DATABASE [Test] FROM DISK = N'C:\Andy\Test.bak'
WITH MOVE N'Test' TO N'C:\Andy\Test.mdf',
MOVE N'Test_log' TO N'C:\Andy\Test_log.ldf',
NORECOVERY
RESTORE LOG [Test] FROM DISK = N'C:\Andy\Test_log.bak'
WITH NORECOVERY
Após executar essas instruções, se navegarmos no banco de dados no SQL Server Management Studio (SSMS), veremos que o banco de dados está rotulado como “Restaurando…” e não podemos acessar nenhum objeto dentro dele. Podemos continuar restaurando mais alterações ou colocá-lo online, mas não poderemos mais aplicar alterações de log.
Restauração com Standby
Se quisermos ser capazes de consultar o banco de dados durante o processo de restauração, podemos usar a opção standby. Aqui está um exemplo:
RESTORE DATABASE [TestCopy] FROM DISK = N'C:\Andy\Test.bak'
WITH MOVE N'Test' TO N'C:\Andy\Test.mdf',
MOVE N'Test_log' TO N'C:\Andy\Test_log.ldf',
STANDBY = 'C:\andy\testcopy_standby.dat'
RESTORE LOG [TestCopy] FROM DISK = N'C:\Andy\Test_log.bak'
WITH STANDBY = 'C:\andy\testcopy_standby.dat'
Agora, podemos visualizar objetos no banco de dados TestCopy e até mesmo executar consultas somente leitura. O banco de dados será rotulado como “Standby / Somente Leitura” no SSMS, indicando que ele está acessível para consultas.
Restauração para Versões Diferentes do SQL Server
Ao restaurar backups para uma versão diferente do SQL Server, existem algumas considerações a serem observadas. Vamos pegar o exemplo de restaurar backups do SQL Server 2019 para o SQL Server 2022:
Se usarmos a opção norecovery:
RESTORE DATABASE [TestCopy] FROM DISK = N'C:\Andy\Test.bak'
WITH MOVE N'Test' TO 'C:\Andy\Test.mdf',
MOVE N'Test_log' TO N'C:\Andy\Test_log.ldf',
NORECOVERY
RESTORE LOG [TestCopy] FROM DISK = N'C:\Andy\Test_log.bak'
WITH NORECOVERY
Isso funcionará bem, desde que as versões sejam compatíveis.
No entanto, se tentarmos restaurar usando a opção standby:
RESTORE DATABASE [TestCopy] FROM DISK = N'C:\Andy\Test.bak'
WITH MOVE N'Test' TO N'C:\Andy\Test.mdf',
MOVE N'Test_log' TO N'C:\Andy\Test_log.ldf',
STANDBY = 'C:\andy\testcopy_standby.dat'
Isso falhará porque as versões são diferentes. De acordo com a documentação, uma atualização do banco de dados seria necessária nesse caso.
Lição Aprendida
A lição importante a ser aprendida com isso é que, se você planeja usar standby para fins de pesquisa ou permitir acesso de leitura aos dados durante as restaurações, é necessário garantir que os servidores de origem e destino tenham a mesma versão. Se futuras atualizações estiverem planejadas, é necessário coordenar entre os servidores de origem e destino para evitar problemas de compatibilidade.
Ao compreender as limitações e considerações da restauração com standby, você pode tomar decisões informadas e evitar complicações desnecessárias em seu ambiente do SQL Server.
Para aqueles que ainda não exploraram norecovery, standby ou log shipping, encorajo você a dedicar algum tempo experimentando esses recursos. Eles podem fornecer capacidades valiosas para proteção de dados e recuperação de desastres.
Isso conclui nossa discussão sobre a restauração com standby no SQL Server. Espero que você tenha achado este artigo informativo e útil. Se tiver alguma dúvida ou comentário, não hesite em entrar em contato.