Jak wyczyścić dziennik transakcji SQL Server?

Nie jestem ekspertem SQL, i przypomina mi się o tym za każdym razem, gdy muszę zrobić coś poza podstawami. Mam testową bazę danych, która nie jest duża, ale dziennik transakcji zdecydowanie jest. Jak wyczyścić dziennik transakcji?

Author: Aaron Bertrand, 2008-09-11

20 answers

Zmniejszenie pliku dziennika powinno być zarezerwowane dla scenariuszy, w których napotkał nieoczekiwany wzrost, którego nie spodziewasz się ponownie. Jeśli plik dziennika ponownie powiększy się do tego samego rozmiaru, nie osiągnie się zbyt wiele, zmniejszając go tymczasowo. Teraz, w zależności od celów odzyskiwania bazy danych, są to działania, które powinieneś podjąć.

Najpierw zrób pełną kopię zapasową

Nigdy nie wprowadzaj żadnych zmian w bazie danych bez upewnienia się, że możesz ją przywrócić coś poszło nie tak.

Jeśli zależy ci na odzyskiwaniu punktów w czasie

(a przez odzyskiwanie punktowe, mam na myśli, że zależy ci na możliwości przywrócenia do czegokolwiek innego niż pełna lub różnicowa kopia zapasowa.)

Prawdopodobnie twoja baza danych jest w trybie odzyskiwania FULL. Jeśli nie, to upewnij się, że jest:

ALTER DATABASE testdb SET RECOVERY FULL;

Nawet jeśli wykonujesz regularne pełne kopie zapasowe, plik dziennika będzie rosnąć i rosnąć, dopóki nie wykonasz kopii zapasowej dziennika - jest to dla twojej ochrony, a nie dla niepotrzebnie pożerać miejsce na dysku. Powinieneś wykonywać te kopie zapasowe dziennika dość często, zgodnie z celami odzyskiwania. Na przykład, jeśli masz regułę biznesową, która stanowi, że możesz stracić nie więcej niż 15 minut danych w przypadku katastrofy, powinieneś mieć zadanie, które tworzy kopię zapasową dziennika co 15 minut. Oto skrypt, który wygeneruje znacznik czasu nazwy plików na podstawie bieżącego czasu (ale możesz to zrobić również z planami konserwacji itp., tylko nie wybieraj każda z opcji w planach konserwacyjnych jest okropna).

DECLARE @path NVARCHAR(255) = N'\\backup_share\log\testdb_' 
  + CONVERT(CHAR(8), GETDATE(), 112) + '_'
  + REPLACE(CONVERT(CHAR(8), GETDATE(), 108),':','')
  + '.trn';

BACKUP LOG foo TO DISK = @path WITH INIT, COMPRESSION;

Zauważ, że \\backup_share\ powinno znajdować się na innej maszynie, która reprezentuje inne podstawowe urządzenie pamięci masowej. Tworzenie kopii zapasowych na tej samej maszynie (lub na innej maszynie, która używa tych samych dysków lub innej maszyny wirtualnej, która znajduje się na tym samym hoście fizycznym) nie pomaga, ponieważ jeśli maszyna wybuchnie, utracisz bazę danych i jej kopie zapasowe. W zależności od infrastruktury sieciowej bardziej sensowne może być tworzenie kopii zapasowych lokalnie, a następnie przenoszenie ich do innej lokalizacji za kulisami; w obu przypadkach chcesz je jak najszybciej usunąć z podstawowej maszyny bazodanowej.

