Algumas pessoas me perguntam qual a melhor solução ou estratégia de Backup para suas Bases de Dados no SQL. Assim como em várias outras questões não há uma única resposta para essa pergunta ;)
Para cada cenário e tipo de negócio há requisitos mínimos que devem ser considerados na implementação da rotina de Backup de suas Bases de Dados. Em alguns casos a rotina de Backup deve considerar :
- Armazenar os Backups em uma unidade externa ( DAT, DLT ou etc);
- Janela de Backup de XX Horas;
- Garantir que não haverá mais de 10 minutos de perda de dados;
- Etc…
Mesmo não havendo uma resposta definitiva para essa questão segue abaixo alguns scripts que podem ajuda-lo em determinados ambientes menos críticos e/ou complexos;
O Script abaixo gera o Backup, FULL, de todas as bases de dados, com exceção das Bases Pubs e Tempdb, em um caminho físico definido;
/************************************************/
/** SCRIPT BACKUP_FULL **/
/** Rodrigo Immaginario **/
/** http://rodrigoi.org.br **/
/** Versão 1.0 - 20090127 - **/
/************************************************/
use master
go
declare
@tmpDate varchar(50),
@tmpName varchar(250),
@base varchar(30),
@path varchar(255)
set @tmpDate = convert(varchar(50),getdate(), 20)
set @tmpName = substring(@tmpdate,1,4) + substring(@tmpdate,6,2) +
substring(@tmpdate,9,2) + '_' +
substring(@tmpdate,12,2) + substring(@tmpdate,15,2) +
substring(@tmpdate,18,2)
declare bases insensitive cursor for
select name from sysdatabases where name not in ('pubs', 'tempdb') order by name
open bases
fetch next from bases into @base
while @@fetch_status = 0 begin
set @path = 'f:\Backup\Full\' + @base + ' _FULL_' + @tmpName + '.bak' /* Backup Full */
Backup Database @base
to DISK = @path
with INIT /* Backup Full */
dump transaction @base with no_log /* Limpeza do log de transacoes */
fetch next from bases into @base
end
close bases
deallocate bases
go
Eventualmente você precisa armazenar diversas versões dos arquivos de Backup fisicamente em um disco, este procedimento pode gerar um aumento no custo de administração do seu ambiente uma vez que você terá de se preocupar com as versões e tamanho dos arquivos armazenados. Abaixo segue outro script que pode ajudar nesse tipo de situação;
/************************************************/
/** SCRIPT LIMPEZA ARQUIVOS **/
/** Rodrigo Immaginario **/
/** http://rodrigoi.org.br **/
/** Versão 1.0 - 20090127 - **/
/************************************************/
DECLARE @currentdate datetime
DECLARE @olddate datetime
set @currentdate = CURRENT_TIMESTAMP
set @olddate = @currentdate – 5
EXECUTE master.dbo.xp_delete_file 0,N'F:\Backup\Full',N'bak',@olddate,1
Normalmente esse tipo de procedimento é criado como um JOB no SQL, com um agendamento de acordo com sua necessidade.
Em um cenário um pouco mais complexo podemos precisar da seguinte política de Backup :
- Backup FULL – Diário (1x)
- Backup Diferencial – A cada 4 horas;
- Armazenar até 5 dias de Backup em disco;
Dessa vez vou disponibilizar para download dois script ( Backup Full e Backup Differential ). Salvo os devidos ajustes (path físico e login de owner) é só executar os scripts para criar o JOB já com o agendamento.Enjoy !!
Abraços,