Zmniejszanie wielkości pliku log’a MSSQL 2k8 +
W wersjach wcześniejszych, najprostszą metodą redukcji pliku log’a było uruchomienie komendy BACKUP LOG WITH TRUNCATE_ONLY a następnie SHRINKFILE. Ponieważ metoda ta jest/była raczej ryzykowna – tracimy zawartość pliku loga bez jego rzeczywistego backup’u, od wersji MS SQL SERVER 2008, opcja ta została wyłączona. Przy próbie jej użycia, otrzymamy komunikat:
'TRUNCATE_ONLY' is not a recognized BACKUP option.
W jaki sposób wykonać więc przycięcie log’a, jeżeli nie jesteśmy w stanie żyć z jego aktualnym rozmiarem?
Przełączamy bazę w tryb simple recovery, uruchamiamy standardową procedurę przycinającą i powracamy do trybu full recovery:
USE DBNAME ALTER DATABASE [DBNAME] SET RECOVERY SIMPLE WITH NO_WAIT DBCC SHRINKFILE(LOGFILENAME_log, 1) ALTER DATABASE [DBNAME] SET RECOVERY FULL WITH NO_WAIT
Właśnie straciliśmy zawartość log’a, dokładnie tak, jak w przypadku użycia ‚BACKUP LOG WITH TRUNCATED_ONLY’. Jednak, aby nie dopuścić do ponownego rozrostu pliku log’a i jednocześnie korzystać z dobrodziejstw full recovery, należy rozpocząć cykliczne backup’owanie log’a, np. tak:
BACKUP LOG [DBNAME] TO DISK = N'C:\Backup\DBNAME.bak'
Jeżeli prawidłowo zaplanujemy odstęp między backup’ami, log nie powinien się rozrastać, a jednocześnie nadal posiadamy możliwość przywrócenia backup’u z dowolnego punktu w czasie.