Teraz, gdy masz uruchomione regularne kopie zapasowe dzienników, powinno być rozsądne, aby zmniejszyć plik dziennika do czegoś bardziej rozsądnego niż to, co jest wysadzone do teraz. To nie oznacza uruchamianie SHRINKFILE w kółko, aż plik dziennika będzie miał 1 MB-nawet jeśli tworzysz kopię zapasową Zaloguj się często, nadal musi pomieścić sumę wszystkich jednoczesnych transakcji, które mogą wystąpić. Zdarzenia autogrow pliku dziennika są kosztowne, ponieważ SQL Server musi zerować pliki (w przeciwieństwie do plików danych, gdy włączona jest natychmiastowa inicjalizacja pliku), a transakcje użytkownika muszą czekać, aż tak się stanie. Chcesz robić tę rutynę grow-shrink-grow-shrink jak najmniej, a na pewno nie chcesz, aby Twoi użytkownicy za to płacili.

Pamiętaj, że być może będziesz musiał wykonać kopię zapasową dziennika dwa razy przed psychiatrą jest możliwe(dzięki Robert).

Więc musisz wymyślić praktyczny Rozmiar pliku dziennika. Nikt tutaj nie może Ci powiedzieć, co to jest, nie wiedząc o wiele więcej o Twoim systemie, ale jeśli często kurczysz plik dziennika i ponownie rośnie, dobry znak wodny jest prawdopodobnie o 10-50% wyższy niż największy, jaki był. Załóżmy, że chodzi o 200 MB i chcesz, aby kolejne zdarzenia autogrowth miały 50 MB, wtedy możesz dostosować rozmiar pliku dziennika w ten sposób:

USE [master];
GO
ALTER DATABASE Test1 
  MODIFY FILE
  (NAME = yourdb_log, SIZE = 200MB, FILEGROWTH = 50MB);
GO

Zauważ, że jeśli plik dziennika ma obecnie > 200 MB, być może będziesz musiał najpierw uruchomić ten plik:

USE yourdb;
GO
DBCC SHRINKFILE(yourdb_log, 200);
GO

Jeśli nie dbasz o punkt w czasie odzyskiwania

Jeśli jest to testowa baza danych i nie zależy ci na odzyskiwaniu punkt w czasie, powinieneś upewnić się, że Twoja baza danych jest w trybie odzyskiwania SIMPLE.

ALTER DATABASE testdb SET RECOVERY SIMPLE;

Umieszczenie bazy danych w trybie odzyskiwania SIMPLE upewni się, że SQL Server ponownie użyje części pliku dziennika (zasadniczo wycofuje się nieaktywne transakcje) zamiast rosnąć, aby przechowywać zapis wszystkich transakcji (jak FULL Odzyskiwanie robi, dopóki nie utworzysz kopii zapasowej dziennika). CHECKPOINT zdarzenia pomogą kontrolować dziennik i upewnić się, że nie musi rosnąć, chyba że wygenerujesz dużo aktywności t-log między CHECKPOINTs.

Następnie powinieneś upewnić się, że ten wzrost dziennika był naprawdę spowodowany nienormalnym wydarzeniem (powiedzmy, corocznym wiosennym porządkiem lub odbudowaniem największych indeksów), a nie normalnym, codziennym wzrostem użycie. Jeśli zmniejszysz plik dziennika do śmiesznie małego rozmiaru, a SQL Server będzie musiał go ponownie powiększyć, aby dostosować się do normalnej aktywności, co zyskałeś? Czy był pan w stanie wykorzystać wolne miejsce na dysku tylko tymczasowo? Jeśli potrzebujesz natychmiastowej poprawki, możesz uruchomić następujące polecenie:

USE yourdb;
GO
CHECKPOINT;
GO
CHECKPOINT; -- run twice to ensure file wrap-around
GO
DBCC SHRINKFILE(yourdb_log, 200); -- unit is set in MBs
GO

W Przeciwnym Razie ustaw odpowiedni rozmiar i tempo wzrostu. Jak na przykładzie przypadku odzyskiwania punkt w czasie, możesz użyć tego samego kodu i logiki, aby określić rozmiar pliku odpowiednie i ustawione rozsądne parametry wzrostu.

