none
Recovery model de Full para Simple RRS feed

  • Pergunta

  • Olâ amigos.

    Ainda tenho uma grande dúvida ainda sobre o recovery model do SQL Server e gostaria que me ajudassem a tira-la.

    Vamos supor que eu tenha uma banco de dados que está configurado com o recovery model Full e o backup não é realizado faz um bom tempo. Essa base está grande e o log imenso.
    Ai vejo que não será necessario usar o recovery model como full, por que minha necessidade de voltar o banco a partir de um determinado instante não é necessaria.
    Altero a configuracao do meu banco de dados para Simple.

    Minha dúvida: Após eu alterar meu banco de dados para Simple, eu tenho que efetuar alguma tarefa administrativa (por exemplo shrink) para que o log de transação volte para um estado normal? Ou o próprio SQL Server cuidará de reduzi-lo no próximo checkpoint?

    Um grande abraço

    Clayton Santos
    • Movido Gustavo Maia Aguiar quinta-feira, 21 de janeiro de 2010 11:25 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 19 de janeiro de 2010 23:03

Respostas

  • Clayton,

    O recovery model Full é indicado para bancos que sofrem bastante alteração durante o dia, alterações estas que você não pode ou não deseja perder. A maior parte dos bancos corporativos está nesta situação. Para não ter que efetuar salvas Full diversas vezes, você efetua por exemplo uma salva Full durante a noite, e depois salvas de log de hora em hora por exemplo. Se você trabalhar dessa forma, o teu arquivo ldf nunca vai atingir o tamanho que atingiu, pois ele vai sendo limpo automaticamente. Então para o recovery model Full, trabalhe sempre com salvas Full e também de Log.

    O recovery model Simple é indicado por exemplo para bancos muito pequenos em que não vale a pena ficar administrando salvas de log. Pode ser melhor fazer uma salva Full de hora em hora, desde que eu aceite perder as alterações efetuadas depois da última salva Full.
    Ou para bancos Read-only, onde o banco não sofre modificações, ou sofre poucas alterações que eu possa recuperar facilmente. O teu arquivo ldf também nunca vai permanecer enorme como no teu caso. Mesmo que ele cresça um pouco, isso será automaticamente limpo durante as próximas salvas Full.
    No recovery model simple você não trabalha com salvas de log. O banco nem aceita essa possibilidade. Ao escolher este model, você assume que você não quer guardar logs.

    No teu caso, ao definir que o banco era Full, você disse para ele que iria trabalhar com salvas de log. E porisso, ele ficou incrementando o teu arquivo ldf. Ao passar o banco para Simple, o sql não vai limpar isso. Você terá que limpá-lo através do truncate log, ou graficamente pelo Management Studio através do Shrink. A partir daí, o teu arquivo ldf ficará sempre pequeno, desde que o recovery model permaneça como Simple.

    Eu uso muito o recovery model Simple para bancos de testes. Eu restoro o banco original com outro nome (por exemplo Teste), mudo o recovery model de Full para Simple, e executo um shrink no banco. O arquivo ldf imediatamente costuma ir para 1.024 mb. Depois disso, o sql toma conta do processo.

    Eduardo
    • Marcado como Resposta Clayton Santos sexta-feira, 22 de janeiro de 2010 01:45
    quinta-feira, 21 de janeiro de 2010 13:34

