Fazer backup e restore de todos os bancos SQL do ambiente de produção da sua empresa para ambientes de testes é um processo geralmente simples, mas, dependendo da quantidade de bancos e da frequência dos restores, acaba virando uma atividade mais chata que happy hour virtual…
Efetividade na utilização de nosso tempo é uma habilidade crítica para técnicos que ganham como diretores, por isso, hoje veremos como fazer backup e restore de todos os bancos SQL de forma rápida e simples, usando apenas 2 scripts automáticos!
Assista ao vídeo de demonstração:
Script da aula
-------------------------------------------------------------------------------------------------- -- Como fazer backup e restore de todos os bancos SQL -------------------------------------------------------------------------------------------------- -------------------------------------------------- -- Banco de testes -------------------------------------------------- -- Variáveis declare @s varchar(1000) declare @i tinyint = 1 -- controle do loop declare @n tinyint = 9 -- numero de bancos do teste -- Exclui bases caso existam (clean-up): while @i<= @n begin set @s = 'drop database if exists curso_' + right('0' + convert(varchar, @i), 2) execute (@s) set @i += 1 end -- Cria bancos set @i = 1 while @i<= @n begin set @s = 'create database curso_' + right('0' + convert(varchar, @i), 2) execute (@s) set @i += 1 end go -------------------------------------------------- -- Geração de scripts -------------------------------------------------- -- Backup de todos os bancos select name as db, 'backup database ' + quotename(name) + ' to disk = ''c:\tmp\' + replace(convert(varchar, getdate(), 102), '.', '-') + '__' + replace(@@servername, '\', '-') + '__' + replace(name, '\', '-') + '.bak''' as backup_rodar_na_origem from sys.databases where name not in ('tempdb', 'model', 'master', 'msdb') go -- Restore de todos os bancos select name as db, 'if db_id(''' + name + ''') is not null alter database ' + quotename(name) + ' set single_user with rollback immediate;' as script_acesso_exclusivo, 'restore database ' + quotename(name) + ' from disk=''' + 'c:\tmp\' + replace(convert(varchar, getdate(), 102), '.', '-') + '__' + replace(@@servername, '\', '-') + '__' + replace(name, '\', '-') + '.bak'' with replace' as restore_rodar_no_destino from sys.databases where name not in ('tempdb', 'master', 'model', 'msdb') go -------------------------------------------------- -- Processo -------------------------------------------------- /* == ORIGEM (ex: no servidor de produção): #1: Gerar os scripts de backup #2: Executar os scripts de backup #3: Copiar os backups da máquina de origem para a de destino #4: Gerar os scripts de restore == DESTINO (ex: no servidor de testes): #5: Executar no servidor de DESTINO, os scripts de restore, que foram gerados no servidor de origem */