none
Reduzir tamanho do Log qdo não se faz backup log RRS feed

  • Pergunta

  • O tamanho do meu arquivo de log está enorme, bem maior que o arquivo de dados. Acredito que seja porque não faço backup de logs, só faço backup full e diferencial várias vezes ao dia.

    Como faço pra reduzir e existe uma maneira de evitar que o arquivo de log cresça sem ter que fazer backup de log ?

    vlw

    • Movido Gustavo Maia Aguiar terça-feira, 10 de abril de 2012 19:36 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 10 de abril de 2012 19:04

Respostas

Todas as Respostas

  • Edurocha,

    Nessa sua situação, basta setar o recovery model da base para simple, tenho um artigo em meu blog, creio que va te ajudar:

    http://fabrizziocaputo.wordpress.com/2011/07/14/sql-server-basico-1-recovery-models/


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    terça-feira, 10 de abril de 2012 19:06
    Moderador
  • Obrigado Fabrizzio,

    Li seu artigo e agora entendi as diferentes opções do recovey model.

    - Eu posso fazer essa alteração com usuários logados no meio do expediente ?

    - Com esta alteração para simple, não terei problemas com meus backups diferencias certo ?

    vlw

    terça-feira, 10 de abril de 2012 19:13
  • Edurocha,

    Sim, tal alteração pode ser feita em produção e não causara impacto.

    Não, o backup de log le diretamente o arquivo de log, ja os backups diferenciais le as paginas, que possuem um bit de "alterada ou não", se este bit for sim, a pagina sera backupeada nos backups diferenciais, ou seja, não ha leitura do arquivo de log.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta edurocha quarta-feira, 11 de abril de 2012 13:41
    terça-feira, 10 de abril de 2012 19:15
    Moderador
  • Edurocha,

    Se você quiser pode também fazer o encolhimento do log de todos os seus bancos de dados:

    Use TempDB
    If Object_Id('TEMPDB..#RelacaoBancos') IS NOT NULL
     Begin
      Truncate Table #RelacaoBancos
     End
     Else
     Begin
      Create Table #RelacaoBancos
      (Codigo TinyInt Identity(1,1),
       DatabaseName Varchar(100),
       Space_DataFile Int,
       Space_LogFile Int)
     End
     
    DECLARE @DatabaseName varchar(250), @cmd varchar(1000), @Indice Int
     
    DECLARE cur_SpaceUsed CURSOR FOR
     
    SELECT name FROM MASTER..SYSDATABASES
    WHERE  name NOT IN ('master', 'msdb', 'model', 'tempdb')
    and    status <> 66048
    Order By Name
     
    OPEN cur_SpaceUsed
    FETCH NEXT FROM cur_SpaceUsed
    INTO @DatabaseName
     
    WHILE @@FETCH_STATUS = 0
    BEGIN
       SELECT @cmd =  'SET NOCOUNT ON' + char(10) +
              'USE ' + @DatabaseName + '' + char(10) + 
              '
               DECLARE  @SizeDataFile Int, 
                                @SizeLogFile Int
               
               
               Set @SizeDataFile=(Select Sum(((size*8)/1024)) from SysFiles Where GroupId >= 1)
               Set @SizeLogFile=(Select Sum(((size*8)/1024)) from SysFiles Where GroupID = 0)        
             
               Insert Into TempDB..#RelacaoBancos(DatabaseName, Space_DataFile, Space_LogFile) 
                                  Values('+'''['+@DatabaseName+']'''+','+'@SizeDataFile'+','+'@SizeLogFile'+')'
     Exec(@cmd)
     
     FETCH NEXT FROM cur_SpaceUsed
     INTO @DatabaseName
    END
     
    CLOSE cur_SpaceUsed
    DEALLOCATE cur_SpaceUsed
    Select Upper(DatabaseName) 'Database',
           Space_DataFile As 'Size Data File in MBs',
           Space_LogFile As 'Size Log File in MBs'
    from #RelacaoBancos
    Where DatabaseName Not In ('Master', 'Model', 'MSDB', 'TempDB')
    --Encolhendo os Arquivos de Log--
    Declare @Comando VarChar(1000),
            @NomeBancodeDados VarChar(250),
            @Contador TinyInt
    Set @Contador=1
    While @Contador <= (Select Count(*) from #RelacaoBancos)
     Begin
      Select @NomeBancodeDados=DatabaseName from #RelacaoBancos
      Where DatabaseName Not In ('Master', 'Model', 'MSDB', 'TempDB')
      And Codigo = @Contador
      Set @Comando='USE '+@NomeBancodeDados+'
       
      Declare @VersaoServidor VarChar(2) 
      Set @VersaoServidor= (Select Convert(VarChar(2),ServerProperty(''ProductVersion'')))
      If (@VersaoServidor)= ''10''
       Begin 
        Exec(''BACKUP LOG '+@NomeBancodedados+' WITH TRUNCATE_ONLY'''+')  
            
        ALTER DATABASE '+@NomeBancodeDados+'  
        SET RECOVERY SIMPLE;
        DBCC ShrinkFile(2,TruncateOnly);
        DBCC ShrinkFile(2,10);
        ALTER DATABASE '+@NomeBancodeDados+' 
        SET RECOVERY FULL;   
        End
        Else
         Begin
          ALTER DATABASE '+@NomeBancodeDados+'  
          SET RECOVERY SIMPLE;
          DBCC ShrinkFile(2,TruncateOnly);
          DBCC ShrinkFile(2,10);
          ALTER DATABASE '+@NomeBancodeDados+' 
          SET RECOVERY FULL;   
        End'+ Char(13)
       
      Exec(@Comando)
        
      Set @Contador=@Contador+1
     End


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    terça-feira, 10 de abril de 2012 19:20
    Moderador