Todas as Respostas

  • Clayton,

    Quando alteramos o recovery model de full para Simple estamos dizendo para o SQL Server que todo o log de transações deverá ser descartado, somente a mudança do recovery model não vai refletir no tamanho do arquivo.

    Somente a alteração do recovery model não vai alterar o tamanho do arquivo de log!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 20 de janeiro de 2010 00:08
    Moderador
  • Ola Galvao.

    Entendi. Entao o meu log de transacao continuaria imenso, independente da alteracao do recovery model ser alterado para simple? Vamos supor, ele tinha 40 GB de log quando estava em recovery model = Full e após eu alterar o recovery model para Simple ele continuará com os 40 GB, mesmo depois que o SQL Server dê um checkpoint?

    Abraço

    Clayton Santos
    quarta-feira, 20 de janeiro de 2010 00:41
  • Clayton,

    O Checkpoint não irá alterar o tamalho do log, na verdade trata-se de um procedimento responsável em confirmar os comandos que estão armazenados em seu cache, ou fator importante o checkpoint é responsável em armazenar informações nas páginas de dados de cada banco.

    Acabo de realizar um pequeno teste aqui, em um banco de dados com o transact log de 300 MB e recovery model Full, alterei para recovery model simple o tamanho do arquivo de log não mudou em nada, mas a partir deste momento o SQL Server entende que não será mais necessário utilizar o log muito menos armazenar dados neste arquivo.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 20 de janeiro de 2010 00:52
    Moderador
  • Ola Clayton,

    Será necessário o Shrink para reduzir o tamanho do arquivo.

    Entenda que o recovery model simple não significa que seu arquivo de LOG vai ter um tamanho definido automaticamente pelo SQL. Lembre-se, que até por questões de performance, o arquivo de log deve ter um tamanho suficiente para suportar as suas transações sem que seja necessário ficar aumentando a todo instante (auto growth).

    O tamanho ideal? Depende do tamanho das suas transações. Nesse modelo proposto, salvo em casos muito especificos ou "aberrações" não costuma ser muito grande.

    Abraço,

    Josias S. Campos
    quarta-feira, 20 de janeiro de 2010 00:55
  • Josias,

    Completando a sua resposta.

    Normalmente o Recovery Model Full é mais utilizado, pois consiste em possibilitar ao SQL Server trabalhar de forma completa com seus recursos de contigência e recuperação de dados.

    O Modelo Simples, consiste em uma forma básica para se trabalhar em um banco de dados, sem se preocupar com possíveis falhas e de que forma poderíamos recuperar os dados perdidos, descartando por completa qualquer tipo de histórico de dados.

    Por padrão todo e qualquer banco de dados no SQL Server sempre terá no mínimo dois arquivos sendo um de dados(.mdf) e outro de log(.ldf) independente do recovery model utilizar, ambos terão um tamanho inicial e uma taxa de crescimento.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 20 de janeiro de 2010 01:06
    Moderador
  • Galvao.

    Na verdade estou comentando isso por que li em um outro tópico um artigo que o Gustavo Maia comentou sobre nao utilizar o Truncate Log. Por que, vi aqui muitas vezes em alguns topicos que os usuarios faziam isso. O recovery model estava como full e utilizavam o comando truncate log para poder reduzir o log de transacao.

    A meu entender, penso que para evitar utilizar esse tipo de comando teria que alterar para simple o banco e depois aguardar o checkpoint para que o SQL Server possa limpar as transacoes antigas. Não é isso a ideia de utilizar o recovery model como simple?

    OBS: Desculpa ser insistente, mas a ideia é ficar claro para que mais tarde nao possa cometer um erro assim em algum cliente.

    Abraço

    Clayton Santos

    quarta-feira, 20 de janeiro de 2010 01:10
  • Clayton,

    Sem problemas, entendi perfeitamente.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 20 de janeiro de 2010 12:34
    Moderador
  • Voce sabe se tem algum artigo que possa me indicar que me esclareça sobre as mudanças e os comportamentos do recovery model do banco Galvao?

    Abraço

    Clayton Santos

    quinta-feira, 21 de janeiro de 2010 01:22
  • Clayton,

    O recovery model Full é indicado para bancos que sofrem bastante alteração durante o dia, alterações estas que você não pode ou não deseja perder. A maior parte dos bancos corporativos está nesta situação. Para não ter que efetuar salvas Full diversas vezes, você efetua por exemplo uma salva Full durante a noite, e depois salvas de log de hora em hora por exemplo. Se você trabalhar dessa forma, o teu arquivo ldf nunca vai atingir o tamanho que atingiu, pois ele vai sendo limpo automaticamente. Então para o recovery model Full, trabalhe sempre com salvas Full e também de Log.

    O recovery model Simple é indicado por exemplo para bancos muito pequenos em que não vale a pena ficar administrando salvas de log. Pode ser melhor fazer uma salva Full de hora em hora, desde que eu aceite perder as alterações efetuadas depois da última salva Full.
    Ou para bancos Read-only, onde o banco não sofre modificações, ou sofre poucas alterações que eu possa recuperar facilmente. O teu arquivo ldf também nunca vai permanecer enorme como no teu caso. Mesmo que ele cresça um pouco, isso será automaticamente limpo durante as próximas salvas Full.
    No recovery model simple você não trabalha com salvas de log. O banco nem aceita essa possibilidade. Ao escolher este model, você assume que você não quer guardar logs.

    No teu caso, ao definir que o banco era Full, você disse para ele que iria trabalhar com salvas de log. E porisso, ele ficou incrementando o teu arquivo ldf. Ao passar o banco para Simple, o sql não vai limpar isso. Você terá que limpá-lo através do truncate log, ou graficamente pelo Management Studio através do Shrink. A partir daí, o teu arquivo ldf ficará sempre pequeno, desde que o recovery model permaneça como Simple.

    Eu uso muito o recovery model Simple para bancos de testes. Eu restoro o banco original com outro nome (por exemplo Teste), mudo o recovery model de Full para Simple, e executo um shrink no banco. O arquivo ldf imediatamente costuma ir para 1.024 mb. Depois disso, o sql toma conta do processo.

    Eduardo
    • Marcado como Resposta Clayton Santos sexta-feira, 22 de janeiro de 2010 01:45
    quinta-feira, 21 de janeiro de 2010 13:34
  • Clayton,

    Com certeza o Books On-Line poderá te ajudar a esclarecer diversas dúvidas, normalmente a primeira fonte de informação que eu consulto é o Books On-Line.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 21 de janeiro de 2010 16:45
    Moderador
  • Ola Eduardo.

    Obrigado pela ajuda! Era realmente o que eu precisava saber. Tenho alguns bancos no cliente que vou sugerir passar de full para simple, pois nao eles nao utilizam salvar log durante o dia e sim fazer um backup full ao termino do dia. O log está imenso e nao tem necessidade para o mesmo esta assim. Minha pergunta era exatamente essa, se eu alterasse de full para simple teria que fazer algo a mais, ou seja, se o SQL Server iria entender que eu nao quero mais as instrucoes do log antiga e descartaria automaticamente. E pelo que me informou ele nao irá fazer isso, terei que rodar o shrink no banco.

    Obrigado

    Abraço

    Clayton Santos
    sexta-feira, 22 de janeiro de 2010 01:49
  • Obrigado Galvão.

    Eu até procurei no book on-line sobre, mas essa minha pergunta expecifica eu não havia encontrado.
    O Eduardo me esclareceu.

    Agradeco muito pela sua ajuda!!!

    Abraço

    Clayton Santos
    sexta-feira, 22 de janeiro de 2010 01:50