воскресенье, 16 февраля 2014 г.

Включение SIMPLE модели восстановления и обрезания ldf файлов на всех базах сервера

Часто возникает ситуация, когда на диске заканчивается свободное место из-за разросшегося журнала транзакций. Особенно тяжело бывает на серверах для разработки и тестирования, где инфобазы создаются в больших количествах. Скрипт позволяет автоматически включить простую модель восстановления и обрезать ldf файлы для всех баз, зарегистрированных на MS SQL Server.
По умолчанию в SQL Server 2008 модель восстановления FULL. Из-за этого журнал транзакций разрастается до такой степени, что при входе в 1С может появляться ошибка о нехватке места. Особенно тяжело бывает на серверах для разработки и тестирования, где инфобазы создаются в больших количествах.
Разработчики постоянно создавали новые/перегружали старые базы из бэкапов, и место потихоньку съедалось. Заставить их контролировать модель восстановления и обрезать логи оказалось непосильной задачей. Проще написать скрипт, который раз в неделю для всех баз устанавливает простую модель восстановления и обрезает журнал транзакций. При работе скрипта учитывается, что часть баз может быть в оффлайне.
Можно оформить как job и запускать раз в неделю по расписанию.
Не рекомендуется к использованию на боевых серверах, если вы не понимаете разницы между моделями восстановления баз данных full и simple.
Источник: здесь


Файл .ldf стал слишком большим!

Для начало не много теории о том что такое лог транзакции в MS SQL сервере. Говоря простым языком лог транзакции необходим для отката Базы данных в предыдущее состояние — контекстное состояние. Как правило в журнале храниться порядковый номер, тип изменения, проделанные операции и т.д. В прицепе можно обойтись без лога транзакции, но увы тогда есть возможность потерять БД. В MS SQL 2000 шринк лога выполнялся как правило с помощью QueryAnalizer и вот этого скрипта:
BACKUP LOG  %База_данных% WITH TRUNCATE_ONLY
GO
use %База_данных%
GO
DBCC SHRINKFILE ('%_лог_База_данных%_log', TRUNCATEONLY)
Но это применимо только для базы данных с режимом восстановления simple — 2000 сервер создавал бд по умолчанию с этим параметром. Если ваша БД имеет модель восстановления FULL то тогда необходим воспользоваться скриптом:
USE %база_данных%
ALTER DATABASE %база_данных% SET RECOVERY SIMPLE
DBCC SHRINKFILE (%лог_база_данных%_LogD, 50);
ALTER DATABASE %база_данных% SET RECOVERY FULL
Параметр 50 означает что журнал будет урезан до 50 МБ. на этом шринк лога закончен. Собственно второй скрипт и подходит для 2008 SQL Server(2005, 2008, 2012).

Комментариев нет:

Отправить комментарий