Some things you don ' t want to do

  • Utwórz kopię zapasową dziennika za pomocą opcji TRUNCATE_ONLY, a następnie SHRINKFILE. Po pierwsze, ta opcja TRUNCATE_ONLY została przestarzała i nie jest już dostępna w bieżących wersjach SQL Server. Po drugie, jeśli korzystasz z modelu odzyskiwania FULL, zniszczy to twój łańcuch logów i będzie wymagał nowej, pełnej kopii zapasowej.

  • Odłączyć bazę danych, usunąć plik dziennika i ponownie dołączyć . Nie mogę podkreślić, jak niebezpieczne to może być. Twoja baza danych może nie wrócić do kopii zapasowej, może pojawić się jako podejrzana, być może będziesz musiał powrócić do kopii zapasowej (jeśli ją masz) itp. itd.

  • Użyj opcji "Zmniejsz bazę danych" . DBCC SHRINKDATABASE a opcja planu konserwacji, aby zrobić to samo, to złe pomysły, zwłaszcza jeśli naprawdę potrzebujesz tylko rozwiązać problem z logiem. Zaznacz plik, który chcesz dostosować i dostosuj go niezależnie, używając DBCC SHRINKFILE lub ALTER DATABASE ... MODIFY FILE (przykłady powyżej).

  • Zmniejsz plik dziennika do 1 MB . Wygląda to kusząco, ponieważ, hej, SQL Server pozwoli mi to zrobić w niektórych scenariuszach i spójrz na całą przestrzeń, którą uwalnia! Jeśli twoja baza danych nie jest tylko do odczytu (i tak jest, należy ją zaznaczyć za pomocą ALTER DATABASE), to absolutnie doprowadzi to do wielu niepotrzebnych zdarzeń wzrostu, ponieważ dziennik musi pomieścić bieżące transakcje niezależnie od modelu odzyskiwania. Jaki jest sens chwilowego uwolnienia tej przestrzeni, tak SQL Server może to cofnąć powoli i boleśnie?

  • Utwórz drugi plik dziennika . Zapewni to chwilową ulgę dyskowi, który wypełnił dysk, ale to jest jak próba naprawienia przebitego płuca za pomocą plastra. Powinieneś zająć się problematycznym plikiem dziennika bezpośrednio, zamiast po prostu dodawać kolejny potencjalny problem. Poza przekierowaniem aktywności dziennika transakcji na inny dysk, drugi plik dziennika naprawdę nic nie robi (w przeciwieństwie do drugiego plik danych), ponieważ tylko jeden z plików może być kiedykolwiek używany na raz. Paul Randal wyjaśnia również, dlaczego wiele plików dziennika może cię później ugryźć .

Bądź proaktywny

Zamiast zmniejszać plik dziennika do niewielkiej ilości i pozwalać mu na ciągły autogrow z małą szybkością samodzielnie, ustaw go na dość duży rozmiar (taki, który pomieści sumę największego zestawu jednoczesnych transakcji) i ustaw rozsądne ustawienie autogrow jako rezerwę, więc że nie musi rosnąć wielokrotnie, aby zaspokoić pojedyncze transakcje i tak, że będzie stosunkowo rzadko, aby kiedykolwiek musiał rosnąć podczas normalnej działalności biznesowej.

Najgorszymi możliwymi ustawieniami są tutaj wzrost o 1 MB lub wzrost o 10%. Dość zabawne, są to domyślne wartości dla SQL Server (na które narzekałem i poprosił o zmiany bez skutku) - 1 MB dla plików danych i 10% dla plików dziennika. Pierwszy jest w dzisiejszych czasach o wiele za mały, a drugi prowadzi do coraz dłuższych zdarzeń za każdym razem (powiedzmy, Twój plik dziennika to 500 MB, pierwszy wzrost to 50 MB, następny wzrost to 55 MB, następny wzrost to 60,5 MB, itd. itd. - i na powolnym I/o, uwierz mi, naprawdę zauważysz tę krzywą).

Czytaj dalej

