Pergunta

Estou tentando encolher meu arquivo de log do banco de dados. Eu tentei correr:

USE databasename 
BACKUP log databasename
WITH truncate_only 
DBCC shrinkfile (databasename_log, 1)

Eu recebo a mensagem de erro:

Msg 155, Nível 15, Estado 1, Linha 3 'truncate_only' não é uma opção de backup reconhecida.

Estou esquecendo de algo?

Foi útil?

Solução

SQL Server 2008 não permite mais o NO_LOG / TRUNCATE_ONLY opções.

Para truncar seu log de transações, você precisa fazer backup (para real) ou alternar o modelo de recuperação do banco de dados para simples. Este último é provavelmente o que você realmente quer aqui. Você não precisa de recuperação completa, a menos que esteja fazendo backups regulares de log de transações para poder restaurar até algum ponto no meio do dia.

Outras dicas

Eu acho que a melhor maneira é usar um script como este:

USE AdventureWorks
GO

-- Use some dynamic SQL just only not to re-write several times the name 
-- of your db, or to insert this snippet into a loop for all your databases...
DECLARE @dbname varchar(50) = 'AdventureWorks';
DECLARE @logFileName varchar(50) = @dbname  + '_log';
DECLARE @SQL nvarchar(max);
SET @SQL = REPLACE('ALTER DATABASE {dbname} SET RECOVERY FULL;', '{dbname}', @dbname);
EXECUTE(@SQL);

DECLARE @path nvarchar(255) = N'F:\BCK_DB\logBCK' + CONVERT(CHAR(8), GETDATE(), 112) + '_'
  + REPLACE(CONVERT(CHAR(8), GETDATE(), 108),':','') + '.trn';

BACKUP LOG @dbname TO DISK = @path WITH INIT, COMPRESSION;

DBCC SHRINKFILE(@logFileName);

-- determine here the new file size and growth rate:
SET @SQL = REPLACE('ALTER DATABASE {dbname} MODIFY FILE (NAME = ' + @logFileName + ', SIZE = 32000MB, FILEGROWTH = 10%);', 
    '{dbname}', @dbname);
EXECUTE(@SQL);
GO

http://www.snip2code.com/snippet/12913/how-to-correctly-hrink-log-file-for-sql

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top