Como truncar o log de transações em um banco de dados do SQL Server 2008?

9

Como truncar o log de transações em um banco de dados do SQL Server 2008?

Quais são as melhores maneiras possíveis?

Eu tentei isso em um blog da seguinte maneira:

1) Do banco de dados de configurações à recuperação simples, diminuindo o arquivo e definindo novamente a recuperação total, você está perdendo seus valiosos dados de log e não poderá restaurar o ponto no tempo. Além disso, você também não poderá usar os arquivos de log subsequentes.

2) A redução do arquivo ou banco de dados adiciona fragmentação.

Há muitas coisas que você pode fazer. Primeiro, comece a fazer backup de log adequado usando o comando a seguir, em vez de truncá-los e perdê-los com freqüência.

BACKUP LOG [TestDb] TO  DISK = N'C:\Backup\TestDb.bak'
GO

Remova o código de SHRINKING o arquivo. Se você estiver executando backups de log adequados, seu arquivo de log normalmente (novamente, geralmente, casos especiais são excluídos) não aumenta muito.

Neo
fonte
2
OK, e o que aconteceu quando você tentou isso?

Respostas:

4

A maneira mais segura e correta de truncar um arquivo de log, se o banco de dados estiver no Modo de recuperação total, é fazer um backup do log de transações (sem TRUNCATE_ONLY. Isso ficará obsoleto em versões futuras e não é aconselhável).

Parece que você deseja reduzir o arquivo de log posteriormente; nesse caso, você executaria um DBCC SHRINKFILE(yourTLogName)comando. Há um segundo parâmetro opcional para o tamanho solicitado reduzi-lo.

Thomas Stringer
fonte
8

Você pode fazer backup do log no dispositivo nulo:

backup log [databasename] to disk = 'nul';

Ou você pode mudar o modelo de recuperação para simples e depois voltar para cheio / em massa novamente.

Max Vernon
fonte
Eu fiz + um sobre isso, porque esta é uma ferramenta na caixa de ferramentas dbas e sua resposta não merece votos negativos, eu acho. Eu concordo com o sentimento de que a melhor maneira é fazer backups de logs de transações, mas ei, todas as boas ferramentas podem ser usadas de maneira correta ou ruim.
Martin Sjöberg
6

Se você não se importa com seus dados de log e apenas deseja se livrar deles:

Altere o modelo de recuperação de completo para simples e, em seguida, de volta para completo. Reduza o arquivo usando DBCC SHRINKFILE com o argumento TRUNCATEONLY

O comando a seguir alterará o modelo de recuperação de completo para simples

ALTER DATABASE <databse_name> SET RECOVERY SIMPLE

O comando a seguir alterará o modelo de recuperação para completo

ALTER DATABASE <databse_name> SET RECOVERY FULL

Para encontrar o nome do arquivo de log, você pode usar a seguinte consulta

SELECT name 
FROM sys.master_files
WHERE database_id = DB_ID('<databse_name>')

Encolher o arquivo

DBCC SHRINKFILE (N'<logical_file_name_of_the_log>' , 0, TRUNCATEONLY)

Consulte Qual é o comando para truncar um arquivo de log do SQL Server? para mais informações sobre isso

Alex
fonte