Proszę nie zatrzymywać się tutaj; podczas gdy wiele z porad, które widzisz tam na temat kurczenia się plików dziennika jest z natury złe, a nawet potencjalnie katastrofalne, są ludzie, którzy bardziej dbają o integralność danych niż zwolnienie dysku miejsce.

Wpis na blogu, który napisałem cztery lata temu, kiedy zobaczyłem kilka postów" oto jak zmniejszyć plik dziennika", które wyskakują .

W związku z tym, że w SQL Server 2017 nie ma już żadnych informacji o tym, jak to zrobić, nie ma żadnych informacji o tym, jak to zrobić.

Post na blogu Paula Randala wyjaśniający, dlaczego konserwacja t-log jest ważna i dlaczego nie powinieneś zmniejszać plików danych, .

Mike Walsh ma świetną odpowiedź obejmującą niektóre z tych aspektów, w tym powody, dla których możesz nie być w stanie natychmiast zmniejszyć pliku dziennika {96]}.

 646
Author: Aaron Bertrand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:42:39

DISCLAIMER: przeczytaj uważnie poniższe komentarze i zakładam, że przeczytałeś już zaakceptowaną odpowiedź. Jak mówiłem prawie 5 lat temu:

Jeśli ktoś ma jakieś uwagi do dodania w sytuacjach, gdy nie jest to odpowiednie lub optymalne rozwiązanie, prosimy o komentarz poniżej


  • Kliknij prawym przyciskiem myszy nazwę bazy danych.

  • Wybierz Zadania → Zmniejsz → Baza Danych

  • Następnie kliknij OK !

I zazwyczaj otwieram katalog Eksploratora Windows zawierający pliki bazy danych, więc od razu widzę efekt.

byłem zaskoczony, że to działa! Zwykle używałem DBCC wcześniej, ale po prostu próbowałem i nic nie kurczyło, więc próbowałem GUI (2005) i działało świetnie - uwolnienie 17 GB w 10 sekund

W trybie pełnego odzyskiwania może to nie działać, więc najpierw musisz wykonać kopię zapasową dziennika lub zmienić na proste odzyskiwanie, a następnie zmniejszyć plik. [thanks @onupdatecascade for this]

--

PS: doceniam to, co niektórzy skomentowali na temat niebezpieczeństw z tym związanych, ale w moim środowisku nie miałem żadnych problemów robiąc to sam, zwłaszcza, że zawsze robię pełną kopię zapasową najpierw. Zanim przejdziesz dalej, weź pod uwagę środowisko i wpływ na strategię tworzenia kopii zapasowych i bezpieczeństwo pracy. Wszystko, co robiłem, to wskazywanie ludziom funkcji dostarczonej przez Microsoft!

 178
