Log de transações e espelhamento - procurando a explicação mais idiota possível

8

Antes de tudo, devo admitir que luto com o conceito de log de transações. Quero dizer - eu entendo que é o log de todas as transações que acontece no banco de dados, mas quando se trata de colocá-lo adequadamente no contexto de alguma tarefa, obviamente falta algo. Portanto, para quem responder à pergunta, sinta-se à vontade para expandir a teoria por trás do Log de transações.

A principal questão é - eu tenho o SQL Server 2008 e o banco de dados de 2 GB que preciso espelhar (possui um log de transações de 12 GB). Se eu não estivesse espelhando esse banco de dados, presumo que poderia alternar para o modo Simples ou truncar o log após o backup. Mas neste caso - o que devo fazer se quiser manter esse log de transações sob controle? Pelo que entendi - preciso manter todo esse log de transações se quiser espelhar facilmente o banco de dados (basta fazer o backup completo).

Existe alguma maneira de contornar isso? Idealmente, eu gostaria que fosse possível fazer backup que mantenha o MDF e o LDF em um arquivo todas as vezes e depois que o backup for concluído, o Log de Transações (LDF) no banco de dados é reduzido a 0. O problema nesse cenário são backups incrementais - se meu primeiro backup log truncado, presumo que o segundo backup precisaria fazer referência ao primeiro, se eu quiser fazer o espelhamento mais tarde (ou seja, eu ficaria preso em manter um monte de arquivos em vez de apenas um).

Então - alguém pode me esclarecer sobre esse assunto? Entendo que estou tentando preencher muitos buracos aqui e que minhas "soluções" propostas podem não ser as melhores, mas agradeceria sinceramente se alguém pudesse me levar na direção certa nos Logs de Transação, como eles afetam o espelhamento e melhor práticas com esses dois.

nikib3ro
fonte

Respostas:

5

O log de transações é um método importante para restaurar seu banco de dados em um horário específico. Se você tiver um banco de dados grande> 500 GB e precisar restaurá-lo a partir de um backup completo, isso custará muito tempo. Além disso, se você fizer backup completo do banco de dados toda vez, pense em quanto tempo esse backup pode demorar.

Um conceito muito fácil para o SQL Server pode ser: Definir o modelo de recuperação do banco de dados completo

Crie um plano de manutenção (1) no SQL Server:

  • Faça o FullBackup toda semana, talvez em D: \ yourbackup \ FullDBBackup.bak
  • Faça backup diferencial a cada dois dias em D: \ yourbackup \ DiffBackup.bak
  • Faça a cada 2 horas Faça backup do seu log de transações em D: \ Yourbackup \ Tranlogbackup.trn

Crie um plano de manutenção (2) no SQL Server:

  • Exclua todos os arquivos antigos em 8 dias de D: \ yourBackup * .bak
  • Exclua todos os arquivos antigos por três dias de D: \ yourBackup * .trn

Nesse caso, você poderá recuperar seu banco de dados em um horário específico, muito rápido, muito fácil. O SQL Server gerenciará automaticamente seus arquivos de "Backup", os arquivos mais antigos serão excluídos após um período específico.

Eu sugiro que você leia sobre o log de transações do SQL Server aqui:

http://www.sqlservercentral.com/articles/Design+and+Theory/63350/

Para usar os Planos de Manutenção no SQL Server, basta perguntar ao BING / google: D

você deve criar um pequeno teste de banco de dados e testá-lo antes de iniciar a produção

Shanky
fonte
Não tenho problemas com backups completos e tempo, pois posso parar o sistema inteiro até que eles terminem. Uma pergunta na sua resposta - eu truncar o log de transações neste cenário? Caso contrário, entendo que só preciso do último FullDBBackup.bak para recuperar o banco de dados? Não me importo com pontos específicos do tempo - tudo o que me interessa é a versão mais recente do banco de dados que recebo ao fazer backup. Significado - não preciso de logs de transações; Estou apenas mantendo-os apenas por causa do espelhamento. Existe uma maneira de contornar isso?
Nikib3ro
2
1. você não pode truncar seu log: D 2. Se você fizer um backup do seu log de tran, o SQL Server concederá esse espaço livre para reutilização em seu arquivo de log. apenas teste simples dbcc sqlperf ('logpsace') bore o backup e faça o mesmo após o backup. e, no final, você precisa de log de transações ... apenas testar o meu exemplo
Finalmente consegui implementar suas sugestões no ambiente de teste e até agora gosto do que estou vendo. Apenas avise-me se entendi direito - se agora precisar restaurar o banco de dados, primeiro usaria o backup COMPLETO que fiz e, em seguida, usando a combinação de backups diferenciais e logs de transações, seria possível restaurar o banco de dados para certo ponto do tempo? Estou certo? E também presumo que, para o espelhamento, eu precisaria parar o servidor e fazer backup completo? Ou precisarei de logs de transações para configurar o espelhamento? Obrigado novamente por toda a sua ajuda e respostas!
Nikib3ro #
3

Para tirar proveito do espelhamento, você precisa ter o banco de dados no modo de recuperação COMPLETO e precisará fazer backups de log de transações para impedir o crescimento do arquivo de log. Se você não precisar dos backups de log, limpe-os após x quantidade de horas com um plano de manutenção, mas eles precisam ser executados.

Para limpar o ambiente, remova o espelhamento, altere o modo de recuperação para simples, reduza o tamanho do arquivo de log pela maneira recomendada de Paul Randal , retorne ao modo de recuperação total, configure backups completos e de log e, em seguida, reinicialize seu espelho. Você pode tentar reduzir o tamanho do log enquanto o espelhamento estiver no lugar, mas será muito mais fácil removê-lo primeiro. 1 GB não deve ser um db ruim para reinicializar.

Jason Cumberland
fonte