30 cze

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.