Author: Simon_Weaver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 10:00:52
USE AdventureWorks2008R2;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE AdventureWorks2008R2
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (AdventureWorks2008R2_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE AdventureWorks2008R2
SET RECOVERY FULL;
GO

Od: DBCC SHRINKFILE (Transact-SQL)

Możesz najpierw wykonać kopię zapasową.

 167
Author: Rui Lima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 10:18:54

Poniżej znajduje się skrypt do zmniejszania dziennika transakcji, ale zdecydowanie polecam utworzenie kopii zapasowej dziennika transakcji przed zmniejszeniem go.

Jeśli zmniejszysz plik, stracisz mnóstwo danych, które mogą uratować życie w przypadku katastrofy. Dziennik transakcji zawiera wiele przydatnych danych, które można odczytać za pomocą zewnętrznego czytnika dziennika transakcji (można je odczytać ręcznie, ale przy dużym wysiłku).

Dziennik transakcji jest również koniecznością, jeśli chodzi o punkt w czasie odzyskiwania, więc nie tylko wyrzucić go, ale upewnij się, że kopię zapasową go wcześniej.

Oto kilka postów, w których ludzie używali danych przechowywanych w dzienniku transakcji do odzyskiwania:

 

USE DATABASE_NAME;
GO

ALTER DATABASE DATABASE_NAME
SET RECOVERY SIMPLE;
GO
--First parameter is log file name and second is size in MB
DBCC SHRINKFILE (DATABASE_NAME_Log, 1);

ALTER DATABASE DATABASE_NAME
SET RECOVERY FULL;
GO

Możesz uzyskać błąd, który wygląda tak, gdy wykonujesz polecenia powyżej

"nie można zmniejszyć pliku dziennika (nazwy pliku dziennika), ponieważ logiczne plik dziennika znajdujący się na końcu pliku jest w użyciu "

Oznacza to, że TLOG jest w użyciu. W takim przypadku spróbuj wykonać to kilka razy pod rząd lub znajdź sposób na zmniejszenie aktywności w bazie danych.

 51
Author: Michael Dalton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 10:25:05

Jeśli nie używasz logów transakcji do przywracania (tzn. robisz tylko pełne kopie zapasowe), możesz ustawić tryb odzyskiwania na "prosty", a dziennik transakcji wkrótce się zmniejszy i nigdy więcej się nie wypełni.

Jeśli używasz SQL 7 lub 2000, możesz włączyć "obcinaj log na checkpoincie" w zakładce Opcje bazy danych. To ma ten sam efekt.

Nie jest to oczywiście zalecane w środowiskach produkcyjnych, ponieważ nie będzie można przywrócić do pewnego punktu w czasie.

 28
Author: Jonathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 14:31:27

Oto prosty i bardzo nieelegancki & potencjalnie niebezpieczny sposób.

  1. Backup DB
  2. Detach DB
  3. Zmień nazwę pliku dziennika
  4. Dołącz DB
  5. zostanie odtworzony nowy plik dziennika
  6. Usuń przemianowany plik dziennika.

Zgaduję, że nie robisz kopii zapasowych logów. (Które obcinają dziennik). Moja rada to zmiana modelu odzyskiwania z pełnego na prostego . Zapobiegnie to wzdęciom kłody.

 25
Author: Johnno Nolan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-26 08:00:27

Jak dotąd większość odpowiedzi zakłada, że nie potrzebujesz pliku dziennika transakcji, jednak jeśli twoja baza danych korzysta z modelu odzyskiwania FULL i chcesz zachować kopie zapasowe na wypadek konieczności przywrócenia bazy danych, to nie należy okracać lub usuwać pliku dziennika w sposób sugerowany przez wiele z tych odpowiedzi.

Usunięcie pliku dziennika (poprzez jego obcinanie, odrzucanie, kasowanie itp.) spowoduje przerwanie łańcucha kopii zapasowej i uniemożliwi przywrócenie do dowolnego punktu w czas od ostatniej pełnej, różnicowej lub transakcji kopii zapasowej dziennika, aż do następnej pełnej lub różnicowej kopii zapasowej.

Z artykułu Microsoft naBACKUP

Zalecamy, aby nigdy nie używać NO_LOG ani TRUNCATE_ONLY do ręcznego obcinanie dziennika transakcji, ponieważ powoduje to przerwanie łańcucha dziennika. Do następny pełny lub różnicowy backup bazy danych, Baza Danych nie jest zabezpieczony przed awarią mediów. Używaj ręcznego obcinania logów tylko w bardzo specjalne okoliczności i natychmiast tworzyć kopie zapasowe danych.

Aby tego uniknąć, wykonaj kopię zapasową pliku dziennika na dysk przed zmniejszeniem go. Składnia wyglądałaby mniej więcej tak:

BACKUP LOG MyDatabaseName 
TO DISK='C:\DatabaseBackups\MyDatabaseName_backup_2013_01_31_095212_8797154.trn'

DBCC SHRINKFILE (N'MyDatabaseName_Log', 200)
 9
Author: Rachel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-27 15:47:28

Dziennik transakcji SQL Server musi być odpowiednio utrzymywany, aby zapobiec jego niepożądanemu wzrostowi. Oznacza to uruchamianie kopii zapasowych dziennika transakcji wystarczająco często. Nie robiąc tego, ryzykujesz, że dziennik transakcji stanie się pełny i zacznie rosnąć.

Oprócz odpowiedzi na to pytanie polecam lekturę i zrozumienie dziennika transakcji common mitów. Odczyty te mogą pomóc zrozumieć dziennik transakcji i zdecydować, jakich technik użyć, aby go" wyczyścić": {]}

