none
Diminuir arquivo de log RRS feed

  • Pergunta

  • Bom dia Pessoal.

    Estou com uma dúvida, verifiquei que o arquivo de log(transaction log) esta crescendo bastante, verifiquei também que ele está configurado para modo Recovery Simple, tentei realizar o comando dbcc shrinkfile (nome do Log, 1), mas sem sucesso ele continuava com o mesmo tamanho, sendo assim iniciei pesquisa e descobri que existem transações ativas e ele esta configurado para replicação em algum objeto do banco, fiz isso através dos comandos: dbcc opentran(bancoDados) e o select log_reuse_wait_desc, name from sys.databases. Feito isso removi a replicação com: sp_removedbreplication 'BancoDados', então apliquei o ShirinFile, e dessa vez funcionou perfeitamente reduzindo o tamanho do log(no servidor de testes).

    Bom toda essa descrição para perguntar qual a melhor estrategia para fazer isso em Produção, pois tenho receio de perder dados, então não sei se faço isso direto no arquivo de log, se faço antes um Chekpoint para o trabalho do dia ficar realmente gravado no arquivo de dados e depois fazer um ShirinkFile.

    Minha estrategia será deixar o pessoal trabalhar até o fim do espediente, parar o sistema, fazer um backup do Banco(por segurança), realizar os comandos de parar transações e replicação, realizar um chekpoint para o trabalho do dia ficar gravado no banco de dados fisicamente e proceder com o ShirinkFile para reduzir o log.

    Será que estou certo ou teria problemas com essa logica?

    Segue meu script:

    -- Verificar se existem transaes abertas no Banco

    dbcc opentran(Banco)

    -- Verificar se existe objetos conf. para replicao no Banco

                      

    select log_reuse_wait_desc,name from sys.databases

    -- Remove os objetos de replicao de um banco de dados, sem alterar os dados no banco de dados de distribuio (distributor)

    sp_removedbreplication 'Banco'

    use

    Patrimonio2004

    Go                    

                      

    CHECKPOINT

    GO

    -- Reduzir tamanho do log do banco

    DBCC SHRINKFILE (Banco_Log, 1)


    GO


     

    -

    -- em memria para o arquivo de dados.
    -- O comando checkpoint faz um commit das transaes que estao
    terça-feira, 27 de maio de 2014 15:46

Respostas

  • Olá Almeida,

    Seu procedimento esta correto, fazendo um checkpoint antes de fazer o purge no log é o ideal sim, é um procedimento simples que não afeta diretamente a integridade do banco de Dados.

    Faço o purge no DB da seguinte maneira:

    --Verificando o Tamanho do Transaction log
    DBCC SQLPERF ( LOGSPACE ) 
    
    use SEUDB
    go
    
    -- Forçando um Checkpoint
    CHECKPOINT
    
    -- Limpando o Transaction log através do Backup Log
    BACKUP LOG SEUDB WITH TRUNCATE_ONLY
    
    -- Diminuir o arquivo físico para 1mb
    DBCC SHRINKFILE (File_log, 1)

    Abraços.

    • Sugerido como Resposta Wender DBA quarta-feira, 28 de maio de 2014 14:00
    • Marcado como Resposta Durval RamosModerator terça-feira, 14 de outubro de 2014 11:19
    terça-feira, 27 de maio de 2014 17:39