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.
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.
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.
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:
Backup Full
Criamos o arquivo “BkpFull.ps1”, onde colocamos exatamente o script que executamos no prompt.
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”.
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 Diff
Criamos o arquivo “BkpDiff.ps1”, onde colocamos exatamente o script que executamos no prompt.
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”.
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.
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”.
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.
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:
O print abaixo mostra uma parcial dos arquivos que excluímos, deixando apenas os arquivos de 25/02/2025 a partir das 07:15.
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.
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