Conhecendo um pouco sobre o DBA Tools

Fala Galera,
Espero que estejam todos bem!
Hoje vou falar sobre uma ferramenta que literalmente mudou minha vida como DBA: o DBA Tools. Ano passado fiz uma apresentação sobre esse assunto e resolvi transformar todo o conteúdo em um artigo aqui no blog para compartilhar com vocês.
Se você é DBA SQL Server e ainda não conhece essa ferramenta, pode ter certeza que depois deste artigo você vai querer instalar na mesma hora. E se já conhece, garanto que vai aprender algumas dicas que talvez não sabia.
O que é o DBA Tools?
Basicamente, o DBA Tools é uma suíte de comandos em PowerShell de código aberto que foi projetada especificamente para automatizar uma variedade de tarefas de administração de banco de dados para usuários do Microsoft SQL Server.
A ferramenta é amplamente utilizada pela comunidade SQL Server e serve para simplificar e automatizar tarefas complexas e rotineiras de DBAs, tornando o gerenciamento de bancos de dados muito mais prático e ágil.
Para vocês terem uma ideia do poder dessa ferramenta: ela tem mais de 700 comandos disponíveis! Imaginem quantas tarefas manuais podemos automatizar com isso.
Como nasceu o DBA Tools
A história do DBA Tools é bem curiosa e acho que vale a pena contar para vocês entenderem como essa ferramenta se tornou tão poderosa.
Tudo começou com a Chrissy LeMaire, que precisava migrar muitas instâncias de um SharePoint que tinha toneladas de bancos de dados, linked servers, jobs e outros objetos. Imaginem a trabalheira que seria fazer isso tudo manualmente!
Ela então criou um script para automatizar essas tarefas migratórias. O script funcionou muito bem, mas não estava muito fácil para outras pessoas usarem devido à complexidade do código.
A comunidade convenceu ela a transformar esse script em um módulo PowerShell para dividir essas tarefas em partes diferentes. Ela então publicou o script no GitHub em setembro de 2015.
Aqui vem a parte interessante, demorou quase 4 anos para chegar à versão 1.0, que foi lançada em junho de 2019. Por que tanto tempo? Porque a Chrissy queria ter certeza de que tudo estava padronizado – nomenclatura dos parâmetros, ajuda dos comandos, documentação, segurança. Ela queria garantir que tudo estava bem documentado, seguro e funcionando adequadamente.
Quando a versão 1.0 foi lançada, já havia mais de 100 contribuidores trabalhando junto com a Chrissy e 550 comandos estavam disponíveis no primeiro release oficial.
Atualmente a ferramenta conta com mais de 700 comandos desenvolvidos, 140 contribuidores ativos, mais de 1700 usuários no Slack oficial da plataforma e está sempre sendo atualizada. É uma comunidade gigantesca!
Como Instalar o DBA Tools
Existem duas formas principais de instalar a ferramenta:
Instalação Direta
Esta é a forma mais simples. Você pode instalar o módulo diretamente da PowerShell Gallery usando o comando:
1 |
Install-Module dbatools |
Instalação Offline
Para ambientes sem acesso à internet, você pode baixar o módulo e instalar offline. Existe um tutorial específico para isso que vocês podem encontrar na documentação, segue o link.
https://blog.netnerds.net/2023/04/offline-install-of-dbatools-and-dbatools-library/
Dica Bonus – Instalando Versão Específica
1 |
Install-Module -Name dbatools -RequiredVersion 2.0.4 -SkipPublisherCheck |
Isso é muito útil quando você quer manter uma versão específica em produção ou quando precisa de compatibilidade com determinada versão.
Comandos essenciais para começar
Vou compartilhar com vocês os comandos básicos que todo mundo deveria conhecer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Instalar o DBA Tools Install-Module dbatools # Atualizar para a versão mais recente Update-Module dbatools # Exportar módulo para máquina sem internet Save-Module dbatools c:\temp # Listar todos os comandos disponíveis Get-Command -Module dbatools # Filtrar comandos por parte do nome Get-Command *Compression* -Module dbatools |
Configurações de Conexão
1 2 3 |
# Configurar conexão confiável Set-DbatoolsConfig -FullName sql.connection.trustcert -Value $true -Register Set-DbatoolsConfig -FullName sql.connection.encrypt -Value $false -Register |
1 2 3 4 5 6 |
# Abrir ajuda de um comando Get-Help Test-DbaDbCompression # Abrir ajuda em janela separada Get-Help Test-DbaDbCompression -ShowWindow |
Exemplo Prático 1 – Trabalhando com Compressão
1 2 |
# Retornar objetos sem compressão Get-DbaDbCompression -SqlInstance "node1\Inode1" -SqlCredential $credential -Database "AdventureWorksDW2019" | Select-Object -first 5 |
1 2 3 4 5 6 |
$splat = @{ SqlInstance = "node1\inode1" SqlCredential = "sa" Database = "AdventureWorksDW2019" } Get-DbaDbCompression @splat | Select-Object -first 5 |
Essa técnica deixa o código muito mais limpo e organizando, principalmente quando você tem muitos parâmetros.
Exemplo Prático 2 – Testando Backups Automaticamente
Isso possibilita um grande gerenciamento e também dá uma previsão para o DBA de quanto tempo leva para um eventual restore de determinada base, além de garantir maior segurança na política de backup da organização.
Imaginem o valor disso! Em vez de ficar na esperança de que os backups estão funcionando, vocês podem ter certeza absoluta de que conseguem restaurar quando precisarem.
Para demonstrarmos um exemplo prático dessa funcionalidade, vamos primeiro fazer um backup da base AdventureWorksDW2019 em nosso servidor local.
1 |
BACKUP DATABASE AdventureWorksDW2019 TO DISK = 'D:\bkp_dbatools\bkp_full.bak' WITH COMPRESSION, STATS = 1 |
Agora Vamos selecionar um registro qualquer na tabela DimEmployee.
1 |
SELECT * FROM dbo.DimEmployee where EmployeeKey = 1 |
Agora, apenas com a finalidade de demonstrar que o teste do Backup vai funcionar, vou fazer um UPDATE na tabela DimEmployee mudando a coluna FirstName para “Lucas” e logo em seguida um Backup de LOG.
1 2 3 |
UPDATE dbo.DimEmployee SET FirstName = 'Lucas' WHERE EmployeeKey = 1 |
Pra finalizar, o Backup de LOG
1 |
BACKUP LOG AdventureWorksDW2019 TO DISK = 'D:\bkp_dbatools\bkp_log.trn' WITH COMPRESSION, STATS = 1 |
Agora, vamos usar a função Test-DbaLastBackup para fazer um teste de restore em nosso ambiente, aproveitar e validar se ela restaurou o banco já com o LOG e se gravou algum histórico de consulta.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$instanceSplat = @{ >> SqlInstance = "localhost" >> } >> GET-DbaDbBackupHistory @instanceSplat | Sort-OBJECT START >> >> $testParams = @{ >> SqlInstance = "localhost" >> DATABASE = "AdventureWorksDW2019", "DB_Teste" >> Destination = "localhost" >> Verbose = $true >> OutVariable = 'results' >> } >> Test-DbaLastBackup @testParams >> >> $writeParams = @{ >> SqlInstance = "localhost" >> DATABASE = 'DB_Teste' >> TABLE = 'TestRestore' >> AutoCreateTable = $true >> NoDrop = $true >> } >> $results | WRITE-DbaDataTable @writeParams >> >> Test-DbaLastBackup @testParams | WRITE-DbaDataTable @writeParams |
Comando executado com sucesso. Repare que utilizei a técnica mencionada acima de splatting, onde facilitou a passagem de parametros do codigo, veja também que interessante, primeiro na passagem de parâmetros do Test-DbaLastBackup declaramos um OutVariable (para ele imprimir o resultado na variável “results”).
Na sequencia utilizamos a função WRITE-DbaDataTable para inserir o resultado nos testes em uma tabela chamada TestRestore no banco DB_Teste, observe que utilizei um parametro NoDrop para que ao final do teste não seja dropada a base de dados, com a finalidade de demonstrar a vocês que realmente restaurou a base e deu tudo certo.
O DBA Tools irá restaurar a base de dados onde estiver parametrizado os caminhos default do SQL Server, ou você pode especificar por parâmetro.
Consultando se ele restaurou Backup FULL + LOG depois do nosso UPDATE.
1 2 3 |
Use [dbatools-testrestore-AdventureWorksDW2019] GO SELECT * From DimEmployee where EmployeeKey = 1 |
Na base DB_Teste, ele gravou as métricas de tempo para execução do restore, bem como detalhes sobre tamanho, tempo para executar o checkdb, caminho, data, etc… muito útil para planejar migrações (saber os tempos que levam para restaurar todas as bases do seu ambiente, ou até mesmo para testes regulares.
Exemplo Prático 3 – Migrações Simplificadas
Vou mostrar agora como é simples migrar artefatos de uma instância SQL Server usando o DBA Tools.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# Copiar logins Copy-DbaLogin -Source 'node1\inode1' -Destination 'node1\node2' -Force # Copiar operadores do SQL Agent Copy-DbaAgentOperator -Source 'node1\inode1' -Destination 'node1\node2' # Copiar alertas do SQL Agent Copy-DbaAgentAlert -Source 'node1\inode1' -Destination 'node1\node2' # Copiar jobs do SQL Agent Copy-DbaAgentJob -Source 'node1\inode1' -Destination 'node1\node2' # Copiar configuração do Database Mail Copy-DbaDbMail -Source 'node1\inode1' -Destination 'node1\node2' # Copiar linked servers Copy-DbaLinkedServer -Source 'node1\inode1' -Destination 'node1\node2' # Copiar configurações do servidor Copy-DbaSpConfigure -Source 'node1\inode1' -Destination 'node1\node2' # Copiar credenciais Copy-DbaCredential -Source 'node1\inode1' -Destination 'node1\node2' # Copiar banco de dados completo Copy-DbaDatabase -Source 'node1\inode1' -Destination 'node1\node2' -Database AdventureWorksDW2019,Test_Larocca -BackupRestore -SharedPath \\Node1\full -AdvancedBackupParams @{ CompressBackup = $true } -WithReplace -SetSourceOffline |
É imprescindível que o DBA saiba fazer cada um desses itens manualmente também, pois nem em todo ambiente existirá o DBA Tools para trabalhar. Mas quando você tem a ferramenta disponível, a produtividade aumenta exponencialmente!
O DBA Tools tem tantas funcionalidades que seria praticamente impossível cobrir tudo em um artigo. Mas vou listar algumas coisas incríveis :
- É possível instalar e gerenciar a sp_WhoIsActive pelo DBA Tools
- Você pode gerenciar VLFs por meio de comandos simples
- Até as opções de energia do Windows podem ser consultadas e alteradas
- Validar o espaço em disco consumido pelas bases de uma instância
- Reparar usuários órfãos automaticamente
- Identificar índices sem utilização ou duplicados
- Validar a performance dos discos
- Verificar as features instaladas na instância SQL Server
- Validar as configurações dos discos
- Listar configurações de determinado KB da Microsoft
- Instalar a ferramenta de monitoramento SQLWATCH embarcada no DBA Tools
A lista é grande! Podem visitar o site oficial https://dbatools.io/commands/ para ver todos os comandos disponíveis.
Considerações Importantes
Algumas coisas importantes que quero destacar:
- Mesmo com toda essa automação, é fundamental que o DBA entenda o que cada comando está fazendo por baixo dos panos. A ferramenta é poderosa, mas não substitui o conhecimento técnico.
- Sempre testem os comandos em ambiente de desenvolvimento antes de executar em produção. Mesmo sendo uma ferramenta madura, cada ambiente tem suas particularidades.
- Mantenham a ferramenta sempre atualizada. A comunidade está sempre corrigindo bugs e adicionando novas funcionalidades.
Na minha experiência, o DBA Tools mudou completamente minha forma de trabalhar. Tarefas que antes levavam horas agora levam minutos. Migrações que eram complexas agora são executadas com poucos comandos.
Além disso, a consistência é muito maior. Quando você faz algo manualmente, sempre há chance de esquecer algum passo ou cometer algum erro. Com os comandos padronizados, isso não acontece.
A ferramenta também é excelente para documentação. Os comandos ficam registrados e você pode criar scripts reutilizáveis para tarefas recorrentes.
Conclusão
O DBA Tools é uma dessas ferramentas que você usa uma vez e não consegue mais viver sem. Se você ainda não conhecia, recomendo fortemente que instalem e comecem a explorar.
Comecem pelos comandos básicos, depois vão evoluindo conforme a necessidade. A curva de aprendizado vale muito a pena!
E vocês? Já usam o DBA Tools? Qual comando mais os impressiona? Compartilhem nos comentários suas experiências!
Até a próxima pessoal!
Gustavo Larocca
Consultor SQL Server
Links Úteis:
- Site oficial: https://dbatools.io/
- Lista de comandos: https://dbatools.io/commands/
- Time de desenvolvimento: https://dbatools.io/team/
- PowerShell Gallery: https://www.powershellgallery.com/packages/dbatools/