Database
 sql >> Base de Dados >  >> RDS >> Database

Clonagem de bancos de dados com PSDatabaseClone

Autor convidado:Sander Stad (@sqlstad)


PSDatabaseClone é um módulo do PowerShell que tem a capacidade de criar imagens de bancos de dados ("clones") e distribuir esses clones para um ou mais hosts.

Por que usar este módulo?


Administradores de banco de dados, e realmente qualquer pessoa que tenha que lidar com provisionamento de dados, tem usuários que desejam trabalhar com nossos bancos de dados. Isso pode ser desenvolver novas soluções, extrair os dados para processos ETL, simular problemas de desempenho, recuperar dados para fins de relatório e assim por diante.

Provisionar os dados para outros locais pode ser uma tarefa muito tediosa e a maioria de nós gasta muito tempo e recursos executando essa tarefa.

As soluções conhecidas para provisionar os dados são restaurando bancos de dados ou desenvolvendo alguns scripts extensivos para resolver esse problema. Essas soluções nem sempre são a maneira mais eficiente de provisionar dados e podem levar um tempo considerável.

Além do tempo que leva para levar os dados para outros locais, também pode custar muito espaço em disco.

E se houvesse uma maneira de reduzir o tempo necessário para provisionar os dados e, ao mesmo tempo, reduzir a quantidade de recursos necessários? Agora existe uma solução para isso e se chama PSDatabaseClone.

Como instalar o módulo


A instalação do módulo pode ser realizada de várias maneiras.

PowerShellGallery


A maneira mais fácil é usando o comando Install-Module . O comando procura o módulo na Galeria do PowerShell. Execute o seguinte código para instalar o módulo usando a Galeria do PowerShell:
Install-Module PSDatabaseClone

O uso desse método também facilita a atualização do módulo quando uma nova versão é lançada. Basta usar o Update-Module comando como abaixo para atualizá-lo para a versão mais recente:
Update-Module PSDatabaseClone

Clonagem do repositório


Outra maneira de instalar o módulo é clonando o repositório Git em sua máquina local. Eu aconselharia as pessoas que querem contribuir para o projeto a usar este método.

Execute o seguinte comando:
git clone https://github.com/sanderstad/PSDatabaseClone.git

Isso fará o download de todo o repositório para sua máquina local, a partir da qual você poderá usar o módulo ou desenvolver novos recursos para ele.

Como funciona o módulo?


Imagens


O objetivo do módulo era usar o mínimo possível de aplicativos externos, para que todos pudessem usar o módulo sem precisar instalar nenhum extra. O módulo funciona usando tecnologia nativa do Windows para criar discos rígidos virtuais (VHDs). Um VHD é um formato de arquivo que representa um disco rígido e pode conter volumes, partições que por sua vez podem conter arquivos e pastas. Os VHDs podem ser distribuídos para outros hosts e montados como um disco adicional, assim como conectar uma unidade USB externa. Uma vez conectado, o host pode acessar os arquivos e pastas como qualquer outro disco do sistema.

O módulo cria um VHD que será nossa chamada imagem. A imagem conterá todos os arquivos e pastas necessários para o banco de dados.

Durante o processo de criação de uma imagem, o módulo obterá um backup do banco de dados que você especificou e restaurará o banco de dados em um VHD.

Após a restauração, o VHD é fechado e desmontado e agora contém todos os arquivos necessários para clonar o banco de dados.

Figura 1:processo de criação de uma imagem

Clone


Para criar um clone, o módulo cria um “disco diferencial” que contém os mesmos arquivos e pastas do disco pai, mas salva apenas o delta entre pai e filho.

Essa funcionalidade economiza espaço em disco imediatamente porque apenas uma fração do tamanho do banco de dados original é usada para o clone.

Outra vantagem é que, como o clone salva o delta das alterações, a própria imagem não é afetada por nenhuma das alterações. Isso significa que outros clones também não são afetados.

O processo de criação de um clone é criar um disco diferencial dentro de uma imagem criada (disco pai). O clone é montado e o banco de dados dentro do clone é anexado a uma instância.

A partir desse momento, o banco de dados está operacional da mesma forma que o original estaria. Ele contém os mesmos objetos, dados e comportamentos. Como todos os objetos estão no banco de dados como o banco de dados original, os planos de consulta e as estatísticas de consulta agirão da mesma forma.

Isso dá ao usuário ou desenvolvedor a chance de criar consultas que serão executadas da mesma forma na produção e no sistema de desenvolvimento, reduzindo o risco de executar consultas ineficientes.

Criando as imagens e clones


Criar uma imagem


