none
Script de backup com exclusão a cada 5 dias RRS feed

  • 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.
    segunda-feira, 24 de agosto de 2009 19:57

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
    segunda-feira, 24 de agosto de 2009 20:53
  • 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
    terça-feira, 25 de agosto de 2009 03:06
  • Cleyton,

    Concordo que o MP realiza tal procedimento, no entanto, nem sempre as soluções prontas atendem  todos os casos. Ambas as soluções atendem, mas uma solução customizada é muito mais flexível.

    Abraços
    Demétrio Silva
    terça-feira, 25 de agosto de 2009 12:18
  • 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/
    terça-feira, 25 de agosto de 2009 12:44
  • 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/
    terça-feira, 25 de agosto de 2009 12:45
  • 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
    terça-feira, 25 de agosto de 2009 12:53
  • É como também vejo as coisas, e como disse antes, cada caso é um caso. O importante é ter o conhecimento para aplicar a solução ideal para cada caso.

    Abraços

    Demétrio Silva
    terça-feira, 25 de agosto de 2009 12:56
  • É como também vejo as coisas, e como disse antes, cada caso é um caso. O importante é ter o conhecimento para aplicar a solução ideal para cada caso.

    Abraços

    Demétrio Silva
    terça-feira, 25 de agosto de 2009 12:57
  • 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
    terça-feira, 25 de agosto de 2009 13:07