Сжатие логов журнала транзакции MS SQL

Администрирование - Системное

24
Автоматический шринк журнала транзакций и перевод базы в простой режим восстановления.

Предыстория

На 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
----------------------------------------------------------

 

24

См. также

Комментарии
Избранное Подписка Сортировка: Древо
2. pbazeliuk 1478 16.04.18 11:48 Сейчас в теме
Будет забавно, когда потеряете часть данных, а ваша модель восстановления не позволит восстановить их.
4. bashinsky 116 16.04.18 15:50 Сейчас в теме
(2)Журнал режется на тестовых базах, а там не так страшно потерять данные
3. sssss_aaaaa_2011 16.04.18 12:24 Сейчас в теме
Ну и куда же без курсора и выполнения каждой команды сразу после её генерации... Сгенерировать 1(один) скрипт и его исполнить намного сложнее...
5. bashinsky 116 16.04.18 15:54 Сейчас в теме
(3)Согласен, можно сгенерировать один скрипт и разом его выполнить
8. Tavalik 1547 19.04.18 13:56 Сейчас в теме
Автор, конечно, молодец, что выложил свой скрипт.
Но позволю себе также показать и свои скрипты на эту тему:
(с фильтром по имени базы и отправкой электронного сообщения)
https://infostart.ru/public/807843/
9. bashinsky 116 19.04.18 14:20 Сейчас в теме
(8)Ну вот, оказывается был готовый вариант. Появился бы он раньше...
А вашу статью про индексы я уже применил к своим базам
10. goodron 06.05.18 12:23 Сейчас в теме
"Разворачивают в основном рабочие базы с режимом восстановления Полный и периодически забывая переводить в Простую" - ну глупость же, расплата за нее - падение производительности рабочей базы в самый неподходящий момент (по закону бутерброда). Если не знаете "зачем нужен бэкап журнала?" и/или не делаете бэкап журнала, то не включайте "режим восстановления"=Полный, оно вам что мертвому массаж, вам нужен "режим восстановления"=простой.
11. bashinsky 116 06.05.18 15:46 Сейчас в теме
(10) у нас тестовые базы работают на отдельном сервере и на производительность рабочей базы ни как не влияют
Оставьте свое сообщение