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


*/



Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *