Mam długotrwały proces, który wstrzymuje otwartą transakcję przez cały czas.
Nie mam kontroli nad sposobem, w jaki to jest wykonywane.
Ponieważ transakcja jest otwarta przez cały czas, po wypełnieniu dziennika transakcji SQL Server nie może zwiększyć rozmiaru pliku dziennika.
Więc proces kończy się niepowodzeniem z powodu błędu "The transaction log for database 'xxx' is full"
.
Próbowałem temu zapobiec, zwiększając rozmiar pliku dziennika transakcji we właściwościach bazy danych, ale pojawia się ten sam błąd.
Nie jestem pewien, czego powinienem spróbować dalej. Proces trwa kilka godzin, więc nie jest łatwo grać metodą prób i błędów.
Jakieś pomysły?
Jeśli ktoś jest zainteresowany, procesem jest import organizacji Microsoft Dynamics CRM 4.0.
Jest dużo miejsca na dysku, logujemy się w prostym trybie logowania i utworzyliśmy kopię zapasową dziennika przed rozpoczęciem procesu.
- = - = - = - = - AKTUALIZACJA - = - = - = - = -
Dziękuję wszystkim za dotychczasowe komentarze. Oto, co skłoniło mnie do przekonania, że dziennik nie wzrośnie z powodu otwartej transakcji:
Otrzymuję następujący błąd ...
Import Organization (Name=xxx, Id=560d04e7-98ed-e211-9759-0050569d6d39) failed with Exception:
System.Data.SqlClient.SqlException: The transaction log for database 'xxx' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
Więc postępując zgodnie z tą radą poszedłem do „ log_reuse_wait_desc column in sys.databases
” i to miało wartość „ ACTIVE_TRANSACTION
”.
Według Microsoft: http://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx
To oznacza co następuje:
Transakcja jest aktywna (wszystkie modele odzyskiwania). • Na początku tworzenia kopii zapasowej dziennika może istnieć długoterminowa transakcja. W takim przypadku zwolnienie miejsca może wymagać kolejnej kopii zapasowej dziennika. Aby uzyskać więcej informacji, zobacz „Długoterminowe aktywne transakcje” w dalszej części tego tematu.
• Transakcja jest odroczona (tylko SQL Server 2005 Enterprise Edition i nowsze wersje). Transakcja odroczona jest faktycznie transakcją aktywną, której wycofanie jest zablokowane z powodu niedostępnego zasobu. Aby uzyskać informacje o przyczynach odroczonych transakcji i sposobach ich przenoszenia ze stanu odroczonego, zobacz Transakcje odroczone.
Czy coś źle zrozumiałem?
- = - = - = - AKTUALIZACJA 2 - = - = - = -
Właśnie rozpoczęto proces, ustawiając początkowy rozmiar pliku dziennika na 30 GB. To zajmie kilka godzin.
- = - = - = - Ostateczna AKTUALIZACJA - = - = - = -
Problem był faktycznie spowodowany tym, że plik dziennika zajmował całe dostępne miejsce na dysku. W ostatniej próbie zwolniłem 120 GB i nadal je wykorzystywałem i ostatecznie się nie udało.
Nie zdawałem sobie sprawy, że dzieje się to wcześniej, ponieważ gdy proces był wykonywany w nocy, wycofywał się po niepowodzeniu. Tym razem udało mi się sprawdzić rozmiar pliku dziennika przed wycofaniem.
Dziękuję wszystkim za wkład.