Inquiridor
Script de backup com exclusão a cada 5 dias

Pergunta
-
Boa tarde
Estou montando um script de backup que no nome do arquivo tem a data e hora que foi gerado o backup , só que não estou conseguindo fazer com que seja excluido os backups com mais que 5 dias para que não lote meu HD.
Alguém poderia me dar uma luz de como fazer isso, o script de backup esta a baixo.
-------------------------------------------------- INICIO DO SCRIPT --------------------------------------------------------------
CHECKPOINT;
declare @filename varchar(1000)
set @filename = 'D:\BACKUP_BANCOS\"nome que desejar para o bkp" - ' + replace(convert(varchar, getdate (), 104), '.', '.') + ' - ' + CAST(DATENAME(hh,getDate()) as varchar) + '.' + CAST(DATENAME(n,getDate()) as varchar) + '.' + CAST(DATENAME(ss,getDate()) as varchar) + '.bak'
BACKUP DATABASE "nome do banco" TO DISK = @filename
WITH
INIT , NOUNLOAD , NAME = @filename, NOSKIP , STATS = 25, NOFORMAT, EXPIREDATE='2009-08-09'
-------------------------------------------------- FIM DO SCRIPT --------------------------------------------------------------
Se alguém puder me dar uma força ficarei muito agradecido.
Abs.- Editado Script de backup com exclusão a cada 5 dias segunda-feira, 24 de agosto de 2009 20:04
Todas as Respostas
-
Olá,
Segue uma idéia:
Faz o backup
SET NOCOUNT ON DECLARE @DATABASE VARCHAR(255) DECLARE @SQL AS NVARCHAR(MAX) DECLARE C_SQL CURSOR FOR SELECT NAME FROM SYS.DATABASES WHERE STATE_DESC = 'ONLINE' OPEN C_SQL FETCH NEXT FROM C_SQL INTO @DATABASE WHILE @@FETCH_STATUS = 0 BEGIN SET @SQL = 'BACKUP DATABASE ' + @DATABASE + ' TO DISK = ' + CHAR(39) + 'F:\MSSQL\BACKUP\' + @DATABASE + '\' + @DATABASE + '_BACKUP_' + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(19), GETDATE(), 120), '-',''), ':',''),' ','_') + '.BAK' + CHAR(39) + ' WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, COMPRESSION' EXEC SP_EXECUTESQL @STATEMENT = @SQL FETCH NEXT FROM C_SQL INTO @DATABASE END CLOSE C_SQL DEALLOCATE C_SQL
Apaga os backups de 7 dias:
DECLARE @DATE DATETIME = ( SELECT CAST( DATEADD(DAY, -7, GETDATE()) AS NVARCHAR(23) ) ) EXECUTE master.dbo.xp_delete_file 0, N'F:\MSSQL\Backup', N'bak', @DATE, 1 EXECUTE master.dbo.xp_delete_file 0, N'F:\MSSQL\Backup', N'trn', @DATE, 1
Abraços
Demétrio Silva -
Sugiro utilizar o Maintenance Plans, que já fiz isso automatico para você, basta setar uma propriedade em Maintenance Cleanup Task e dizer quantos dias gostaria que o backup fosse mantido.
DBA SQL Server MCTS - SQL Server 2005 | ITIL Foundation V2 http://www.bydocs.com -
-
Concordo 100% com o Demétrio.
E ainda acho mais que isso: Alguem que só sabe apertar botão em interface não sabe muita coisa na hora do aperto, o profissional tem que saber como funciona e como utilizar tambem sem as interfaces graficas.
Tks. Fausto Fiorese Branco DBA - SQL Server 2k5 São Paulo - Brasil * http://dba-sqlserver.blogspot.com/ -
Concordo 100% com o Demétrio.
E ainda acho mais que isso: Alguem que só sabe apertar botão em interface não sabe muita coisa na hora do aperto, o profissional tem que saber como funciona e como utilizar tambem sem as interfaces graficas.
Tks. Fausto Fiorese Branco DBA - SQL Server 2k5 São Paulo - Brasil * http://dba-sqlserver.blogspot.com/ -
Demétrio, também concordo com sua opnião, é como disse, temos que avaliar o cenário, se no cenário existente o MP atender em todos os requesitos não há porque desenvolver uma solução customizada se o SQL já disponibiliza uma que atende a necessidade.
Uma vantagem de utilizar o MP é que conseguimos criar boas lógicas na política de backup de forma bem simples, por exemplo, podemos criar um MP, que:
1 - Caso haja problema de espaço, você pode fazer intercalações de backup de vários bancos em uma ordem que sempre tenha o espaço necessário para realizar o backup atual,o por exemplo, apagando arquivos mais antigos de outros bancos o qual já possuem backups atualizados.
2 - Realizar o backup do banco.
3 - Apagar arquivos antigos do mesmo banco.
4 - Realizar a integridade do arquivo.
5 - em alguns casos realizar o check de ingridade do banco.
é fácil gerar nomes como por exemplo: nomedabase_data_em_que_o_backup_foi_realoizado e por ai vai..
Porém como citamos, existem vários cenários, onde as opções já existentes no SQL não contemplar sua necessidade, sou a favor de criar uma solução customizada.
DBA SQL Server MCTS - SQL Server 2005 | ITIL Foundation V2 http://www.bydocs.com -
-
-
Fausto como citei em minha outra resposta eu também concordo que nos casos onde é necessário e o que já existe no SQL Server não contempla sua necessidade é válido o desenvolvimento de soluções customizadas, não significa que, por utilizar uma das facilidades da ferramenta a pessoa não saiba fazer de outra maneira.
Recursos o SQL Server tem muitos o importante é saber o conceito de cada um, como e quando utiliza-los. Por exemplo, no 2005 existe um recurso novo como CLR, é poderoso, importante saber mecher, porém você não vai criar um CLR para por exemplo funções que o SQL Server consiga realizar com um simples TSQL como por exemplo manipulações em conjunto.
Como você disse é importante saber realizar os procedimentos vamos dizer na "unha", mas na minha opnião isso deve ser utilizado quando necssário.
Eu por exemplo utilizo muito pouco a interface gráfica (Por exemplo realizar backup, crescimento de arquivos, entre outros), principalmente em ambientes de produção, a utilizo muitoo por exemplo para gerar script, como a própria Microsoft recomenda, quando preciso por exemplo alterar uma tabela, altero no SSMS, gero o script faço se necessário customizações e executo na linha de comando, onde temos mais o controle da situação.
bom esta é minha opnião.
DBA SQL Server MCTS - SQL Server 2005 | ITIL Foundation V2 http://www.bydocs.com