Я думаю, что лучший способ использовать скрипт так:
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-Shrink-Log-File-for-SQL
Почему? Как правило, сокращение ваших файлов является ** плохой идеей. – RBarryYoung
Извините, но я очень к этому не знаком. Почему это плохая идея? – user258133
Это плохая практика, потому что это в первую очередь отрицает назначение журнала транзакций. Именно поэтому SQL Server 2008 удалил эту возможность. Как я уже говорил, если вы не хотите, чтобы журнал транзакций увеличивался, если у вас нет RPO, используйте модель простого восстановления. В противном случае вам нужен журнал транзакций, чтобы иметь возможность успешно восстанавливать последние транзакции из последней резервной копии базы данных. – Aaronaught