Предыстория
На SQL сервере развернуто порядка 100 тестовых баз. Разворачивают в основном рабочие базы с режимом восстановления "Полный" и периодически забывая переводить в "Простую". В связи с чем на сервере стали занимать много мест журналы транзакций. Вначале шринк журнала проходил руками, но потом это надоело и я решил это немного автоматизировать. Написал скрипт, который, пробегаясь по всем базам, кроме системных, переводит каждую в "Простой" режим восстановления и делает шринк журнала. Скрипт повесил на задание, для автоматического выполнения по расписанию.
----------------------------------------------------------
-- СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ
declare @db_name nvarchar(100) --имя базы данных
declare cursor_size_srv cursor for
--выбираем все базы кроме системных
SELECT name AS DBName
FROM sys.databases
where name not in ('master','msdb','model','tempdb')
ORDER BY Name;
-- Цикл по всем базам, попавшим в выборку
OPEN cursor_size_srv
FETCH NEXT FROM cursor_size_srv INTO @db_name
WHILE (@@FETCH_STATUS=0)
BEGIN
-- База данных из цикла
exec ('declare @logname nvarchar(100)
USE [' + @db_name + ']
SELECT @logname = name FROM sys.database_files where type = 1
ALTER DATABASE ' + @db_name + ' SET RECOVERY SIMPLE
DBCC SHRINKFILE (@logname , 10, TRUNCATEONLY)')
-- Следующая база данных
FETCH NEXT FROM cursor_size_srv INTO @db_name
END
CLOSE cursor_size_srv
DEALLOCATE cursor_size_srv
----------------------------------------------------------