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
*/