Урізання журналів транзакцій в sql server 2018

Список транзакцій в MS SQL мають звичай розростатися, що іноді може призвести до закінчення місця на диску. Щоб цього не відбувалося, в SQL Server існує операція урізання логів (Truncate). Урізання логів проводиться автоматично, в залежності від моделі відновлення:

• У простій моделі (Simple) - після досягнення контрольної точки;
• У моделі повного відновлення (Full) - після створення бекапа логів, за умови що з часу попереднього бекапа була досягнута контрольна точка.

Але бувають ситуації, коли автоматичне урізання з якихось причин не проводиться і логи займають все вільне місце. Причому відбувається це завжди несподівано і потрібно терміново звільнити місце. В цьому випадку урізання можна зробити вручну.

Подібна ситуація, як правило, відбувається з моделлю відновлення Full, при використанні якої лог можна обрізати до тих пір, поки в резервну копію не були всі транзакції. Це необхідно для того, щоб забезпечити наявність безперервну послідовність номерів (LSN) записів у журналі. Відповідно для урізання треба або зробити повний бекап бази, або (що простіше і швидше) тимчасово перевести її в режим Simple.

Для урізання балки відкриваємо Management Studio, вибираємо потрібну базу, натискаємо на ній правою клавішею миші і в контекстному меню вибираємо пункт «Properties». Переходимо на вкладку «Options» і змінюємо модель відновлення бази (Recovery model) на Simple.

Урізання журналів транзакцій в sql server 2012

Потім в тому ж контекстному меню переходимо в розділ Tasks -> Shrink -> Files. В поле File type вибираємо Log, в поле File name вказуємо ім'я файлу логів. В поле «Shrink action» вибираємо «Reorganize pages before releasing unused space», задаємо бажаний розмір файлу і тиснемо ОК.

Урізання журналів транзакцій в sql server 2012

Після завершення операції повертаємо режим відновлення бази назад в Full.

Теж саме можна зробити з Query Analizer за допомогою скрипта:

USE "Ім'я бази"
ALTER DATABASE "Ім'я бази" SET RECOVERY SIMPLE
DBCC SHRINKFILE ( "Файл лога", "Бажаний розмір");
ALTER DATABASE "Ім'я бази" SET RECOVERY FULL

Це всього лише один із способів швидкого зменшення розміру логів. Чи не найкрасивіший 🙂 але найбільш простий і ефективний.

Схожі статті