Inquiridor
Diminuir o tamanho de logs

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=41segunda-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 ' + @DBExec 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 = 0WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log') -- Because it is a char field it inserts 8000 bytes.
DELETE DummyTransSET @Counter = @Counter + 1
END -- updatePRINT 'FIM 3º LOOP'
Exec sp_ExecuteSQL @TruncLog -- See if a trunc of the log shrinks it.
END -- outer loopPRINT 'FIM 2º LOOP'
DROP TABLE DummyTrans
SELECT @OriginalSize = size FROM sysfiles WHERE name = @LogicalFileName
ENDPRINT '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 ' + @DBExec sp_ExecuteSQL @StmtSQL
PRINT '*** Perform a full database backup ***'
SET NOCOUNT OFF
quarta-feira, 23 de agosto de 2006 20:04