info@it-region63.ru +79170118905

Как уменьшить размер лога транзакций (.ldf) в MS SQL 2008/20012

MS SQL как любая порядочная СУБД промышленного назначения вместе с базой данных ведёт логи транзакция, которые позволяют откатывать состояние базы данных в случае неудачной транзакции. В нашем, простом варианте логи хранятся в файле .ldf рядом с файлом базы данных. Если в базе данных нет ограничения на размер логов и используется полная модель восстановления, то файл логов может разрастаться до очень больших размеров и иногда его нужно очистить.

Если файл логов не ограничен, то роста он как следствие будет пока не займёт всё доступное место. Чем больше в базе данных транзакций - тем быстрее будет рости файл логов. Например у меня к одной из баз разиером 4Гб, которая интенсивно использовалась .ldf имел размер 130 Гб. Конечно очистив файл логов мы лишимся возможности откатить состояние базы данных, однако иногда очищать его всё же приходится. Например когда заканчивается место и MSSQL начинает ругаться как нибудь так:

Ошибка СУБД: 
Microsoft OLE DB Provider for SQL Server: Журнал транзакций для базы данных «ReportServer» заполнен. Чтобы обнаружить причину, по которой место в журнале не может быть повторно использовано, обратитесь к столбцу log_reuse_wait_desc таблицы 
sys. databases HRESULT=80040E14, SQLStvr: Error state=2, Severity=11,native=9002, line=1

или так:

Ошибка СУБД: 
Microsoft OLE Provider for SQL Server: The transaction log for database “ReportServer” is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column is sys.database 
HRESULT=80040E14, SQLSTATE=4 2000, native=9002

Перед очисткой логов стоит проверить состояние вашей базы, но это уже вопрос того софта который её использует, а не СУБД. Итак небольшая штаргалка "Как уменьшить размер лога транзакция (.ldf) в MS SQL 2008/20012":

1. Заходим в SQL Server Management Studio, подключаемся к нужному серверу, выбираем нужную базу и открываем для неё форму свойства в контекстном меню:

Как уменьшить размер лога транзакций (.ldf) в MS SQL 2008/20012

и в разделе "Параметры" меняем модель восстановления на простую. Если у вас изначально была выбрана простая модель, то ничего менять не нужно, впрочем скорее всего и необходимости в ручную чистить логи у вас не возникло бы.

Как уменьшить размер лога транзакций (.ldf) в MS SQL 2008/20012

Закрыв форму "Свойства", выбираем в контекстном меню базы "Задачи"-"Сжать"-"Файл".

Как уменьшить размер лога транзакций (.ldf) в MS SQL 2008/20012

В появившийся форме выбираем тип файла "Журнал",

 Как уменьшить размер лога транзакций (.ldf) в MS SQL 2008/20012

и в настройках операций сжатия пункт "Реорганизовать страницы, перед тем как освободить" и в пункте "Сжать файл" установить 0. тогда накопившиеся на момент сжатия логи будут уничтожены.

Как уменьшить размер лога транзакций (.ldf) в MS SQL 2008/20012

Если вам нужна модель восстановления данных "Полная", то не забудьте вернуть этот параметр на своё место.

Как уменьшить размер лога транзакций (.ldf) в MS SQL 2008/20012

После всех вышеописанных действит размер вашего файла тогов (.ldf) будет равен нуля и его рост начнётся заново