Melhorando Nossas Rotinas de Backup com Dbatools

Nesse artigo, iremos falar um pouco sobre o Dbatools, mais precisamente sobre a parte de backup. Vale ressaltar que o Dbatools é uma biblioteca (módulo) de código aberto desenvolvido em Powershell pela comunidade e amantes do SQL Server. Na data de escrita desse artigo, encontra-se na versão 2.1.28 e conta com mais de 690 comandos.

O intuito desse artigo é mostrar as facilidades na parte de backup e, caso tenha interesse em se aprofundar nessa fantástica biblioteca, irei deixar na referência alguns links.

Como já se sabe, ter uma boa política de backup num ambiente de banco de dados é imprescindível, pois a falta poderá causar grandes prejuízos a empresa.

Podemos implementar essa política usando do Maintenance Plans através do SSMS, criação de scripts próprio ou utilizar soluções de terceiros; mas se a intenção é ter uma solução que atenda o propósito e, acima de tudo, possibilite a padronização das atividades do DBA, a biblioteca Dbatools será sua melhor escolha.

Nosso cenário será implementar uma política de backup, onde teremos os backups full, diferencial e de transaction log e no final, excluiremos os backups antigos. Executaremos esse processo através de linha de comando e Jobs, que criaremos no SQL Agent.

Usaremos os comandos Backup-DbaDatabase e Remove-DbaBackup para configurar de acordo com o tipo de backup desejado. Realizaremos os testes através do prompt do Powershell e da criação de Jobs no SQL Agent.

Prompt Powershell

Backup Full

Passamos como parâmetros a instancia, os databases, o caminho onde os backups serão salvos, compressão e o tipo de backup, que nesse caso é o Full.

Backup-DbaDatabase -SqlInstance XXXXXX\SQL2022 -Database Art_CDB, Art_CDB01 -Path E:\Backup\Full -CompressBackup -Type Full

Após a execução do comando temos como retorno o nome da instancia, o database, tipo do backup, o tamanho total do arquivo sem a compactação, o tipo do device, horário do início, duração e horário do final do backup.

Resposta do comando inserido

Backup Diferencial

Passamos como parâmetros a instancia, os databases, o caminho onde os backups serão salvos, compressão e o tipo de backup, que nesse caso é o Diferencial.

Backup-DbaDatabase -SqlInstance XXXX\SQL2022 -Database Art_CDB, Art_CDB01 -Path E:\Backup\Diff -CompressBackup -Type Diff

Após a execução do comando temos como retorno o nome da instancia, o database, tipo do backup, o tamanho total do backup sem a compactação, o tipo do device, horário do início, duração e horário do final do backup.

Resposta do comando inserido

Backup Transaction Log

Passamos como parâmetros a instancia, os databases, o caminho onde os backups serão salvos, compressão e o tipo de backup, que nesse caso é o Transaction Log.

Backup-DbaDatabase -SqlInstance XXXXX\SQL2022 -Database Art_CDB, Art_CDB01 -Path E:\Backup\Log -CompressBackup -Type Log

Após a execução do comando temos como retorno o nome da instancia, o database, tipo do backup, o tamanho total do backup sem a compactação, o tipo do device, horário do início, duração e horário do final do backup.

Resposta do comando inserido

SQL Agent – Jobs

Utilizando jobs do SQL Agent nos possibilita agendarmos essas execuções e com isso um controle maior sobre essa atividade.

Para nosso cenário, criamos três Jobs, conforme o print abaixo:

Três Jobs mencionados acima

Backup Full

Criamos o arquivo “BkpFull.ps1”, onde colocamos exatamente o script que executamos no prompt.

Criação de arquivo BkpFull.ps1

Primeiramente, criei o job indicando que a execução (Type) será através do Powershell e, em seguida, no command, indiquei qual arquivo será executado, nesse caso o “BkpFull.ps1”.

indicação de arquivo a ser executado

Você pode verificar, pelo histórico de execução, todos os parâmetros que o comando executou e validar se a execução foi bem-sucedida.

validação de comando