Od 10 najważniejsze mity dziennika transakcji SQL Server:

Mit: mój serwer SQL jest zbyt zajęty. Nie chcę tworzyć kopii zapasowych dziennika transakcji SQL Server

Jedną z największych intensywnych operacji w SQL Server jest Zdarzenie auto-grow pliku dziennika transakcji online. Nie wykonując wystarczająco często kopii zapasowych dzienników transakcji, dziennik transakcji online stanie się pełny i będzie musiał się rozrastać. Domyślny rozmiar wzrostu to 10%. Im bardziej ruchliwa jest baza danych, im szybciej dziennik transakcji online będzie rosnąć, jeśli nie zostaną utworzone kopie zapasowe dziennika transakcji Tworzenie kopii zapasowej dziennika transakcji SQL Server nie blokuje dziennika transakcji online, ale ma miejsce zdarzenie automatycznego wzrostu. Może zablokować całą aktywność w dzienniku transakcji online

Od mity z dziennika transakcji:

Mit: regularne kurczenie się logów to dobra praktyka konserwacji

FALSE. Wzrost logów jest bardzo drogi, ponieważ nowy kawałek musi zostać wyzerowany. Cała aktywność zapisu zatrzymuje się w tej bazie danych, dopóki zerowanie nie zostanie zakończone, a jeśli zapis na dysku jest powolny lub rozmiar automatycznego wzrostu jest duży, ta pauza może być ogromna i użytkownicy zauważą. To jeden z powodów, dla których chcesz uniknąć wzrostu. Jeśli zmniejszysz dziennik, będzie on ponownie rosnąć i po prostu marnujesz działanie dysku na niepotrzebną grę shrink-and-grow-again

 9
Author: McRobert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 10:30:39

Ta technika, którą zaleca John, nie jest zalecana, ponieważ nie ma gwarancji, że baza danych zostanie dołączona bez pliku dziennika. ZMIEŃ bazę danych z pełnej na prostą, Wymuś punkt kontrolny i odczekaj kilka minut. Serwer SQL wyczyści dziennik, który można następnie zmniejszyć za pomocą pliku DBCC SHRINKFILE.

 8
Author: mrdenny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-06 22:26:43

Najpierw sprawdź model odzyskiwania bazy danych. Domyślnie SQL Server Express Edition tworzy bazę danych do prostego odzyskiwania model (o ile się nie mylę).

Backup Log DatabaseName With Truncate_Only:

DBCC ShrinkFile(yourLogical_LogFileName, 50)

SP_helpfile wyświetli nazwę pliku logu.

Zobacz:

odzyskiwanie z pełnego dziennika transakcji w bazie danych SQL Server

Jeśli twoja baza danych jest w pełnym modelu odzyskiwania i jeśli nie wykonujesz kopii zapasowej TL, to zmień to na proste.

 5
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 10:04:12

Użyj polecenia DBCC ShrinkFile ({logicalLogName}, TRUNCATEONLY). Jeśli jest to testowa baza danych i próbujesz zaoszczędzić / odzyskać miejsce, pomoże to.

Pamiętaj jednak, że dzienniki TX mają rodzaj minimalnego / ustalonego rozmiaru, do którego dorosną. W zależności od modelu odzyskiwania możesz nie być w stanie zmniejszyć dziennika - jeśli w całości i nie wystawiasz kopii zapasowych dziennika TX dziennik nie może być zmniejszony - będzie rosnąć na zawsze. Jeśli nie potrzebujesz kopii zapasowych dzienników TX, Zmień model odzyskiwania na Simple .

