2012-11-16 12 views
22

Dziennik transakcji dla bazy danych "" jest pełny. Aby dowiedzieć się, dlaczego miejsca w dzienniku nie można ponownie użyć, zobacz kolumnę log_reuse_wait_desc w sys.databases. Proszę pomóż mi rozwiązać ten problem. Z góry dzięki.Dziennik transakcji dla bazy danych "databasename" jest pełny.

+4

Czy przestrzegałeś porady w komunikacie o błędzie? Co tam znalazłeś? Jakie badania przeprowadziłeś w tym momencie? –

+0

Czy rzeczywiście nie ma nazwy bazy danych w wiadomości? – egrunin

+1

Spróbuj MSDN: [Dziennik transakcji rośnie nieoczekiwanie lub staje się pełny w SQL Server] (http://support.microsoft.com/kb/317375) Ma dość pełne wyjaśnienie problemu. – egrunin

Odpowiedz

16

Najbardziej prawdopodobną odpowiedzią jest potrzebne do uruchomienia dziennika kopii zapasowych lub istnieje otwarta transakcja.

Tutaj jest trochę więcej, aby pomóc ...

uruchomić ten skrypt na serwerze:

-- last FULL backup 
;with FULLBUs 
as (
    select d.name, max(b.backup_finish_date) as 'Last FULL Backup' 
    from sys.databases d 
     join msdb.dbo.backupset b 
      on d.name = b.database_name 
    where b.type = 'D' 
    group by d.name 
), 

-- last LOG backup for FULL and BULK_LOGGED databases 
LOGBUs 
as (
    select d.name, max(b.backup_finish_date) as 'Last LOG Backup' 
    from sys.databases d 
     join msdb.dbo.backupset b 
      on d.name = b.database_name 
    where d.recovery_model_desc <> 'SIMPLE' 
     and b.type = 'L' 
    group by d.name 
) 

-- general overview of databases, recovery model, and what is filling the log, last FULL, last LOG 
select d.name, d.state_desc, d.recovery_model_desc, d.log_reuse_wait_desc, f.[Last FULL Backup], l.[Last LOG Backup] 
from sys.databases d 
    left outer join FULLBUs f 
     on d.name = f.name 
    left outer join LOGBUs l 
     on d.name = l.name 
where d.name not in ('model', 'TempDB') 
order by d.name 

To zapytanie daje ogólny przegląd swoich baz danych, co do odzyskiwania modelu są one przy użyciu, dlaczego dziennik jest pełny i kiedy zostały uruchomione kopie zapasowe FULL i LOG.

Spójrz na kolumnę oznaczoną log_reuse_wait_description. Najprawdopodobniej jest napisane: BACKUP. Następną najbardziej prawdopodobną przyczyną jest TRANSACTION.

Jeśli jest BACKUP tutaj jest kilka informacji:

Zasadniczo dla proste bazy danych, należy uruchomić pełną kopię zapasową każdego dnia. Dla twoich PEŁNYCH baz danych, uruchom FULL backup każdego dnia, a kopia zapasowa LOG co godzinę. Dostosuj częstotliwość swoich baz danych LOG, aby dopasować się do możliwości utraty danych przy jednoczesnym utrzymaniu pracy.

Najprostszym sposobem zarządzania kopiami zapasowymi jest użycie Ola Hallengren's maintenance scripts. Odwiedź jego stronę i spróbuj z nich skorzystać.

Jeśli widzisz TRANSAKCJI jako powód, spróbuj uruchomić:

dbcc opentran 

I wyśledzić kto to ma otwartych transakcji.

+1

Bardzo pomocne, dzięki! –

+0

Wszystkie moje powiedzieć "NIC" lub "CHECKPOINT" w kolumnie log_reuse_wait_description. –

44

Niewątpliwie baza danych jest uruchomiona w Full Recovery Mode i nie udało się wykonać kopii zapasowych dziennika transakcji.

Kliknij prawym przyciskiem myszy bazę danych w programie SQL Server Manager i sprawdź stronę Opcje. Przełącz model odzyskiwania z Full na Simple, a następnie ponownie kliknij bazę danych prawym przyciskiem myszy. Wybierz opcję TasksShrink, Files. Zmniejsz plik logu do odpowiedniego rozmiaru (zwykle trzymam się 20-25% rozmiaru plików danych).

Przełącz się ponownie na Full Recovery Model i od razu wykonaj pełną kopię zapasową bazy danych.

Musisz teraz ustalić, czy potrzebujesz możliwości odzyskania bazy danych do określonego momentu. Jeśli tak, zaplanuj regularny dziennik transakcji i być może różnicowe kopie zapasowe zgodnie z wymaganiami firmy.

Jeśli firma może żyć z określoną utratą danych, zaplanuj pełne kopie zapasowe i przełącz się na tryb Simple.

+2

Pomiędzy tą odpowiedzią a odpowiedzią @ Steven'a, kilka świetnych informacji! –

0

Kliknij prawym przyciskiem myszy na bazę danych \ Właściwości \ Pliki.

Będziesz mieć tabelę z plikami baz danych, wśród których plik dziennika. Po prostu zwiększ rozmiar początkowy do rozsądnej kwoty.

0

Zrób to Kliknij prawym przyciskiem myszy węzeł bazy danych -> Zadania-> Utwórz kopię zapasową-> Ogólne (w zakładce) -> ustaw "Typ kopii zapasowej" na "Dziennik transakcji" -> OK.

1

Jeśli model odzyskiwania bazy danych jest pełny i nie masz planu konserwacji kopii zapasowej dziennika, pojawi się ten błąd, ponieważ dziennik transakcji zapełni się z powodu LOG_BACKUP.

to uniemożliwi wykonywanie jakichkolwiek działań w tej bazie danych, takich jak zmniejszanie, a aparat bazy danych SQL Server spowoduje błąd 9002.

w celu przezwyciężenia tego zachowania Zaleca się sprawdzenie tego The transaction log for database ‘SharePoint_Config’ is full due to LOG_BACKUP, które przedstawia kroki szczegółowe w celu rozwiązania tego problemu, takie jak plan konserwacji kopii zapasowych dzienników.

+2

Zamiast publikować gdzie znaleźć odpowiedź (w linku), musisz podać te informacje, aby odpowiedzieć na to pytanie. Zobacz [Jak napisać dobrą odpowiedź?] (/ Help/how-to-answer) i [Jak odwoływać się do materiałów napisanych przez innych] (/ help/referencing) dla niektórych wskazówek. Odpowiedzi dotyczące wyłącznie linków są uważane za odpowiedzi o niskiej jakości w StackOverflow i mogą być usuwane. –

Powiązane problemy