Jak przycinać dzienniki transakcji w SQL Server 2012

Dzienniki transakcyjne w SQL Server 2012 nieuchronnie rosną z czasem i mogą w pewnym momencie zająć całe dostępne miejsce na dysku. Aby uniknąć tej sytuacji, SQL Server ma narzędzia do obcinania dzienników transakcji w celu zwolnienia miejsca do ponownego użycia. Dzienniki są przycinane automatycznie w zależności od zastosowanego modelu odzyskiwania:

  • Proste (model prosty) - dzienniki są obcinane po osiągnięciu kamienia milowego
  • Pełna (pełny model odzyskiwania) - po wykonaniu kopii zapasowej dzienników, jeśli punkt kontrolny został osiągnięty po ostatniej kopii zapasowej

Istnieją jednak sytuacje, w których automatyczne przycinanie dzienników nie działa tak, jak powinno, a pliki dzienników zajmują całe miejsce na dysku. Z reguły dzieje się to nieoczekiwanie, a administrator musi pilnie rozwiązać problem zwolnienia miejsca na dysku.

W takim przypadku podczas łączenia się z bazą danych MS SQL pojawia się następujący błąd:

Microsoft OLE Provider dla SQL Server: dziennik transakcji dla bazy danych „DBName” jest pełny. Aby dowiedzieć się, dlaczego miejsca w dzienniku nie można ponownie wykorzystać, zobacz kolumnę log_reuse_wait_desc w sys.database
HRESULT = 80040E14, SQLSTATE = 4 2000, natywny = 9002

Oznacza to, że dzienniki transakcji zajęły całą wolną przestrzeń, a SQL nie może już zapisywać plików dziennika. W tej sytuacji możesz ręcznie obciąć dzienniki transakcji.

Zazwyczaj taka sytuacja może wystąpić podczas korzystania z pełnego modelu odzyskiwania (Pełna). W tym modelu pliki dziennika nie są obcinane, dopóki wszystkie dzienniki transakcji nie zostaną zapisane w kopii zapasowej. Ma to zapewnić ciągłość sekwencji numerów rekordów (LSN) w dzienniku. Tak więc, aby skrócić dzienniki, musisz wykonać pełną kopię zapasową bazy danych lub (szybciej) tymczasowo zmienić model odzyskiwania na Prosty.

Aby przyciąć dziennik transakcji, uruchom konsolę SQL Server Management Studio (SSMS), wybierz potrzebną bazę danych i otwórz jej właściwości w menu kontekstowym. Następnie przejdź do zakładki Opcje i zmień model odzyskiwania bazy danych (model odzyskiwania) na Prosty.

Następnie w menu kontekstowym bazy danych wybierz Zadania -> Zmniejsz -> Pliks. W terenie Typ pliku wybierz Zaloguj, a następnie w polu Nazwa pliku - nazwa pliku dziennika. W terenie Zmniejsz akcję trzeba sprecyzować Reorganizuj strony przed zwolnieniem nieużywanego miejsca, i określ rozmiar, aby zmniejszyć plik i kliknij Okej.

Po przycięciu dziennika ponownie przejdź do pełnego (pełnego) modelu odzyskiwania bazy danych.

Wszystkie powyższe operacje można wykonać za pomocą prostego skryptu z Query Analizer (skrypt działa w SQL Server od wersji 2008).
UŻYJ „DBName”
ZMIEŃ bazę danych „DBName” USTAW ODZYSKIWANIE PROSTE
DBCC SHRINKFILE („DBName”, „Rozmiar, do którego należy wyciąć dziennik”);
ZMIEŃ bazę danych „DBName” USTAW ODZYSKIWANIE PEŁNE

Wskazówka. Po obcięciu dzienników transakcji w programie SQL Server zdecydowanie zaleca się utworzenie pełnej kopii zapasowej bazy danych, as w przypadku uszkodzenia plików dziennika przywrócenie bazy danych przy użyciu plików transakcji nie będzie możliwe.