Log Shrinking i Truncation w MS SQL Server
Dziennik transakcji odgrywa kluczową rolę w bazie danych MS SQL Server: utrzymuje zapis aktywności bazy danych, kluczowy dla przywrócenia ostatnich danych w przypadku awarii. Jednakże jest są ograniczenia: log transakcji może zużywać znaczącą ilość miejsca w aktywnej bazie danych. MS SQL Server udostępnia dwa działania mające na celu zrównoważyć te duże wymagania przestrzenne…
LOG TRUNCATION
To mechanizm usuwania wpisów z pliku dziennika transakcji. Normalnie, SQL Server obsługuje usuwanie automatycznie i bez interwencji administracji, nie jest konieczne.Częstotliwość obcinania zależy od modelu odzyskiwania używanego w bazie danych MS SQL Server ( full or bulk-logged model). W celu "przycięcia" dziennika transakcji można wydać polecenie kopii zapasowej dziennika transakcji. Można to zrobić za pomocą następującego polecenia Transact-SQL:
BACKUP LOG <database_name> WITH TRUNCATE_ONLY;
LOG SHRINKING
LOG TRUNCATION ma za zadanie usunąć transakcje z pliku transakcji, ale nie faktycznie zmniejszyć ilość miejsca zarezerwowanego pliku. Może się zdarzyć że w MS SQL Server, dziennik transakcji ostatecznie wzrośnie do wielkości sprzed obcięcia, więc nie zwolni się miejsca na dysku przydzieloną dla dziennika transakcji. Może się okazać że dziennik transakcji "urośnie" sztucznie do dużych rozmiarów.
W takim przypadku trzeba ręcznie zmniejszyć plik dziennika transakcji, aby odzyskać miejsce na dysku. Plik transakcji można zmniejszyć za pomocą następującego polecenia Transact-SQL:
DBCC SHRINKFILE(<filename>,<desired_shrink_size>)
Gdzie desired_shrink_size jest ilością miejsca, w megabajtach, które chcemy odzyskać.
Z oczywistych względów, odzyskać najwięcej miejsca na dysku można bezpośrednio po operacji LOG TRUNCATION.
Jedna odpowiedź
o ile dobrze pamiętam można też bezpieczniej przestawić tryb logowania na simple , wykonać backup odłączyć bazę usunąć log, a przy ponownym podłączeniu log odtworzy się automatycznie, następnie przestawić logowanie na full, sposób trochę nieprofesjonalny ale użycie desired_shrink_size i pomyłka w cyferkach może nas drogo kosztować