Oraz pamiętaj, nigdy pod żadnym pozorem nie usuwaj pliku dziennika (LDF)! Będziesz miał prawie natychmiastowe uszkodzenie bazy danych. Gotowane! Zrobione! Utracone dane! Jeśli pozostawiony "nienaprawiony" główny plik MDF może zostać trwale uszkodzony.

Nigdy nie usuwaj dziennika transakcji-stracisz dane! Część danych znajduje się w Dzienniku TX (niezależnie od modelu odzyskiwania)... jeśli odłączysz i" zmienisz nazwę " pliku dziennika TX, który skutecznie usunie część bazy danych.

Dla tych, którzy mają usunięto Dziennik TX możesz chcieć uruchomić kilka poleceń checkdb i naprawić uszkodzenie, zanim stracisz więcej danych.

Sprawdź posty na blogu Paula Randala na ten temat, złe rady.

Również ogólnie nie używaj shrinkfile na plikach MDF, ponieważ może poważnie fragmentować dane. Sprawdź jego sekcję złe Porady, aby uzyskać więcej informacji ("dlaczego nie powinieneś zmniejszać plików danych")

[1]} zajrzyj na stronę Paula - on omawia te właśnie pytania. W zeszłym miesiącu on wiele z tych kwestii omówił w swojej serii "mit A Day".
 5
Author: ripvlan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 10:17:11

Aby obciąć plik dziennika:

  • Kopia zapasowa bazy danych
  • odłącz bazę danych, używając Enterprise Manager lub wykonując : Sp_DetachDB [DBName]
  • Usuń plik dziennika transakcji. (lub zmień nazwę pliku, na wszelki wypadek)
  • ponownie załącz bazę danych używając: Sp_AttachDB [DBName]
  • Po dołączeniu bazy danych tworzony jest nowy plik dziennika transakcji.

Aby zmniejszyć dziennik plik:

  • Backup log [DBName] with No_Log
  • Zmniejsz bazę danych o:

    Korzystanie z Enterprise manager :- Kliknij prawym przyciskiem myszy na bazie danych, wszystkie zadania, zmniejsz bazę danych, pliki, wybierz plik dziennika, OK.

    Używanie T-SQL :- Dbcc Shrinkfile ([Log_Logical_Name])

Logiczną nazwę pliku dziennika można znaleźć, uruchamiając sp_helpdb lub przeglądając właściwości bazy danych w Enterprise Manager.

 4
Author: Leo Moore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-14 18:44:25

Z mojego doświadczenia na większości serwerów SQL nie ma kopii zapasowej dziennika transakcji. Pełne kopie zapasowe lub kopie różnicowe są powszechną praktyką, ale kopie zapasowe dziennika transakcji są naprawdę rzadkie. Tak więc plik dziennika transakcji rośnie w nieskończoność(do momentu zapełnienia dysku). W tym przypadku model odzyskiwania powinien być ustawiony na " simple ". Nie zapomnij też zmodyfikować systemowych baz danych "model" i "tempdb".

Kopia zapasowa bazy danych "tempdb" nie ma sensu, więc model odzyskiwania ten db powinien być zawsze "prosty".

 4
Author: shmia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-23 16:41:23
  1. Zrób kopię zapasową pliku MDB.
  2. Stop SQL services
  3. Zmień nazwę pliku dziennika
  4. Uruchom serwis

(system utworzy nowy plik dziennika.)

Usuń lub przenieś zmieniony plik dziennika.

 4
Author: Ibrahim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 10:18:30

Spróbuj tego:

USE DatabaseName

GO

DBCC SHRINKFILE( TransactionLogName, 1)

BACKUP LOG DatabaseName WITH TRUNCATE_ONLY

DBCC SHRINKFILE( TransactionLogName, 1)

