+55 11 3446-8380 [email protected]

Hoje falaremos um pouco sobre backup, que basicamente é uma cópia de seus dados que poderá ser restaurada em caso de falhas. Vamos comentar sobre os três tipos backups mais utilizados e discutir como criar uma boa cadeia de backups para seu ambiente.

Abaixo uma prosa sobre os três tipos de backup mais utilizados no SQL Server.

– FULL: contém todos os dados de uma base ou grupos de arquivos.

– DIFERENCIAL: guarda as páginas de dados que sofreram alteração após o último backup full realizado na base.

– LOG: contém todos os registros de logs de transação desde o último backup de log ou backup full realizados.

Agora que temos uma introdução sobre os backups, como saber quais tipos devo utilizar e a combinação entre eles, para trazer uma segurança maior em caso de falhas? (Lembrando que essas falhas são 99.9% humanas, por tanto cuidado com as permissões existentes no ambiente, e sim, as vezes minhas estatísticas são um pouco exageradas!).

Cadeia de backups nada mais é que uma sequência ordenada de backups, estrategicamente criada, que ameniza o tempo de exposição à perda de dados em caso de imprevistos.

Antes de definir a sua cadeia de backups, existem alguns pontos que devem ser levados em consideração, como:

– Espaço ocupado pela base de dados, (lembrando que a partir da versão 2008 do SQL Server existe a opção de backup em modo compress que reduz significativamente o tamanho do backup de uma base de dados).

– Espaço disponível no dispositivo de backup para a realização do mesmo, (no caso de armazenamento de backups na própria máquina, sempre utilizar um disco exclusivo para backup).

– Tempo total para a realização do tipo de backup escolhido.

– Analisar a hora mais ociosa do dia, no ambiente, para realizar os backups com maior utilização de disco, como o FULL ou DIFERENCIAL.

Montar uma estratégia para cadeia de backups é uma atividade muito subjetiva, porém, uma sugestão de configuração para uma cadeia de backups segura e que abrange grande parte dos ambientes, seria:

– Alterar o recovery model das bases de dados para FULL.

– Backups full diário.

– Backups de log a cada hora, exceto nos horários que backups full são realizados.

Vale manter os backups armazenados em disco no ambiente, por um período de 4 ou 5 dias, para facilitar o acesso aos mesmos em caso de falha. Este tipo de cadeia não tem pontos falhos para o caso de imprevistos causados por erros humanos, pois o banco de dados poderia ser restaurado para exatamente como ele estava no minuto da ocorrência, isso é possível porque temos os backups de log com o recurso de restore pont-in-time definindo data e hora especificas para o restore.

Esta imagem demonstra uma cadeia de backups no modelo de recuperação simples:

fonte: https://i-msdn.sec.s-msft.com/dynimg/IC202415.jpeg

Podemos observar na linha do tempo que a exposição à perda de trabalho é relativamente grande, pois, só conseguimos recuperar os dados a partir do último backup full realizado. Por exemplo, digamos que temos um backup full diário às 0h e, por azar do destino, acontece uma falha gravíssima de disco e precisamos restaurar um backup, porém esta falha ocorreu as 23h30min deste dia, ou seja, perdemos 23h30min de dados (um dia inteiro de trabalho). Esta estratégia de backup pode ser boa, caso o ambiente não tenha muitas transações durante o dia.

Esta imagem demonstra uma cadeia de backup no modelo de recuperação full:

fonte: https://i-msdn.sec.s-msft.com/dynimg/IC202416.jpeg

Com o modelo de recuperação acima ilustrado, a partir do primeiro backup full, a exposição à perda de trabalho praticamente não existe, pois, entre os backups full existem backups de log que podem ser usados para restaurar os dados até o momento antes da falha se for o caso, com o recurso restore point-in-time disponível neste modo de recuperação.

Abaixo um modelo de código usando T-SQL para fazer um backup FULL:

USE [Nome da base de dados];
GO
BACKUP DATABASE [Nome da base de dados]
TO DISK = ‘[Caminho do backupNome da base de dados.bak]’
WITH FORMAT

Na sequência, outro modelo de código usando T-SQL, mas desta vez, para fazer um backup LOG:

USE [Nome da base de dados];
GO
BACKUP LOG  [Nome da base de dados]
TO DISK = ‘[Caminho do backupNome da base de dados.trn]’;
GO

Referências:

https://msdn.microsoft.com/pt-br/library/ms175477(v=SQL.120).aspx

Até a próxima!

Bruno Galvincio