locked
Diminuir o tamanho de logs RRS feed

  • Pergunta

  • Pessoal eu descobri meu arquivo de logs está em 25GB, como deve proceder para diminuir esse arquivo, estou precisando fazer backup das bases para transferir de servidor e com esse tamanho todo de log não tenho espaço no novo servidor.

     

    Obrigado

    sexta-feira, 18 de agosto de 2006 11:39

Todas as Respostas

  • Bom dia,


    Você não precisa transferir nada...É só você fazer um truncate e o shrink..

    Segue script:

    para fazer um truncate..

    backup log banco with truncate_only

    aí depois você faz um shrinkdatabase para diminuir..

    dbcc shrinkdatabase (banco,0,truncateonly).

    Com certeza vai diminuir os logs..

    Qlq coisa retorne...

     

     

    sexta-feira, 18 de agosto de 2006 12:30
  • Obrigado Rita deu certo, duas duvidas:

    1- Este processo pode gerar algum problema no meu SQL?

    2- Como devo proceder para que isso não volte a acontecer, tipo limitar tamanhho maximo de log?

     

    Obrigado

    sexta-feira, 18 de agosto de 2006 14:06
  • o log serve para fazer restore em ponto de falha, entao o ideal e fazer o backup regular do log para arquivo e nao somente truncar, exemplo

     

    backup log nome_banco to disk='caminh\arquivo' --

    se vc. nao quer ter a opcao de restore em ponto de falha pode deixar o recovery model do seu banco como simple, o log sera descartado automaticamente.

     

    Abs;

    sexta-feira, 18 de agosto de 2006 14:19
  • Diego,

    O Marcelo explicou tudo..

    Com certeza seria ideal fazer o backup de log.......OU você pode mudar o banco como SIMPLE...assim o log não crescerá...

    Qlq coisa retorne..

    Abços

     

    sexta-feira, 18 de agosto de 2006 16:07
  • Mas vamos supor assim o que sempre acontece aqui temos a base original e a base de teste frenquentemente fazemos um backup da base original e restauramanos na base de teste para testar funcionalidades do sistema, sem o arquivo de log isso será possivél?

     

    sexta-feira, 18 de agosto de 2006 18:09
  • sem problemas e perfeitamente possivel.

     

    Abs;

    sexta-feira, 18 de agosto de 2006 18:14
  • Diego,

    Sim é possível sim...

    Deixe explicar para que serve um arquivo de log:

    O SQL Server registra toda transação em um log de transações para manter a

    consistência do banco de dados e auxiliar na recuperação. O log é uma área de

    armazenamento que controla automaticamente todas as alterações feitas em um

    banco de dados. O SQL Server grava as modificações no log em disco

    conforme são executadas, antes que sejam gravadas no banco de dados.

    Bom, o que você pode fazer colocar a base como modo SIMPLE...assim o log será descartado e ele não vai crescer...

    Espero que você tenha entendido...........

    Abços

     

    sexta-feira, 18 de agosto de 2006 18:17
  • Olá Slackdi  da uma olhada em meu site

     

    (Reduzindo o arquivo de Log no SQL Server )
    http://www.msit.com.br/publicacaoDetalhes.aspx?id=41

    segunda-feira, 21 de agosto de 2006 13:32
  • Pessoal obrigado pela explicações. Entendi perfeitamente.

     

     

    segunda-feira, 21 de agosto de 2006 23:53
  • qualquer duvida no procedimento passado retorne

     

    abs

     

    terça-feira, 22 de agosto de 2006 13:26
  • Pessoal,

    Em alguns momentos não consegui diminuir o log com esses comandos. Então achei, não me lembro mais aonde, um script que diminui o log na marra. Esse funcionou. Segue o script abaixo.

        DECLARE @LogicalFileName sysname,
                @MaxTime         tinyint,
                @MaxMinutes      tinyint,
                @NewSize         int,
                -- Setup / initialize
                @OriginalSize    int,
                -- Wrap log and truncate it.
                @Counter         int,
                @StartTime       DateTime,
                @StartMin        DateTime,
                @TruncLog        nvarchar(255),
                @DB              sysname,
                @StmtSQL         nvarchar(300)

        SET NOCOUNT ON

        -- Limit on time allowed to wrap log. in MB
        SET @MaxTime    = 10
        SET @MaxMinutes = 1
        SET @NewSize    = 2                   
        SET @StartTime  = GETDATE()
        SET @DB         = db_name()
        SET @TruncLog   = N'BACKUP LOG ' + @DB + ' WITH TRUNCATE_ONLY'

        -- Use sp_helpfile to identify the logical file name that you want to shrink.
        SELECT @LogicalFileName = RTrim(name),
               @OriginalSize    = size
        FROM sysfiles
        WHERE GROUPID = 0
       
        SET @StmtSQL = N'SELECT ''Original Size of LOG is ' +
                        CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
                        CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'' AS ' + @DB

        Exec sp_ExecuteSQL @StmtSQL

        WHILE (@OriginalSize*8/1024) > @NewSize
        AND   @MaxTime > DATEDIFF(mi, @StartTime, GETDATE())
        BEGIN
             CREATE TABLE DummyTrans( DummyColumn char (8000) not null )
       
             SET @StartMin = GETDATE()

             DBCC SHRINKFILE (@LogicalFileName, @NewSize)

             Exec sp_ExecuteSQL @TruncLog

             -- Wrap the log if necessary.
             WHILE @MaxMinutes > DATEDIFF(mi, @StartMin, GETDATE()) -- time has not expired
             AND   @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)  -- the log has not shrunk   
             AND  (@OriginalSize * 8 /1024) > @NewSize  -- The value passed in for new size is smaller than the current size.
             BEGIN -- Outer loop.
                  SET @Counter = 0

                  WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
                  BEGIN -- update
                       INSERT DummyTrans VALUES ('Fill Log')  -- Because it is a char field it inserts 8000 bytes.
                       DELETE DummyTrans

                       SET @Counter = @Counter + 1
                  END   -- update

                  PRINT 'FIM 3º LOOP'

                  Exec sp_ExecuteSQL @TruncLog  -- See if a trunc of the log shrinks it.
             END   -- outer loop

             PRINT 'FIM 2º LOOP'

             DROP TABLE DummyTrans

             SELECT @OriginalSize = size FROM sysfiles WHERE name = @LogicalFileName
        END

        PRINT 'FIM 1º LOOP'

        SET @StmtSQL = N'SELECT ''Final Size of LOG is ' +
                        CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
                        CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'' AS ' + @DB

        Exec sp_ExecuteSQL @StmtSQL

        PRINT '*** Perform a full database backup ***'
        SET NOCOUNT OFF


     

    quarta-feira, 23 de agosto de 2006 20:04