SELECT * FROM Vzakladke.net

Статьи об автоматизации и программировании

Переполнение диска или как уменьшать Ldf (Log) файлов в MS SQL Server

 

 

Существует ситуация, когда LDF файл занимает много гигабайт места (файл с постфиксом _log), и его необходимо уменьшить.

Это происходит когда база в SQL находится в режиме Full, т.е. с фиксацией всех произведенных транзакций. Модель Full позволяет восстановить состояние базы SQL на любое время, в то время, как модель Simple не позволяет этого сделать, а только восстановить базу из бэкапа. Смысл модели Full в том, что в журнал транзакций LDF записываются ВСЕ транзакции и там остаются, ну до определенного времени, например, до операции shrink. Таким образом SQL последовательным откатом транзакций назад может восстановить состояние базы на любой момент времени периода записанных в LDF транзакций.

Переход в режим Simple приведет к тому, что в файле LDF будут находиться только незавершенные транзакции, что уменьшит размер этого файла.

 

Первое что нужно сделать, перевести базу в модель восстановления Simple (при этом настроить механизм создания беэкапов базы, если этого до сих пор не сделано). Эту операцию можно делать "на ходу". 
Однако, перевод в simple автоматически не уменьшает размер файла транзакций. Можно, провести операцию shrink (сжатие базы) сразу, но лучше сначала сделать полный бэкап базы средствами SQL (есть там в SQL-е по этому поводу одна маленькая хитрость), а потом сделать shrink как файлу базы MDF, так и файлу журнала транзакций LDF. Размер базы тоже должен уменьшиться, но не на много, а, вот, размер файла транзакций LDF, если было сделано все правильно, должен стать практически нулевым (в случае, когда в этом момент в базе нет активной работы пользователей). 
Операции бэкапа средствами SQL, и shrink-а, можно делать не выгоняя пользователей, эти операции могут, разве что, сказаться на производительности. Настоятельная рекомендация сделать резервные копии перед началом этой операции.

 

Для выполнения операции по очистке логов необходимо запустить восстановление: 

 

USE [dbname]; 
GO 
-- Truncate the log by changing the database recovery model to SIMPLE. 
ALTER DATABASE [dbname]
SET RECOVERY SIMPLE; 
GO 
-- Shrink the truncated log file to 1 MB. 
DBCC SHRINKFILE ([dbname_Log], 1); 
GO 
-- Reset the database recovery model. 
ALTER DATABASE [dbname]
SET RECOVERY FULL; 
GO

 

Если не охота мучиться с запросами можно сделать через GUI: правой кнопкой на базе -> задачи -> шринк -> файлы -> выбираем лог (там будет видно на сколько процентов можно уменьшить). 
Иногда, если лог большой - например 50 Гб, то уменьшать (шринкать) его надо 2 раза - с первого раза уменьшается, но не полностью.

 

 

Дата публикации: 2016-03-03 09:03:02

MS SQL

1

Отзывы:

Антон
Для сервера MS SQL раньше 2008-го года можно было пробовать: BACKUP LOG [kk_smb] WITH TRUNCATE_ONLY

Ваше имя:

Ваш e-mail (необязательно):

Сообщение:

Captcha