Migrando Bancos de Dados com Dbatools
Introdução
Fala galera.
Hoje estou escrevendo o primeiro post do blog e resolvi iniciar falando sobre migração de bancos de dados utilizando o Dbatools, um módulo do PowerShell que eu já sabia da existência, mas particularmente comecei a utilizar a pouco tempo.
O Dbatools é ideal para realizar manutenções e outras tarefas trabalhosas de forma simples e consequentemente economizar tempo, que sabemos que no nosso dia a dia é algo valioso.
Como gostei bastante da praticidade de executar procedimentos complexos em poucos passos e com ótimos resultados, vou mostrar uma das atividades que realizei a pouco tempo, que é a migração de bancos de dados e que considerei muito simples de se fazer.
Para inciar precisamos entender o que é o Dbatools, que resumidamente é um módulo do PowerShell gratuito que pode ser utilizado para realizar atividades de administração, desenvolvimento e migração do SQL Server.
Como o foco desse post não é explicar detalhadamente o que é o Dbatools e sim mostrar a utilização de um dos seus procedimentos, caso queiram mais informações a respeito, é possível encontrar no site do módulo acessando o seguinte link:
Instalação do Dbatools
Requisitos Mínimos
Servidor
- SQL Server 2000
- Powershell 2.0
Estação de trabalho
- Windows 7 com PowerShell 3
- Linux ou macOS com PowerShell 6.1
Instalação
Então vamos à instalação do Dbatools para começar a demonstração.
Como instalar o módulo no PowerShell:
1 – Executar o PowerShell como administrador.
2 – Digitar o comando Install-Module dbatools no PowerShell conforme abaixo:
1 |
Install-Module dbatools |
3 – Digitar o comando Get-Module dbatools -ListAvailable para verificar se o módulo foi instalado e já está disponível para uso conforme abaixo:
1 |
Get-Module dbatools -ListAvailable |
Após a execução do comando recebemos a seguinte mensagem que nos mostra que o módulo foi instalado:
Pronto! Simples assim.
Migração dos bancos de dados utilizando Detach e Attach
Agora com o Dbatools instalado podemos partir para o ponto focal deste post que é migrar bancos de dados de uma instância para outra de maneira mais ágil e simples do que realizar todos os procedimentos envolvidos em uma migração convencional.
NOTA: Isso não elimina a necessidade de realizar as atividades de precaução para executar uma migração, tais como backup dos bancos de dados e outros procedimentos pertinentes a cada cenário. Planeje bem a migração e tenha todas as garantias de que se algo der errado você tem como recuperar seus bancos de dados.
Então vamos lá.
O método que utilizei para realizar este laboratório é de migração através do detach e attach (desanexar e anexar), ou seja, desanexar na origem, copiar e anexar no destino os arquivos de dados dos bancos de dados de uma instância para outra.
Nenhum arquivo é excluído da origem, mas é bom lembrar que o procedimento de desanexar e anexar novamente o banco de dados gera indisponibilidade temporária enquanto cada arquivo de dados é manipulado. É indicado que esse procedimento seja realizado em caso de migração onde o ambiente esteja parado para realizar a manutenção.
Existe também a possibilidade de realizar o procedimento através de backup e restore, que será tratado em um outro post.
Dando continuidade vamos conhecer o cenário.
Será realizada a migração da instância DESKTOP-1V28U1 para a instância DESKTOP-1V218U1\MSSQLSERVER1. A primeira instância já possui alguns bancos de dados criados e a segunda ainda não possui nenhum banco de dados conforme imagem abaixo:
Migração de um banco de dados
Agora vamos para o PowerShell realizar primeiramente a migração de um banco de dados.
O comando para realizar a migração entre as duas instâncias é o seguinte:
1 |
Copy-DbaDatabase -Source DESKTOP-1V218U1 -Destination DESKTOP-1V218U1\MSSQLSERVER1 -Database AdventureWorks2014 -DetachAttach -Reattach |
Onde -Source indica a instância de origem, -Destination a instância de destino e -Database o banco de dados que desejamos migrar.
NOTA: Se as instâncias estiverem em servidores diferentes é importante verificar se os mesmos estão se comunicando para que seja possível realizar esse procedimento. Além disso, devem ser trocados os nomes das instâncias e do banco de dados para os nomes correspondentes ao ambiente onde o script será executado.
Após o comando ser executado, recebemos a seguinte mensagem:
Podemos observar que o banco de dados foi criado na instância destino com sucesso:
Migração de Vários Bancos de Dados
Agora será realizado o procedimento de copiar todos os bancos de dados da instância origem para a instância destino. Observem que os bancos de dados de sistemas (master, model, msdb e tempdb) serão desconsiderados.
A única diferença entre o comando para migrar apenas um banco de dados e o comando para migrar todos os bancos de dados é que dessa vez será especificada a opção -AllDatabases.
1 |
Copy-DbaDatabase -Source DESKTOP-1V218U1 -Destination DESKTOP-1V218U1\MSSQLSERVER1 -AllDatabases -DetachAttach -Reattach |
Após o comando ser executado, recebemos a seguinte mensagem:
Podemos observar que todos os bancos de dados foram criados na instância de destino com sucesso:
Comparativo
Após os procedimentos realizei um comparativo entre o tamanho que ficaria cada script T-SQL e o tamanho dos scripts PowerShell que foram executados na migração e o resultado é o seguinte:
Um banco de dados
Quatro bancos de dados(quantidade utilizada na demonstração)
Conclusão
A ideia desse post é apresentar uma possibilidade bem simples do que se pode fazer utilizando o módulo do Dbatools e difundir a sua utilização que pode ajudar muito nas tarefas do dia a dia de um DBA.
Recomendo o acesso ao site (https://dbatools.io) para um melhor entendimento de todas as atividades que são oferecidas pelo módulo.
É isso pessoal.
Qualquer dúvida ou sugestão deixem nos comentários que irei responder o mais rápido possível.
Agradeço a todos que tiveram o interesse de ler esse primeiro post e conhecer o blog. Espero de agora em diante contribuir bastante com a comunidade de dados.
Até a próxima!!!
Referências:
Muito bom artigo! Parabéns pela iniciativa.
Obrigado Felipe.
Muito bom meu amigo!!!!
Vou acompanhar aqui direto.
Obrigado Pedro.
A ferramenta tem que está instalada na instância primária , ou seja , a que vai fazer a transferência ?
Na realidade não é necessário que o módulo esteja instalado nos servidores.
Conforme a documentação, nesse aspecto ele funciona de forma semelhante ao SSMS (SQL Server Management Studio).
Você pode ver essa informação no seguinte link:
https://dbatools.io/download/
Além disso disso eu realizei um teste para responder a sua pergunta.
Instalei o Dbatools em uma máquina e fiz a migração entre outros dois servidores e funcionou perfeitamente.
Parabéns pelo post Anderson. O DBA Tools sem duvidas é uma caixa de ferramentas que ajuda em uma gama de possibilidades na vida de um DBA!! Continue assim meu parceiro!
Obrigado Gustavo.
Realmente possibilita muitas atividades interessantes.