Как да отрежете журналите за транзакции в SQL Server 2012

Транзакционните регистрационни файлове в SQL Server 2012 неизбежно нарастват с течение на времето и в определен момент могат да заемат цялото налично дисково пространство. За да избегне тази ситуация, SQL Server разполага с инструменти за съкращаване на регистрационни файлове, за да освободи място за повторна употреба. Дневниците се подрязват автоматично в зависимост от използвания модел за възстановяване:

  • прост (прост модел) - трупите се съкращават след достигане на крайъгълен камък
  • пълен (модел за пълно възстановяване) - след извършване на резервно копие на регистрационните файлове, ако след последното архивиране е достигната контролна точка

Има обаче ситуации, когато автоматичното подрязване на регистрационните файлове не работи както трябва, а лог файловете заемат цялото дисково пространство. По правило това се случва неочаквано и администраторът трябва спешно да реши проблема с освобождаването на дисково пространство.

В този случай при свързване към MS SQL базата данни се появява следната грешка:

Доставчик на Microsoft OLE за SQL Server: Дневникът на транзакциите за базата данни „DBName“ е пълен. За да разберете защо пространството в дневника не може да се използва повторно, вижте колоната log_reuse_wait_desc е sys.database
HRESULT = 80040E14, SQLSTATE = 4 2000, native = 9002

Това означава, че дневниците за транзакции са заели цялото свободно пространство и SQL вече не може да записва логови файлове. В тази ситуация можете да съкращавате дневниците за транзакции ръчно.

Обикновено тази ситуация може да възникне при използване на модела за пълно възстановяване (Пълен). В този модел лог файловете не се съкращават, докато всички журнали на транзакциите не влязат в резервното копие. Това е за да се осигури непрекъсната последователност от записи на числа (LSN) в дневника. По този начин, за да направите съкратените регистрационни файлове, трябва да извършите пълно архивиране на базата данни или (по-бързо) временно да промените модела за възстановяване на Simple.

Така че, за да отрежете дневника на транзакциите, стартирайте конзолата на SQL Server Management Studio (SSMS), изберете необходимата база данни и отворете нейните свойства в контекстното меню. След това отидете на раздела Опции и променете модела за възстановяване на базата данни (модел за възстановяване) на Simple.

След това в контекстното меню на базата данни изберете Задачи -> Свиване -> Файлс. На полето Тип на файла изберете Дневник и в полето Име на файл - име на лог файл. На полето Свиващо действие трябва да посочите Реорганизирайте страниците, преди да освободите неизползвано пространство, и посочете размера, за да свиете файла и щракнете добре.

След подрязване на дневника отново преминете към модела за възстановяване на пълна (Пълна) база данни.

Всички описани по-горе операции могат да се извършват с обикновен скрипт от анализатор на заявките (скриптът се изпълнява в SQL Server от 2008 г. версия).
ИЗПОЛЗВАЙТЕ "DBName"
СЛЕД ДАТАБАЗАТА "DBName" НАСТРОЙКА ЗА ВЪЗСТАНОВЯВАНЕ ПРОСТО
DBCC SHRINKFILE ("DBName", "Размер, на който да се реже дневника");
СЛЕД ДАТАБАЗАТА "DBName" НАПЪЛНИТЕ ВЪЗСТАНОВЯВАНЕ ПЪЛНО

съвет. След подрязване на регистрационните файлове на транзакции в SQL Server, силно се препоръчва да създадете пълен архив на базата данни, като в случай на повреда на лог файловете, няма да можете да възстановите базата данни с помощта на файлове за транзакции.