Powiedzmy, dla SQLServer2008R2 i wyższych, z bazami danych w trybie pełnego odzyskiwania.
Zawsze myślałem :
Po zatwierdzeniu transakcji (COMMIT) transakcja jest zapisywana w dzienniku transakcji w pamięci RAM.
Kiedy pojawia się PUNKT KONTROLNY (po pewnym czasie i / lub niektóre transakcje i inne kryteria), transakcje między ostatnim PUNKTEM KONTROLNYM a bieżącym są zapisywane na dysku.
Po wystąpieniu dziennika kopii zapasowej dane są zapisywane w pliku MDF.
Mam rację? Niektórzy z moich kolegów mówią, że się mylę i ciężko jest znaleźć poprawną odpowiedź, nawet z BOL.
Dzięki!
sql-server
Patator
źródło
źródło
Odpowiedzi:
Niestety w odpowiedziach jest wiele błędów dotyczących działania COMMIT, więc dodam kolejny. Zobacz, jak to działa: Prezentacja we / wy SQL Servera Boba Dorra, aby uzyskać szczegółowe informacje oraz podstawy we / wy programu SQL Server 2000 . Oto jak to działa:
Wszystkie w pełni zarejestrowane zapisy danych (zmiany) zachodzą w dokładnie następującej kolejności (zobacz Zrozumienie, w jaki sposób SQL Server wykonuje zapytanie: Zapisywanie danych ):
COMMIT wykonuje następujące czynności
PUNKT KONTROLNY wykonuje następujące czynności (uproszczone), zobacz Jak działają punkty kontrolne i co jest rejestrowane :
Zapisuje inaczej w przypadku operacji minimalnie rejestrowanych, patrz Operacje, które można rejestrować minimalnie . Mniej więcej minimalnie zarejestrowane operacje działają w następujący sposób (uproszczone):
źródło
Transakcja jest zapisywana w dzienniku transakcji, a nawet zmienia stronę lub dane zgodnie z zapytaniem. Jest to tak zwane zapisywanie z wyprzedzeniem (WAL). Jeśli SQL Server ulegnie awarii podczas aktualizacji strony w pamięci, WAL zapewnia, że silnik DB może odczytać dziennik transakcji i wycofać transakcję. Jest to właściwość ACID RDBMS.
Punkt kontrolny opróżnia brudne strony z bufora na dysk. Zachowuje się trochę inaczej dla tempdb . Brudna strona to taka, która zmieniła się od czasu odczytu z dysku. Ten proces punktu kontrolnego tworzy znak w dzienniku transakcji do momentu, w którym transakcje zostały zatwierdzone. Po awarii odzyskiwanie wie, że wszystkie transakcje do tego znaku zostały popełnione. Możesz wydać punkt kontrolny ręcznie za pomocą polecenia TSQL.
Nie, po wystąpieniu dziennika kopii zapasowej SQL Server kopiuje informacje dziennika transakcji z pliku dziennika bazy danych na dysk, na którym zapisujesz kopię zapasową. Operacja tworzenia kopii zapasowej odczytuje dane z dysku i zapisuje dane na dysku.
Chciałbym, abyś przeczytał poniższe linki
Zrozumienie rejestrowania i odzyskiwania w SQL Server Wskazał już Mark
SQL Server 2008 Wewnętrzne i książka rozwiązywania problemów
Architektura i zarządzanie dziennikiem transakcji
źródło
Poniżej wyjaśnimy ci rzeczy:
Odnosić się do :
źródło