A melhor maneira de fazer backup e truncar logs de transações em um agendamento

9

Não sou DBA, mas, como as coisas são, tenho que usar o chapéu do DBA e configurar planos de manutenção na minha instância do SQL Server.

Então, por um tempo, meu processo do SSIS da noite para o dia executa uma Execute SQL Task para executar os backups - basicamente executando master.dbo.xp_create_subdirpara garantir a existência das pastas de destino e, em seguida BACKUP DATABASE [DbName] TO DISK = 'G:\Backups\DbName\DbName.bak' WITH INIT.

Sempre que essa tarefa falhava, o restante do processo era interrompido e eu recebia uma notificação e chegava na manhã seguinte para perceber que a unidade dos logs de transações estava cheia, e então eu os truncava manualmente e seguia em frente. .. até que a história se repita e os logs de transações superem o espaço em disco disponível novamente.

O script "truncado manual" fica assim:

use Staging;
alter database Staging set recovery simple
alter database Staging set recovery full
dbcc shrinkfile ('Staging_log', 0, truncateonly);
go

Então, estou ficando cansado disso, e decidi tentar fazer as coisas corretamente e seguir as etapas aqui e criar um plano de manutenção real :

Plano de manutenção do SQL Server

O problema é que nunca fiz isso antes, então tenho algumas perguntas:

  • O backup dos logs de transações como esse os truncará automaticamente, ou há outra coisa que preciso fazer?
  • É possível executar backups de dados e log de transações simultaneamente? Se não, então qual é a maneira correta de fazer isso?
  • Os arquivos de backup estão sendo selecionados durante a noite por outro processo que captura todos os arquivos no servidor e os armazena em outro local - seria uma boa idéia expirar o conjunto de backups após 2 dias? Preciso fazê-los expirar?
  • As tarefas de limpeza removem, respectivamente, os arquivos .bak e .trn "antigos" nas subpastas de G:\Backups. Isso faz sentido?
  • Seria melhor fazer isso no SSIS, para que eu possa falhar no meu ETL se / quando os backups falharem? Ou meu processo de ETL deve se importar?

Desculpe, se houver muitas perguntas para uma postagem, se necessário, editar e fazer várias perguntas - acho que todas elas estão intimamente relacionadas.

Mathieu Guindon
fonte
3
Você pode explicar o que você quer dizer com "truncar"? Você quer dizer que um backup de log reduz o arquivo de log? Para qual propósito? Para que possa crescer novamente?
Aaron Bertrand
3
Além disso, sugiro que você leia esta pergunta e suas respostas para obter informações mais detalhadas
Aaron Bertrand
3
Se você precisar apenas de recuperação diária, mantenha o modo simples. (Por que você mudaria para simples e depois para completo? O que você acha que consegue?) Mas se tudo é diurno, seu registro não deve ser alterado durante o dia. De qualquer forma, não, o backup do log nunca reduzirá o arquivo de log.
Aaron Bertrand
3
Se você passar 6 meses no modo de recuperação total sem nunca fazer um backup de log, sim, seus arquivos de log aumentarão. No entanto, se, como você diz, você só tem atividade de leitura durante o dia, usar o modo de recuperação total é um desperdício, apenas simplifique. Em geral, o arquivo de log não aumentará (pois no modo de recuperação simples, o espaço para todas as transações, exceto as ativas, pode ser reutilizado). Os DBAs que sabem o que estão fazendo geralmente usam o modo de recuperação completa (para que possam restaurar em um determinado momento), dimensionam seus arquivos de log adequadamente e executam backups de log com frequência suficiente para que os arquivos de log não cresçam.
Aaron Bertrand
3
Como você diz que não precisa de recuperação pontual, não sei por que você considera o modelo de recuperação completa uma opção.
Aaron Bertrand

Respostas:

7

Somente o SSIS da noite para o dia está fazendo gravações, durante o dia todas as leituras - eu só preciso de recuperação diária.

Você deve escolher seu modelo de recuperação com base nas suas necessidades comerciais:

  • Quantos negócios de dados podem perder e ao mesmo tempo sobreviver?

Com base na resposta acima, você deve escolher cuidadosamente seu modelo de recuperação de banco de dados .

Em termos simples (sem discutir o modelo de recuperação de log em massa) ,

  • Um modelo de recuperação completa permite backups de log que permitem a recuperação pontual.
    • O truncamento do log pode ocorrer quando você faz backups do log de transações, ou seja, o espaço no arquivo do log será reutilizado após cada backup do log e não ficará inchado!
  • Um modelo de recuperação simples permite apenas fazer backups COMPLETOS. A recuperação point-in-time não é possível.
    • O truncamento do log pode ocorrer apenas quando um ponto de verificação ocorre (manual ou automaticamente), ou seja, como você faz backups completos regulares, não precisa se preocupar com o log de transações, pois o CHECKPOINT cuidará da reutilização da parte inativa do arquivo de log.

Lembre-se de que o truncamento de log NÃO é uma redução física no tamanho do arquivo de log de transações. Significa que a parte inativa do arquivo de log de transações é marcada como reutilizável .

Portanto, você deve predefinir adequadamente seu arquivo de log de transações (e arquivos de dados). O aumento do arquivo de log ativará os eventos de crescimento automático (se seu banco de dados estiver definido para crescimento automático como último recurso). Verifique minha resposta - Crescimento automático - Porcentagem de uso?


Eu sugiro que você abandone os planos de manutenção e implemente [uma solução inteligente de manutenção - que seja fácil, flexível e siga as melhores práticas] - 5 . - Solução de backup da Ola (e também solução de manutenção de índice ).


vamos responder às suas perguntas:

O backup dos logs de transações como esse os truncará automaticamente, ou há outra coisa que preciso fazer?

Não anexe backups nem defina-os para expirar. Eles criam uma grande bagunça. Use INITe faça backups de log separados com carimbo de data e hora. De fácil manutenção. Use a solução de backup da Ola para isso. A solução é flexível para excluir backups antigos também.

É possível executar backups de dados e log de transações simultaneamente? Se não, então qual é a maneira correta de fazer isso?

Um backup completo não tem efeito em um backup do T-log. Um backup completo contém apenas o log de transações necessário para que, no caso de uma restauração, o banco de dados seja transacionalmente consistente com o horário em que a parte de leitura de dados do backup completo foi concluída. Verificação - quanto log de transações um backup completo inclui?

Além disso, um backup de log durante um backup completo não truncará o log de transações. Um (dois) backups de log após a conclusão do backup completo truncará o log.

Os arquivos de backup estão sendo selecionados durante a noite por outro processo que captura todos os arquivos no servidor e os armazena em outro local - seria uma boa idéia expirar o conjunto de backups após 2 dias? Preciso fazê-los expirar?

As tarefas de limpeza removem, respectivamente, os arquivos .bak e .trn "antigos" nas subpastas de G: \ Backups. Isso faz sentido? Seria melhor fazer isso no SSIS, para que eu possa falhar no meu ETL se / quando os backups falharem? Ou meu processo de ETL deve se importar?

Para acima de ambos, use a solução de manutenção de backup da Ola. Ele cuidará da exclusão de arquivos antigos.

Kin Shah
fonte
Impressionante. Então, mudei o modelo de recuperação para 'Simples' para todos os meus bancos de dados e executei o script de Ola. Parece que tudo o que preciso fazer agora é realmente agendar os empregos criados?
Mathieu Guindon
Sim por favor. Além disso, não se esqueça de marcar como resposta / voto positivo se a resposta for a solução ou for útil - dessa forma, ela não será sinalizada como sem resposta.
Kin Shah