GO 
 2
Author: Muhammad Imran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-01 15:16:50

Baza danych → kliknij prawym przyciskiem myszy Właściwości → Plik → Dodaj inny plik dziennika o innej nazwie i ustaw ścieżkę tak samo jak stary plik dziennika o innej nazwie.

Baza danych automatycznie pobiera nowo utworzony plik dziennika.

 2
Author: Shashi3456643,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 10:27:15
  1. Backup DB
  2. Detach DB
  3. Zmień nazwę pliku dziennika
  4. Załącz DB (podczas załączenia Usuń nazwę .ldf (plik dziennika).Wybierz go i usuń, naciskając przycisk Usuń)
  5. zostanie odtworzony nowy plik dziennika
  6. Usuń przemianowany plik dziennika.

To zadziała, ale zaleca się najpierw wykonanie kopii zapasowej bazy danych.

 1
Author: gautam saraswat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-05 23:20:39

Przykład:

DBCC SQLPERF(LOGSPACE)

BACKUP LOG Comapny WITH TRUNCATE_ONLY

DBCC SHRINKFILE (Company_log, 500)

DBCC SQLPERF(LOGSPACE)
 0
Author: Lakshmanan From INDIA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 10:10:14

Zdarzyło się to u mnie, Gdzie plik dziennika bazy danych miał 28 GBs.

Co można zrobić, aby to zmniejszyć? W rzeczywistości pliki dziennika to te dane plików, które serwer SQL Przechowuje, gdy miała miejsce transakcja. Dla transakcji do przetworzenia SQL server przydziela strony dla tego samego. Ale po zakończeniu transakcji, nie są one zwolnione nagle nadzieję, że nie może być transakcja zbliża się jak ta sama. To trzyma przestrzeń.

Krok 1: Najpierw uruchom to polecenie w zapytaniu bazy danych checkpoint

Krok 2: Kliknij prawym przyciskiem myszy na bazie danych Zadanie> Back up Wybierz typ kopii zapasowej jako dziennik transakcji Dodaj adres docelowy i nazwę pliku, aby zachować dane kopii zapasowej (.bak)

Powtórz ten krok jeszcze raz i w tym czasie nadaj inną nazwę pliku

Tutaj wpisz opis obrazka

Krok 3: Teraz przejdź do bazy danych Kliknij prawym przyciskiem myszy na bazie danych

Tasks> Shrinks> Files Wybierz typ pliku jako dziennik Shrink action as release unused spacja

Tutaj wpisz opis obrazka

Krok 4:

Sprawdź swój plik dziennika zwykle w SQL 2014 można to znaleźć w

C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014EXPRESS\MSSQL \ DATA

W moim przypadku jego zmniejszenie z 28 GB do 1 MB

 0
Author: Mahendra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-02 15:22:57

DB Transaction Log Shrink to min size :

  1. Kopia zapasowa: dziennik transakcji
  2. Shrink files: Transaction log
  3. Kopia zapasowa: dziennik transakcji
  4. Shrink files: Transaction log

Wykonałem testy na kilku liczbach DBs: ta sekwencja działa .

Zwykle kurczy się do 2MB .

Lub skryptem:

DECLARE @DB_Name nvarchar(255);
DECLARE @DB_LogFileName nvarchar(255);
SET @DB_Name = '<Database Name>';               --Input Variable
SET @DB_LogFileName = '<LogFileEntryName>';         --Input Variable
EXEC 
(
'USE ['+@DB_Name+']; '+
'BACKUP LOG ['+@DB_Name+'] WITH TRUNCATE_ONLY ' +
'DBCC SHRINKFILE( '''+@DB_LogFileName+''', 2) ' +
'BACKUP LOG ['+@DB_Name+'] WITH TRUNCATE_ONLY ' +
'DBCC SHRINKFILE( '''+@DB_LogFileName+''', 2)'
)
GO
 -1
Author: Peter Nazarov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-11 10:51:08