Транзакционните регистрационни файлове в SQL Server 2012 неизбежно нарастват с течение на времето и в определен момент могат да заемат цялото налично дисково пространство. За да избегне тази ситуация, SQL Server разполага с инструменти за съкращаване на регистрационни файлове, за да освободи място за повторна употреба. Дневниците се подрязват автоматично в зависимост от използвания модел за възстановяване:
- прост (прост модел) - трупите се съкращават след достигане на крайъгълен камък
- пълен (модел за пълно възстановяване) - след извършване на резервно копие на регистрационните файлове, ако след последното архивиране е достигната контролна точка
Има обаче ситуации, когато автоматичното подрязване на регистрационните файлове не работи както трябва, а лог файловете заемат цялото дисково пространство. По правило това се случва неочаквано и администраторът трябва спешно да реши проблема с освобождаването на дисково пространство.
В този случай при свързване към MS SQL базата данни се появява следната грешка:
Доставчик на Microsoft OLE за SQL Server: Дневникът на транзакциите за базата данни „DBName“ е пълен. За да разберете защо пространството в дневника не може да се използва повторно, вижте колоната log_reuse_wait_desc е sys.databaseHRESULT = 80040E14, SQLSTATE = 4 2000, native = 9002
Това означава, че дневниците за транзакции са заели цялото свободно пространство и SQL вече не може да записва логови файлове. В тази ситуация можете да съкращавате дневниците за транзакции ръчно.
Обикновено тази ситуация може да възникне при използване на модела за пълно възстановяване (Пълен). В този модел лог файловете не се съкращават, докато всички журнали на транзакциите не влязат в резервното копие. Това е за да се осигури непрекъсната последователност от записи на числа (LSN) в дневника. По този начин, за да направите съкратените регистрационни файлове, трябва да извършите пълно архивиране на базата данни или (по-бързо) временно да промените модела за възстановяване на Simple.
Така че, за да отрежете дневника на транзакциите, стартирайте конзолата на SQL Server Management Studio (SSMS), изберете необходимата база данни и отворете нейните свойства в контекстното меню. След това отидете на раздела Опции и променете модела за възстановяване на базата данни (модел за възстановяване) на Simple.
След това в контекстното меню на базата данни изберете Задачи -> Свиване -> Файлс. На полето Тип на файла изберете Дневник и в полето Име на файл - име на лог файл. На полето Свиващо действие трябва да посочите Реорганизирайте страниците, преди да освободите неизползвано пространство, и посочете размера, за да свиете файла и щракнете добре.
След подрязване на дневника отново преминете към модела за възстановяване на пълна (Пълна) база данни.
Всички описани по-горе операции могат да се извършват с обикновен скрипт от анализатор на заявките (скриптът се изпълнява в SQL Server от 2008 г. версия).ИЗПОЛЗВАЙТЕ "DBName"
СЛЕД ДАТАБАЗАТА "DBName" НАСТРОЙКА ЗА ВЪЗСТАНОВЯВАНЕ ПРОСТО
DBCC SHRINKFILE ("DBName", "Размер, на който да се реже дневника");
СЛЕД ДАТАБАЗАТА "DBName" НАПЪЛНИТЕ ВЪЗСТАНОВЯВАНЕ ПЪЛНО