Backup Diff

Criamos o arquivo “BkpDiff.ps1”, onde colocamos exatamente o script que executamos no prompt.

Criação do arquivo conforme mencionado

Primeiramente, criei o job indicando que a execução (Type) será através do Powershell e, em seguida, no command, indiquei qual arquivo será executado, nesse caso o “BkpDiff.ps1”.

indicação do arquivo que será usado

Você pode verificar, pelo histórico de execução, todos os parâmetros que o comando executou e validar se a execução foi bem-sucedida.

Backup TLog

Criamos o arquivo “BkpTlog.ps1”, onde colocamos exatamente o script que executamos no prompt.

Criação do arquivo conforme citado acima

Primeiramente, criei o job indicando que a execução (Type) será através do Powershell e, em seguida, no command, indiquei qual arquivo será executado, nesse caso o “BkpTLog.ps1”.

indicação do arquivo que será executado

Após as indicações, você poderá verificar, pelo histórico de execução, todos os parâmetros que o comando executou e validar se a execução foi bem-sucedida.

Verificação de execução do comando

Exclusão de backup

Para remover os arquivos de uma cadeia antiga é muito simples; abaixo irei mostrar o comando que nos permitirá excluir os arquivos de log das últimas 6 horas.

Informamos como parâmetros o caminho (-Path), o tipo de extensão (-BackupFileExtension), a retenção (-RetentionPeriod) e o parâmetro que retorna uma simulação de quais arquivos serão excluídos (-WhatIf). Portanto, esse último parâmetro nos garante que o solicitado será realmente o que desejamos, evitando, assim, excluir arquivos importantes.

Para o parâmetro “-RetentionPeriod” poderemos indicar (h)horas, (d)dias, (w)semanas e (m) meses, como por exemplo 6h, 3d, 2w e 4m.

Remove-DbaBackup -Path ‘E:\Backup\Log\’ -BackupFileExtension trn -RetentionPeriod 6h -WhatIf

Pelo comando acima, iremos excluir os arquivos abaixo:

Demonstração de arquivos que serão excluidos

O print abaixo mostra uma parcial dos arquivos que excluímos, deixando apenas os arquivos de 25/02/2025 a partir das 07:15.

Parcial de arquivos que serão excluídos

Você pode excluir arquivos via linha de comando no Powershell, criando um job exclusivo ou adicionando um step nos Jobs de backups. Neste caso realizamos através da linha de comando e desafio vocês a implementarem um job para realizar os testes.

Reforçando, é importante nunca fazer isso diretamente em produção. Assim, crie um ambiente de teste para validar todos os comandos e, acima de tudo, garantir a efetividade da política de backup em seu ambiente.

Aplicando o comando

Vamos a exclusão dos arquivos com o comando abaixo:

Remove-DbaBackup -Path ‘E:\Backup\Log\’ -BackupFileExtension trn -RetentionPeriod 6h

Eu retirei o parâmetro ‘-WhatIf’ e, dessa forma, excluí os arquivos dentro das 6 horas, mantendo apenas os backups realizados a partir de 25/02/2025 às 07:15.

Demonstração dos arquivos a serem excluídos

Por hoje, vamos encerrar por aqui. No entanto, no próximo artigo, explorarei mais a fundo esses dois comandos e complementarei com a parte de restore. Assim, vocês terão o fluxo completo para implementar em seu ambiente.

Referências:

1. dbatools – the community’s sql powershell module

2. dbatools docs | Backup-DbaDatabase

3. dbatools docs | Remove-DbaBackup

Por Anderson Alves de Souza

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Artigos Recentes

Melhorando Nossas Rotinas de Backup com Dbatools

Fale Conosco

Converse com nossos especialistas e descubra como transformar seus dados em informações seguras, disponíveis e acessíveis.

Endereço

Rua Angelo Antonello, 93 – Sala 62, Centro – Farroupilha/RS – CEP: 95170-492

Contato Comercial

Email: [email protected]
Telefone: (54) 3401-1471

Abrir bate-papo
Olá
Podemos ajudar?