Перейти к содержимому

Сжать лог у всех баз на сервере

--select * from [master].[sys].[databases]

--where not name in ('master','tempdb','model','msdb')

 

declare @name nvarchar(512)

declare @cmd nvarchar(512)

DECLARE @Cursor CURSOR

SET @Cursor = CURSOR FOR

select   name from [master].[sys].[databases]

where not name in ('master','tempdb','model','msdb')

 

 

 

OPEN @Cursor

FETCH NEXT FROM @Cursor INTO @name

 

WHILE (@@FETCH_STATUS = 0)

BEGIN

--print @name

 

set @cmd = 

'USE ['+@name+']

GO

DBCC SHRINKFILE (N'''+@name+ '_log'', 0, TRUNCATEONLY)

GO'

 

print @cmd

--exec (@cmd)

 

FETCH NEXT FROM @Cursor INTO @name

end

 

Similar Posts:

Метки:

3 комментария для “Сжать лог у всех баз на сервере”

  1. Автор, ваш скрипт берёт имя ФАЙЛА и прицепляет к нему _log, а shrinkfile работает с логическими именами, которые действительно иногда не совпадают с физическими именами файлов баз данных. Особенно актуально для тестовых и отладочных баз. Если есть workbase.mdf + workbase_log.ldf, то логическое имя этой базы будет workbase, если я сделаю копию базы workbase к примеру в test1.mdf + test1_log.ldf, то логическое имя внутри сохранится как workbase и конструкция use test1, dbcc shrinkfile (test1_log) выдаст ошибку – не существует test1_log.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *