none
Retenção de backups - TSQL RRS feed

  • Pergunta

  • Bom dia pessoal,

    Gostaria de saber se há como definir o tempo de retenção dos arquivos de backup via T-SQL.
    Tenho a seguinte rotina de backup:

    BACKUP

    DATABASE [DB_Name] TO DISK = N'\\Srv\BACKUP$\bkp_DB_Name.bak'

    WITH

    INIT , NOUNLOAD , NAME = N'DB_Name backup', NOSKIP , STATS = 10, NOFORMAT

    Fazendo todos os dias o uso desta rotina via JOB, o backup anterior sempre é sobre gravado, mas gostaria de reter por exemplo, os últimos 5 backups. É possível fazer isto sem precisar criar um Maintenance Plan?

    Obrigado.
    • Movido Gustavo Maia Aguiar sexta-feira, 26 de junho de 2009 15:30 (De:SQL Server - Desenvolvimento Geral)
    sexta-feira, 26 de junho de 2009 13:42

Respostas

  • Riley,

         Você pode usar o RETAINDAYS ou o EXPIREDATE.

    [ EXPIREDATE = { date | @date_var }
            | RETAINDAYS = { days | @days_var } ]


    BACKUP DATABASE [DB_Name] TO DISK = N'\\Srv\BACKUP$\bkp_DB_Name.bak'
    WITH
    INIT , NOUNLOAD , NAME = N'DB_Name backup', NOSKIP , STATS = 10, NOFORMAT, RETAINDAYS=5
    
    

    ou

    BACKUP DATABASE [DB_Name] TO DISK = N'\\Srv\BACKUP$\bkp_DB_Name.bak'
    WITH
    INIT , NOUNLOAD , NAME = N'DB_Name backup', NOSKIP , STATS = 10, NOFORMAT, EXPIREDATE='2009-07-01'
    
    

    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    • Marcado como Resposta Jason DBA Jr sexta-feira, 26 de junho de 2009 14:39
    sexta-feira, 26 de junho de 2009 14:29
    Moderador

Todas as Respostas

  • Riley,

         Você pode usar o RETAINDAYS ou o EXPIREDATE.

    [ EXPIREDATE = { date | @date_var }
            | RETAINDAYS = { days | @days_var } ]


    BACKUP DATABASE [DB_Name] TO DISK = N'\\Srv\BACKUP$\bkp_DB_Name.bak'
    WITH
    INIT , NOUNLOAD , NAME = N'DB_Name backup', NOSKIP , STATS = 10, NOFORMAT, RETAINDAYS=5
    
    

    ou

    BACKUP DATABASE [DB_Name] TO DISK = N'\\Srv\BACKUP$\bkp_DB_Name.bak'
    WITH
    INIT , NOUNLOAD , NAME = N'DB_Name backup', NOSKIP , STATS = 10, NOFORMAT, EXPIREDATE='2009-07-01'
    
    

    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    • Marcado como Resposta Jason DBA Jr sexta-feira, 26 de junho de 2009 14:39
    sexta-feira, 26 de junho de 2009 14:29
    Moderador
  • Roberto,

    Muito obrigado mesmo.

    Abraço.
    sexta-feira, 26 de junho de 2009 14:39
  • Pessoal,

    Surgiu uma nova dúvida...tudo bem que o script acima retém o backup por 5 dias...mas e se eu quiser que sejam gerados backups novos a cada dia e quando chegar no sexto dia, o SQL Server apague o mais antigo?
    Ex:

    base280609.bak
    base290609.bak
    base300609.bak
    ...
    quarta-feira, 1 de julho de 2009 17:22
  • Olá, Você pode usar o Maintenance Cleanup task do Maintenance plan para excluir estes backups antigos. Abraços
    Demétrio Silva
    quarta-feira, 1 de julho de 2009 20:39
  • Demétrio,

    Pois é, mas não resolveria meu problema.
    O que preciso fazer é ter 5 backups diferentes, gerados com o nome do backup + a data e sempre apagar o mais antigo. Pelo Maintenance Cleanup  task poderia fazer, mas aí precisaria gerar os backups via Maintenance Plan, mas os backups aqui são feitos todo via Job, e o pessoal não demonstra muito interesse em trocar esta regra, por isto estou com este problema, pq para resolver com um maintenance plan, seria muito simples...
    Mas obrigado mesmo assim por ter respondido!


    Abraço!

    sexta-feira, 3 de julho de 2009 14:08