O primeiro passo do processo é criar uma imagem. Para criar uma imagem, você tem os seguintes pré-requisitos:
  • Instância de origem
  • Instância de destino (pode ser igual à instância de origem)
  • Banco de dados
  • Caminho de rede
  • Cópia de segurança

O comando que cria a imagem é:New-PSDCImage .

É muito importante usar um caminho de rede para as imagens para possibilitar que outros hosts encontrem a imagem e a usem para criar um clone.

Quando o seguinte comando é executado:
New-PSDCImage -SourceInstance SQLDB1 -DestinationInstance SQLDB1 -ImageNetworkPath \\sqldb1\psdatabaseclone\images -Database DB1 -CreateFullBackup

Você obterá o seguinte resultado:



Este comando foi executado em 24/07/2018 por volta das 21h, o que explica as datas na imagem

Neste exemplo, o comando examina a instância SQLDB1 de um banco de dados específico e tenta criar uma imagem usando a mesma instância. Ele criará um novo backup completo para obter os dados mais recentes.

O resultado é uma imagem localizada no compartilhamento de rede \\sqldb1\psdatabaseclone\images chamado DB1_20180724214146.vhdx .

Os números no nome da imagem são um carimbo de data/hora em que a imagem foi criada.

Criando um clone


O clone depende da imagem e a maneira mais fácil de criar um clone de um banco de dados específico é deixar o módulo descobrir isso para você.

Executando o seguinte comando:
New-PSDCClone -SqlInstance SQLDB3 -Database DB1 -CloneName DB1_Clone2 -LatestImage

Irá criar um resultado semelhante como abaixo:



O comando acabou de criar um disco diferencial em outra instância. O clone é baseado na imagem mais recente do banco de dados DB1, e o clone será denominado “DB1_Clone2”.

Como não fornecemos um destino, o comando pesquisará o local de dados padrão da instância do SQL Server.

Dentro desse diretório, ele criará um subdiretório chamado “clone”. O clone será colocado dentro dessa pasta.

Recuperando informações


Durante a configuração do módulo, você atribuiu um local onde todos os clones podem ser encontrados. Este era um banco de dados ou um diretório e, mais especificamente, um compartilhamento, onde os arquivos de configuração são gravados.

Para recuperar as informações você pode usar os comandos Get-PSDCImage e Get-PSDCClone . Esses comandos recuperarão as informações do armazenamento de informações e as retornarão ao usuário.

Informações da imagem


Para obter as informações da imagem, você deve usar o comando Get-PSDCCimage . Isso lhe dará um resultado semelhante ao abaixo:



Você vê que pode haver várias imagens do mesmo banco de dados, cada uma com dados diferentes.

Clone informações


Semelhante à recuperação de informações de imagem, você pode obter informações de clone. Use o comando Get-PSDCClone e você obterá um resultado semelhante ao abaixo:


O que vem a seguir?


A próxima coisa com PSDatabaseClone é tornar possível ofuscar os dados nas imagens para torná-lo adequado para ambientes corporativos. Todos nós sabemos sobre os incidentes de violação de dados recentemente e queremos garantir que nossos dados, pelo menos os que não estão no local, sejam mascarados de forma que ninguém saiba o que fazer com eles.

Como você pode ajudar?


PSDatabaseClone é um módulo PowerShell de código aberto e todos os interessados ​​podem ajudar a melhorar o módulo. Se você estiver familiarizado com o desenvolvimento de funções e/ou módulos do PowerShell, poderá ajudar a desenvolver novos recursos, corrigir bugs (tenho certeza de que há bugs em algum lugar). Se você não se sente à vontade para desenvolver o código, não se preocupe; há muitas coisas para fazer.

Você pode ajudar a testar as diferentes funções e tentar quebrá-las. Eu, como uma pessoa, só posso ir tão longe e na maioria das vezes testo o fluxo feliz dos meus programas. Você provavelmente testa de uma maneira diferente e obtém outros resultados que eu nunca teria pensado. Isso ajudará a tornar o módulo melhor.

Você também pode ajudar a pensar em novos recursos para adicionar à solução atual. Você pode ter uma ótima ideia para uma nova funcionalidade que eu não poderia ter pensado por conta própria.

Se você tem uma ideia para um novo recurso ou encontrou um bug, vá para a página do github e crie uma solicitação de recurso ou um relatório de bug. É muito apreciado.

Informações


Site:https://psdatabaseclone.org

Github:https://github.com/sanderstad/PSDatabaseClone

Sobre o autor

Sander trabalha com SQL Server desde a versão 2000.
Ele trabalhou em vários setores , da agricultura, indústrias financeiras e saúde.
Ele trabalha com o PowerShell desde a versão 1 e está adotando a automação onde pode.