Co to jest format pliku LDF?
Plik .ldf to plik dziennika transakcji (Transaction Log File) utworzony przez Microsoft SQL Server w celu rejestrowania każdej zmiany wprowadzonej w bazie danych, zanim zmiany te zostaną zapisane na dysku. Implementuje on strategię zapisu z wyprzedzeniem (write-ahead logging): SQL Server najpierw zapisuje rekord dziennika, a następnie stosuje odpowiednią zmianę na stronach danych.
Każdy plik .ldf działa jako sparowany towarzysz głównego pliku danych .mdf. Bez sprawnego pliku dziennika baza danych nie może zostać uruchomiona; usunięcie lub utrata pliku .ldf poza kontrolowanymi procedurami może sprawić, że baza danych będzie nie do odzyskania.
Wewnętrznie dziennik jest podzielony na wirtualne pliki dziennika (VLF) - stałe segmenty, które SQL Server przydziela i wykorzystuje ponownie w sposób cykliczny. Każdy rekord dziennika posiada unikalny numer sekwencyjny dziennika (LSN), 10-bajtową wartość kodującą numer pliku, przesunięcie bloku i gniazdo w obrębie 512-bajtowego bloku dziennika. Łańcuch LSN jest tym, czym kieruje się silnik podczas odzyskiwania po awarii, aby powtórzyć zatwierdzone transakcje i cofnąć te niekompletne.
Format .ldf stanowi podstawę kilku krytycznych funkcji SQL Server:
- Odzyskiwanie po awarii - ponowne odtwarzanie lub wycofywanie transakcji w toku po nieoczekiwanym zamknięciu systemu
- Przywracanie do punktu w czasie - używane wraz z pełną kopią zapasową .bak i kopiami dziennika .trn w modelu odzyskiwania FULL
- Replikacja i Change Data Capture (CDC) - odczytywanie zatwierdzonych zmian bezpośrednio z dziennika
Format jest zastrzeżonym plikiem binarnym bez publicznie udokumentowanych sygnatur (magic bytes) i nie może być otwierany ręcznie. Narzędzia firm trzecich, takie jak ApexSQL Log lub Redgate SQL Log, mogą dekodować rekordy dziennika do celów audytu lub informatyki śledczej. Od wersji SQL Server 2017 pliki .ldf są obsługiwane identycznie w systemie Linux oraz w kontenerach Docker, obok pomocniczych plików danych .ndf.
Bezpieczeństwo
RYZYKO: MEDIUMPlik zawiera dane, nie jest wykonywalny, więc nie niesie bezpośredniego ryzyka złośliwego oprogramowania. Prawdziwe zagrożenie ma charakter operacyjny: usunięcie lub odłączenie pliku .ldf od aktywnej lub oznaczonej jako „suspect” bazy danych może spowodować utratę danych lub uniemożliwić odzyskanie bazy, a utworzenie bazy bez jej dziennika (lub z odbudowanym dziennikiem) powoduje utratę transakcji w toku. Nigdy nie edytuj ręcznie pliku .ldf. Jeśli dziennik jest ogromny, zmniejsz go w obsługiwany sposób (kopia zapasowa dziennika, a następnie DBCC SHRINKFILE), zamiast go usuwać. Dzienniki zaszyfrowane przez TDE wymagają certyfikatu/kluczy bazy danych do przywrócenia.
Szczegóły formatu
w pigułceProgramy otwierające pliki LDF
Szczegóły techniczne
specyfikacja| Kodowanie | Binarne, little-endian |
| Struktura kontenera | Sekwencja wirtualnych plików dziennika (VLF); SQL Server przydziela i wykorzystuje ponownie jednostki VLF w schemacie cyklicznym w miarę zwalniania miejsca |
| Jednostka rekordu dziennika | Rekordy dziennika o zmiennej długości pakowane w 512-bajtowe bloki dziennika |
| Identyfikator rekordu | Log Sequence Number (LSN) - 10-bajtowa wartość kodująca numer pliku dziennika, przesunięcie bloku w pliku oraz numer gniazda w bloku |
| Cykliczne ponowne użycie | Miejsce w dzienniku jest odzyskiwane i używane ponownie, gdy aktywna część nie jest już potrzebna - po punkcie kontrolnym (checkpoint) w modelu SIMPLE lub po kopii zapasowej dziennika w modelu FULL |
| Obsługa modeli odzyskiwania | Zachowanie różni się w zależności od modelu odzyskiwania SQL Server: SIMPLE (automatyczne obcinanie przy punkcie kontrolnym), BULK-LOGGED (minimalne logowanie dla operacji masowych), FULL (dziennik rośnie do momentu wykonania kopii zapasowej dziennika) |
| Sparowany plik danych | Zawsze sparowany z co najmniej jednym głównym plikiem danych `.mdf`; dodatkowe pliki danych używają rozszerzenia `.ndf` |
| Maksymalny rozmiar pliku | Do 2 TB na plik dziennika w systemach Windows NTFS/ReFS; pojedyncza baza danych może mieć wiele plików `.ldf`, każdy podlegający temu limitowi |
| Szyfrowanie | Domyślnie nieszyfrowany; szyfrowany automatycznie, gdy w bazie danych włączona jest funkcja Transparent Data Encryption (TDE) |
| Kompresja | Sam plik `.ldf` jest przechowywany bez kompresji; kopie zapasowe dziennika zapisywane w plikach `.trn` lub `.bak` mogą korzystać z kompresji kopii zapasowych SQL Server |
| Suma kontrolna / integralność | Opcjonalne wykrywanie uszkodzonych stron (torn-page detection) i sumy kontrolne stron konfigurowalne na poziomie bazy danych; silnik weryfikuje łańcuch LSN przy każdym odzyskiwaniu |
| Automatyczny wzrost | SQL Server automatycznie powiększa plik `.ldf`, gdy się zapełni; przyrost wzrostu jest konfigurowalny w MB lub procentach; nadmierny automatyczny wzrost o małe wartości powoduje fragmentację VLF i wolniejsze odzyskiwanie |
| Powiązanie z wersją wewnętrzną | Format jest powiązany z wersją silnika SQL Server i poziomem zgodności bazy danych; SQL Server 2022 używa na przykład wewnętrznej wersji bazy danych 904 |
| Obsługa platform OS | Windows (wszystkie nowoczesne wersje SQL Server); Linux i kontenery Docker (SQL Server 2017 i nowsze poprzez SQL Server on Linux) |
| Typ MIME | application/octet-stream (brak dedykowanego zarejestrowanego typu MIME dla tego formatu) |
| Dostęp bezpośredni | Nieprzeznaczony do bezpośredniego otwierania ani analizowania; dostęp uzyskiwany poprzez podłączenie do silnika SQL Server, polecenia RESTORE DATABASE lub czytniki logów firm trzecich, takie jak ApexSQL Log lub Redgate SQL Log |
| Wydano | Microsoft SQL Server (log architecture present since the Sybase-derived 4.x/6.x era, 1990s) |
| Najnowsza wersja | Format tied to the database compatibility/engine version (e.g. SQL Server 2022, internal db version 904) |
| Specyfikacja | learn.microsoft.com |
Konwersje LDF
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki LDF.