Quando implemento o script de backup de Ola Hallengren em meus servidores, sempre defino o @CleanupTime
parâmetro para backups de log como zero. Dessa forma, toda vez que o trabalho de backup de log é executado, ele verifica os arquivos de backup de log mais antigos que o último backup completo e os exclui. No entanto, isso também é verdade para COPY_ONLY
backups completos! A tarefa de backup de log deve verificar apenas o último COPY_ONLY
backup não completo para excluir arquivos de backup de log antigos.
Apenas me perguntando se eu sou o único que se deparou com isso, ou se o que estou sugerindo faz sentido. Se eu precisar fazer um backup somente de cópia completa no meio do dia para o IDK atualizar um banco de dados TEST, esse backup somente de cópia não deverá afetar a sequência de backup diário regular. Deixe-me saber seus pensamentos, por favor.
Parte II de II (teve que dividir minha resposta)
Fazendo isso melhor
Considerando seu RPO e RTO definidos pelo seu negócio, agora você pode querer alterar o parâmetro do
@CleanupTime
para algo maior que0
. Por quê? Porque o valor0
só funcionará em conjunto com o mecanismo interno à prova de falhas.Vamos usar a seguinte linha do tempo:
Em algum momento, seus backups de log de transações (e backups completos?) são copiados para uma unidade de rede e copiados de lá por meio de uma solução de backup, possivelmente combinada com algum tipo de armazenamento em fita e/ou disco. Assim que o primeiro
BACKUP LOG ...
ocorrer após o último ,BACKUP DATABASE ...
seusBACKUP LOG ...
arquivos anteriores desapareceram...Perguntas para se questionar a si mesmo
Observando as perguntas acima, considere usar um tempo de limpeza diferente (por exemplo
@CleanupTime=48
, ) para manter horas adicionais de backups do log de transações nos discos do servidor de banco de dados.Benefícios
COPY_ONLY
backupBACKUP DATABASE ...
COPY_ONLY
backupConstruindo uma base sólida
Em qualquer momento, algo irá falhar. Você tem que garantir que pode acomodar quaisquer falhas no futuro e ainda garantir aos interessados que sua solução será 99,.....% à prova de erros.
Como eu faço isso
Trabalhar com a solução da Ola é muito fácil, SE você pensar uma ou duas vezes em como deseja recuperar um banco de dados e com base no RPO e RTO de seus negócios.
Minha implementação pessoal é ter as seguintes políticas de agendamento/retenção:
Sistemas de produção
Sistemas de teste
Será feito backup do sistema de teste durante o horário de produção. Isso pode ser às 10:00 da manhã ou às 14:00 da tarde para backups completos e xx:15 para os backups do log de transações.
Por que eu faço assim
... ou meus pensamentos por trás dessas decisões ...
Ao distribuir os tempos de backup para diferentes slots, estou distribuindo uniformemente a E/S de disco nos sistemas de armazenamento. Sem aglomeração de E/S maciça no disco nas horas completas (FULL) ou nas horas trimestrais (TLOG).
Eu diferencio entre SAP e não SAP por causa dos tamanhos dos bancos de dados.
Os sistemas de teste podem debulhar o armazenamento durante o dia. Sem impactos de alto desempenho.
Os backups DIFF e FULL ocorrem antes do início dos backups em fita e normalmente são concluídos antes do início dos backups em fita.
As políticas de retenção me permitem alcançar o RTO e o RPO definidos pela empresa, mesmo que a solução de backup (fita) fique inativa por um dia.
Os backups ainda funcionarão e estarão em conformidade com RTO e RPO mesmo se a rede (como um todo ou apenas parcialmente) estiver inativa por um dia.
Seu processo de pensamento
Sua
@CleanupTime
configuração provavelmente foi baseada em um entendimento errado do roteiro de Ola.Parte I de II (teve que dividir minha resposta)
Há uma ou duas coisas para pensar aqui. Na minha opinião, você pode ter tomado um atalho no processo de pensamento. Vou explicar enquanto estou fazendo essa suposição...
Você pode querer dar uma olhada rápida na minha resposta aceita aqui, que foi postada em referência à pergunta Precisa de sugestão na estratégia de backup [fechada] para fornecer algumas ideias sobre RTO e RPO.
Por quê? Porque configurar
@CleanupTime=0
pode ser uma má ideia...Primeiro a responder sua pergunta.
É um bug no script de Ola? - Não. Ola projetou seu script para verificar o último
BACKUP DATABASE...
(Backup Completo) e, em seguida, excluir os backups de logs de transações (BACKUP LOG ...
) que ocorreram antes desse backup e somente se@CleanupTime
for menor do que quando ocorreu o Backup COMPLETO.Funciona conforme projetado, porque a
BACKUP DATABASE ... WITH COPY_ONLY...
ainda é um Backup Completo .Segurança primeiro
Criar um backup com a
BACKUP DATABASE ... COPY_ONLY...
opção e, em seguida, criarBACKUP LOG...
ainda permitirá restaurar o banco de dados para um estado consistente usando oCOPY_ONLY
backup COMPLETO e os backups de log de transações disponíveis.Eu testei isso usando meu banco de dados StackExchange:
COPY_ONLY
backup manualmenteBACKUP LOG ...
usando os scripts do OlaBackup manual com
COPY_ONLY
Backup do log de transações com os scripts do Ola
Restaurar
Você pode não a diferença nos timestamps é de aprox. 7 minutos.
Resultados
Resumo
O roteiro de Ola funciona conforme projetado. Verificamos que a
BACKUP DATABASE ... WITH COPY_ONLY...
e um adicionalBACKUP LOG ...
funcionarão juntos. O recurso à prova de falhas garante que você possa restaurar seu banco de dados com o último backup completo (seja COPY_ONLY ou não) e os backups de log de transações disponíveis.(Por favor, leia a Parte II de II para mais respostas)
Você está certo! Eu acho que isso é um bug ou by-design. Consegui repo o cenário.
Então, basicamente, quando você executa o script de Ola com isso:
Ou nativa:
Ao executar um novo backup completo ou
copy_only
backup completo ou mesmo backup diferencial, todos os backups de log anteriores serão excluídos após a execução de outro backup de log (script de backup de log do Ola com@CleanupTime = 0
param).Testado usando a versão do script de Ola: 7 de outubro de 2016 .
Baseado no site da Ola :
Não mencionou sobre
COPY_ONLY
backups.Enquanto isso, você pode alterar o parâmetro de backup de log
@CleanupTime = NULL
como uma solução alternativa. Ou considere mudar para outras ferramentas de backup (por exemplo, Minion Backup ou dbatools ) ou role seu próprio código personalizado porque a última atualização do Plano de Manutenção de Ola foi em 7 de outubro de 2016. Há um github se você quiser levantar um problema/aprimoramento.