Twoje zarządzanie plikami może być operacją całkowicie online. Istnieją dwie ścieżki, w zależności od potrzeby zachowania informacji dziennika w celu odzyskania:
Odzyskiwanie punktu w czasie nie jest konieczne
- Konwertuj bazę danych do
SIMPLE
odzyskiwania. Wykonaj punkt kontrolny, aby zapisać transakcje na dysku.
- Spłaszcz dziennik.
- Zmień rozmiar dziennika do odpowiedniego rozmiaru.
Polecam również ustawienie stałej kwoty wzrostu i nieograniczonego wzrostu (aby lepiej zarządzać logiem). Uwaga: ustalona kwota wzrostu jest bardzo zależna od kwoty, zalecam początkowo korzystanie z 1–2 GB, w zależności od tego, jaki wzrost może się spodziewać w dzienniku. Idealnie byłoby, gdyby Twój dziennik nie urósł zbytnio, więc nie powinno to mieć większego wpływu. Jeśli Twój dziennik regularnie rośnie, może być konieczne ponowne sprawdzenie rozmiaru.
Zrealizowane przy użyciu:
ALTER DATABASE [foo]
SET RECOVERY SIMPLE;
CHECKPOINT;
DBCC SHRINKFILE (foo_log,0);
ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);
--Optional if you want the database in full recovery mode
--for point in time recovery going forward
ALTER DATABASE [foo]
SET RECOVERY FULL;
Potrzebne jest odzyskanie punktu w czasie
Największe zawieszenie polega na tym, że nie można zmniejszyć pliku dziennika poza aktualnie aktywny segment VLF. Aby to zobaczyć, możesz użyć DBCC LOGINFO
w kontekście bazy danych. Każdy segment o statusie = 2 jest aktywny. Aby wyczyścić aktywne segmenty, konieczne będzie uruchomienie kopii zapasowej dziennika transakcji, gdy żadne transakcje nie są aktualnie aktywne w tym segmencie. Twoje kroki to:
- Uruchom kopię zapasową dziennika transakcji.
- Zmniejsz swój plik. (Najlepiej spłaszczyć, ale jeśli baza danych jest aktywna, będzie to trudne).
- Powtarzaj kroki 1 i 2, aż dziennik osiągnie odpowiedni rozmiar, najlepiej możliwie jak najmniejszy.
- Zmień rozmiar dziennika do odpowiedniego rozmiaru.
Zrealizowane przy użyciu:
BACKUP LOG [foo] TO DISK='<Location of t-log backup>';
DBCC SHRINKFILE (foo_log,0);
--Repeat the above until your log file is small "enough"
ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);
Kilka dodatkowych zasobów, aby zrozumieć, co się tutaj dzieje: