Czy naprawdę muszę przechowywać pliki .LDF?

9

Każdego miesiąca tworzymy migawkę na koniec miesiąca naszej bazy danych produkcji. Te migawki na koniec miesiąca służą wyłącznie do celów sprawozdawczych, nigdy nie są na nich wstawiane, aktualizowane ani usuwane. Każda z tych migawek ma plik .MDFi .LDF.

Chcę usunąć .LDFpliki i zwolnić miejsce na serwerze. Czy są jakieś powody, dla których muszę zachować .LDFpliki?

Wyjaśnienie:

Nasza produkcyjna baza danych jest odtwarzana każdej nocy z wypakowanych plików z innego systemu. Zgłaszamy tylko z produkcyjnej bazy danych ... żadne aktualizacje nigdy nie są wykonywane.

Proces nocny :
z tego, co mogę powiedzieć ...
Każdej nocy tabele danych są obcinane
Tabele zapełniane są serią instrukcji wstawiania zbiorczego
Indeksy są przebudowywane

Michael Riley - AKA Gunny
źródło

Odpowiedzi:

16

Nie powinieneś usuwać pliku dziennika. Jeśli próbujesz ponownie dołączyć plik danych bez dziennika, SQL Server może technicznie odtworzyć go, ale istnieje kilka potencjalnych problemów, na przykład jeśli były otwarte transakcje, gdy baza danych została odłączona. W takim przypadku nastąpiłaby całkowita utrata danych.

Zajmij miejsce i nie usuwaj plików dziennika . Pytasz o to kłopotów.

Zobacz ten artykuł na temat dzienników transakcji , w szczególności część „Niewłaściwe zarządzanie logami”.

Thomas Stringer
źródło
9

Jak wspomniano w innej odpowiedzi , nie można usunąć pliku dziennika. Co możesz zrobić, to ustawić bazę danych na READ_ONLY. Po włączeniu bazy danych READ_ONLYmodyfikacje nie są dozwolone, a plik dziennika nie będzie się powiększał. Możesz zmniejszyć rozmiar pliku dziennika do minimalnego rozmiaru i osiągnąć minimalny rozmiar. Aby ustawić bazę danych, READ_ONLYuruchom następujące polecenie:

USE master;
GO
ALTER DATABASE databasename SET READ_ONLY;
GO

Możesz ponownie zmienić bazę danych READ_WRITE, wprowadzić niezbędne zmiany, a następnie ustawić ją w READ_ONLYdowolnym momencie.

Plik dziennika jest nadal wymagany do zachowania właściwości ACID bazy danych.

jgardner04
źródło
2

Faktem jest, że można utworzyć bazę danych tylko przy użyciu pliku mdf. Jest to polecenie sp_attach_single_file_db (Transact-SQL). Pamiętaj, że zostanie on usunięty w przyszłej wersji Microsoft SQL Server. Ale usunięcie plików LDF nie jest mądre. Shark ma rację „prosisz o kłopoty”. Kolejny punkt widzenia - czy twoje pliki ldf są ogromne? Jeśli tak, możesz coś z tym zrobić.

  1. Ustaw bazę danych na Prosty model odzyskiwania . Możesz to zrobić tylko wtedy, gdy nie chcesz wycofywać transakcji
  2. Zamiast tworzyć pliki MDF i LDF, utwórz plik pełnej kopii zapasowej bazy danych (.BAK). Będzie mniejszy niż MDF + LDF
Carol Baker West
źródło
-3

Oto rozwiązanie, które wymyśliłem, aby zmniejszyć pliki LDF.

  1. Odłącz bazę danych
  2. Zmień nazwę pliku LDF na * _old.ldf
  3. Załącz bazę danych
  4. Usuń referencje do brakującego LDF

Spowoduje to odtworzenie pliku LDF o rozmiarze 504 KB.

  1. Usuń * _old.ldf
  2. Opróżnij kosz

Odzyskało to znaczną ilość miejsca na dysku na serwerze. Działa to dla nas, ponieważ wszystkie te bazy danych są TYLKO statycznymi bazami raportów. W przypadku tych baz danych nigdy nie zostaną wykonane wstawki, aktualizacje ani usunięcia.

AKTUALIZACJA 2019-09-24: Tak, zgadzam się, że to naprawdę zły pomysł. Przestałem to robić prawie natychmiast. Odbudowałem wszystkie indeksy, stosując współczynnik wypełnienia równy 100. Zmniejszyłem tylko pliki .ldf. I zmieniłem wszystkie bazy danych na TYLKO DO CZYTANIA.

Michael Riley - AKA Gunny
źródło
6
Wow, to naprawdę zły pomysł. Co się stanie, jeśli baza danych nie odłączy się pomyślnie lub zostanie zgubiona lub uszkodzona w przedziale od 1 do 3? Masz przerąbane. Masz kopie ZERO swojej bazy danych.
Aaron Bertrand
3
Właściwy sposób to zrobić: 1. Zrób kopię zapasową bazy danych. 2. Przywróć go na serwerze raportowania. 3. Ustaw odzyskiwanie na proste i oznacz przywróconą kopię jako tylko do odczytu. 4. Zmniejsz ręcznie plik dziennika. Tak, w międzyczasie potrzebujesz miejsca, ale dostaniesz pracę!
Aaron Bertrand