Estou tendo problemas para entender exatamente o que esperar da CleanupTime
opção na solução de manutenção de servidor Ola Hallengren . Estou encontrando algumas perguntas relacionadas e respostas elaboradas, mas as explicações ainda me confundem um pouco.
Especificamente:
Estou fazendo um backup FULL semanal, um backup DIFF diário e um backup LOG de hora em hora. O backup COMPLETO está usando o padrão CleanupTime
de 24h. O backup DIFF e LOG tem NULL como CleanupTime
.
Na documentação do parâmetro CleanupTime , não consigo entender se definir a CleanupTime
configuração para um backup de BackupType
FULL, também excluirá arquivos de backup DIFF e LOG mais antigos ou apenas arquivos de backup FULL.
Especifique o tempo, em horas, após o qual os arquivos de backup serão excluídos. Se nenhuma hora for especificada, nenhum arquivo de backup será excluído.
O último parágrafo me faz pensar que a configuração CleanupTime
de backups de BackupType
FULL também excluirá os logs de transações mais antigos. Ainda não está claro se este parágrafo se aplica apenas aos backups do BackupType
LOG, ou também aos backups do BackupType
FULL.
O DatabaseBackup tem uma verificação para verificar se os backups de log de transações mais recentes que o backup completo ou diferencial mais recente não são excluídos.
O que estou tentando alcançar é que posso fazer uma recuperação pontual em até 1 semana. (Temos um banco de dados que muda muito lentamente, então isso é viável) Da maneira que entendo agora, isso exigiria um backup completo de uma semana e um backup de log de transações de uma semana. Uma vez que os backups completos e diferenciais só podem ser usados para restaurar para um ponto específico no tempo.
Então, devo apenas definir a CleanupTime
opção do meu trabalho de backup COMPLETO para 24*7
? O que estou supondo agora é que configurá-lo para 24h fará com que o próximo backup FULL exclua todos os arquivos de backup Full, diff e log de transações mais antigos, deixando-me com uma janela de recuperação pontual de ... 0 horas. Certo?
O
@CleanupTime
é sempre especificado para uma tarefa de backup específica. Por exemplo, se você criar uma tarefa de backup completo , uma tarefa de backup diferencial e uma tarefa de backup de log de transações@CleanupTime
, sempre estará relacionada à extensão da tarefa.Vamos dar uma olhada em um exemplo de backup completo .
Backup completo
Se você criar um trabalho de backup completo, normalmente adicionará um ou mais dos seguintes parâmetros:
@Databases
: Quais bancos de dados são submetidos a backup (não é realmente relevante para este exemplo)@Directory
: O diretório para armazenar os backups@BackupType
: Completo, Diferencial, TLog@CleanupTime
: quantas horas de backups devem ser mantidas@FileExtensionFull
: A extensão do seu backup.Portanto, você tem um trabalho de backup que criará um backup completo de acordo com o agendamento definido para o trabalho em. Vamos supor o seguinte:
@FileExtensionFull
foi definido para'BAK'
@Directory
foi definido para'F:\SQLBACKUP'
@CleanupTime
foi definido para24
(horas)Se olharmos para o
MaintenanceSolution.sql
arquivo, você encontrará a descrição do parâmetro:Bem, isso não está ajudando muito. O mesmo que na documentação oficial no site. Vamos cavar mais. Se você examinar o script, eventualmente encontrará uma seção parecida com esta:
O script foi empacotado para aumentar a legibilidade
Então Ola está basicamente usando o
xp_delete_file function
SQL Server embutido para excluir um arquivo em um determinado momento de acordo com:@CurrentDirectoryPath
@CurrentFileExtension
@CurrentCleanupDate
Mas espere o que seria, por exemplo, o
@CurrentCleanupDate
ser? Se voltarmos um pouco no script, você encontrará uma seção parecida com esta:Ah, então
@CurrentCleanupDate
é uma adição de data que é calculada a partir da@CleanupTime
e da hora atualGETDATE()
. Legal.(... e podemos ter encontrado um erro de digitação no código, porque as seções para banco de dados normal e espelho contêm
Mirror
o código.)Para que serve então a seção relevante
@CurrentFileExtension
? Vamos pesquisar um pouco novamente. E encontramos:Então você tem isso.
Resumo
Se os parâmetros da tarefa de backup completo
@FileExtensionFull='BAK'
estiverem definidos como e você tiver definido um@CleanupTime=24
, o procedimento excluirá todos os arquivos de backup completo com pelo menos um dia (24 horas).O
@CurrentCommand02
que é executado é basicamente:Portanto, não toca em nenhum outro arquivo de backup. (A menos que você tenha definido
'BAK'
como extensão de todos os tipos de backup, nesse caso você perde).Eu votei na resposta do @hot2use, pois aborda essa questão em detalhes, mas queria compartilhar uma maneira fácil de testar essas coisas.
Pode ajudá-lo (como me ajudou) a entender completamente como o script funciona se você:
hh
porminute
. As únicas referências que posso encontrarhh
são onde o script está lidando com o tempo de limpeza. Isso permite que você execute rapidamente backups de vários tipos (FULL, DIFF, LOG) veja os efeitos da execução, pois a retenção é em minutos e não em horas.Execute um backup FULL, DIFF e LOG de um banco de dados de teste e observe os arquivos criados nas pastas individuais. Isto é o que eu usei (observe o
CleanupTime
de 1 minuto devido a alterar o script de horas para minutos):Meus testes revelaram as seguintes observações:
CHEIO
Cada execução de um
FULL
backup criava um novoFULL
backup e excluía todosFULL
os arquivos de backup com mais de 1 minuto. NenhumDIFF
ouLOG
arquivos de backup foram afetados.DIFF
Cada execução de um
DIFF
backup criava um novoDIFF
backup e excluía todosDIFF
os arquivos de backup com mais de 1 minuto. NenhumFULL
ouLOG
arquivos de backup foram afetados.REGISTRO
Cada execução de um
LOG
backup criava um novoLOG
backup. Os backups contínuosLOG
(sem intervençãoFULL
ouDIFF
backups) simplesmente continuaram a se acumular naLOG
pasta de backup, independentemente do tempo de limpeza. Se um backup foi feito, a PRÓXIMA execução do backup excluiu todos os backups anteriores ao últimoFULL
ou também anteriores a 1 minuto .DIFF
LOG
LOG
FULL
DIFF
Nenhum arquivo
FULL
deDIFF
backup foi afetado durante a execução deLOG
backups.Eu recomendaria manter mais de 1 semana de
FULL
backups no caso de você precisar voltar no tempo para restaurar. Assumindo 2 semanas deFULL
backups, você precisariaCleanupTime
de 336 horas.Durante o teste do material de 1 minuto, você verá que:
FULL
backups nunca excluiDIFF
ouLOG
backupsDIFF
backups nunca excluiFULL
ouLOG
backupsLOG
backups nunca excluiFULL
ouDIFF
backupsExpandindo as outras duas respostas, porque acabei de encontrar isso:
Pode valer a pena notar (para quem pode google isso). para permitir um pouco mais do que o tempo exato em que você deseja manter seu backup.
Se o op quiser manter o backup de 1 semana, as 24 horas por dia nem sempre manterão o arquivo de 1 semana. Motivo: Os bancos de dados estão crescendo. Seu novo backup pode demorar um pouco mais.
Se o seu primeiro arquivo de backup foi criado 2020-03-15 03:00:05.000 E o próximo backup demora um pouco mais e o arquivo é criado 2020-03-22 30:00:0 6 .000 - isso é mais do que o especificado 168 horas (um segundo, lembre-se)
Então, para estar seguro, faça 24x7+1!