Author Archives: Fabiano Pereira da Rosa

Migrando banco de dados SQL Server utilizando powershell

Deseja mover um banco de dados SQL de um servidor pra outro realizando backup e restore através de um linha de comando apenas?  Quem sabe mover vários bancos sem ter que realizar cada passo manualmente, como redistribuir os arquivos nos discos manualmente a cada restore? e ainda deixar os bancos preparados para o mirror? Se você está enquadrado nesses desejos aqui vai uma super contribuição do SQL Masters Brasil!

Estamos compartilhando um script da hora escrito pelo meu amigo e colega Mauricio Moura (http://mauriciomoura.blog.br/) e com atualizações minhas como passagem de um banco ou uma lista de bancos e parâmetros para informar que o mirror faz parte da migração, e entre outras. Nosso dia a dia na empresa está repleto de demandas de m igração como parte dos projetos e requisições de clientes. Vários bancos todo o tempo sendo migrados, com tamanhos cada vez mais gigantescos. Este post parte do princípio que você é familiarizado com o Windows Powershell e o modelo de objetos “smo” do SQLServer.

MigrateDB.ps1 (https://docs.google.com/file/d/0B2cd7SRFjgbmcjJCRTBoQldWM1U/edit?usp=sharing)

Testado e utilizado para as versões: SQL Server 2008\SQL Server 2008R2

image

Para utilizar o script, você precisa apenas passar alguns poucos parâmetros e pronto…vá preparar aquele café esperto e aprecie olhando alguns emails enquanto a migração rola suave.

Abaixo está um conjunto de sintaxes necessárias de acordo com sua necessidade.

Sintaxe

./MigrateDB.ps1 from_server to_server backup_path [-nodblist dbname |

-nocompression | -mirror | -nocopyonly ]

Argumentos

from_server

Servidor origem de onde o banco está sendo migrado.

to_server

Servidor destino para onde o banco está sendo migrado.

backup_path

pasta compartilhado usada pelo script para criar o arquivo de backup.

-nodblist

Informa que a lista de bancos não será usada. Quando usar este argumento o parâmetro dbname deve ser fornecido. Caso não utilizar este argumento,  script irá fazer uso do arquivo “migratedblist.txt” que deve ser adicionado na pasta c:\temp da máquina em que o script está sendo executado.

dbname

É nome do banco de dados sendo migrado. Ele deve ser informado quando –nodblist é utilizado.

-nocompression

Informa o script que compression não será utilizado durante o backup. Compression é utilizado como default.

-mirror

Informa o script que uma sessão de mirroring será criada após a migração. Com este argumento o script realiza um backup de tlog também e restaura ambos os backups full and tlog com norecovery para a configuração do mirror mais adiante. Show de bola!

-nocopyonly

Informa o script para não usar a opção copyonly. Útil quando utilizando o argumento –mirror para migrar o banco recém alterado do modo simple para full para a configuração do mirror. Neste caso se –nocopyonly é usado o backup de tlog falhará devido o backup full não ter sido realizado antes do banco de dados ter sido alterado para full.

 

Como Utilizar:

Digite o nome do script com os argumentos: >./MigrateDB.ps1 <argumentos>

Exemplos:

1.

Copia o(s) banco(s) listados na pasta c:\temp\migratedblist.txt do servidor1 para o servidor2  realizando backup para e restore da pasta compartilhada \\servidor2\backup. Apenas o full backup é realizado com compressão e restaurado no servidor destino.

./MigrateDB.ps1 servidor1 servidor2 \\servidor2\backup

* c:\temp\migratedblist.txt é o aqruivo texto contendo a lista de banco de dados, exemplo:

banco1

banco2

banco3

Isso aí, bem assim, um embaixo do outro.

 

2.

Esse exemplo copia o banco dellpowertodomore do servidor1 para o servidor2 realizando backup para e restore da pasta compartilhada \\servidor2\backup. O backup não será compactado, ambos backup full e tlog serão realizdos e então restaurados com o norecovery para configuração de mirror. O banco dellpowertodomore estáe em “full recovery mode” e os backups full e tlog realizados normalmente antes de iniciar a migração. Isso tudo o script faz!

./MigrateDB.ps1 servidor1 servidor2 “\\servidor2\backup” –nodblist dellpowertodomore

-nocompression –mirror

*Certifique-se que o banco estava em full recovery mode antes de rodar o script.

 

3.

Esse exemplo copia o banco dellpowertodomore do servidor1 para o servidor2 realizando backup para e restore da pasta compartilhada \\servidor2\backup. O backup não será compactado, ambos backup full e tlog serão realizdos e então restaurados com o norecovery para configuração de mirror. O banco dellpowertodomore foi recém alterado para “full recovery mode” e o backup full nunca realizado antes da migração.

 

./MigrateDB.ps1 servidor1 servidor2 “\\servidor2\backup” –nodblist dellpowertodomore

-nocompression –mirror –nocopyonly

 

Considerações

Se a pasta compartilhada ter bastante espaço e o  script está rodando em um ambeinte bem ocupado, use o argumento –nocompression para evitar alta utilização da CPU e torne assim a migração possível. Tudo depende sempre de cada ambiente de produção e ainda exige uma monitoração mais próxima enquanto o script roda e interrompa-o sempre que os recusros começarem a ser muito utilizados.

Abra mais de uma sessão powershel para realizar multiplas migrações. O númeor de sessões dependerá dos recursos de hardware que você utiliza. Eu sugiro  dar 10-15 segundos de intervalo entre uma sessão e outra pra dar chance ao script de ler o tamanho atual do disco do servidor destino ao realizar a operação de restore.

Personalize as variáveis abaixo para excluir unidades de disco não usadas para os arquivos de dados e os usados para os tlogs, o scripts irá colocar os arquivos “mdfs” e “ndfs” em todos os discos não inclusos na variável $ExcludeDevicesforData  e colocará os “ldf” nos discos $DevicesForTlog,  exemplo:

$ExcludeDevicesforData = “DeviceID <> ‘C:’ and DeviceID <> ‘S:’ and DeviceID <> ‘T:’ and DeviceID <> ‘D:’ and DeviceID <> ‘U:'”
$DevicesForTlog = “DeviceID = ‘S:’ or DeviceID = ‘U:'”

 

Espero que o script seja útil no seu dia a dia e traga bastante produtividade para você. Seja feliz e um abraço!

Advertisements