Symptomy
Rozpatrzmy następujący scenariusz:
-
Korzystasz z programu Microsoft SQL Server 2016, 2014 lub 2012.
-
Masz bazę danych, która jest częścią funkcji zawsze włączonych grup dostępności.
-
W przypadku repliki podstawowej pliki bazy danych zostaną zmniejszone w celu zmniejszenia ich rozmiaru.
-
Replika podstawowa wysyła wszystkie zmiany zarejestrowane w dzienniku transakcji do repliki pomocniczej.
-
W przypadku repliki pomocniczej wątki ponownie zastosują zmiany z dziennika transakcji do bazy danych, która jest częścią grupy dostępności.
W tym scenariuszu replika jest zawieszana. Ponadto może zostać wyświetlony komunikat o błędzie podobny do następującego:
<sygnatura czasowa> spid41s: 3456; ważność: 21; stan: 1. <sygnatura czasowa> spid41s nie można wykonać ponownie rekordu dziennika (#), dla identyfikatora transakcji (#), na stronie (#), bazy danych "<dbname>" (identyfikator bazy danych: #). Strona: LSN = (#), Unit alokacji = #, Type = #. Dziennik: OpCode = #, Context #, PrevPageLSN: (#). Przywróć dane z kopii zapasowej bazy danych lub napraw bazę danych. <sygnatura czasowa> spid41s zawsze włączone przesunięcie danych grup dostępności dla bazy danych "<dbname>" zostało zawieszone z następującego powodu: "system" (identyfikator źródła 2; Ciąg źródłowy: "SUSPEND_FROM_REDO"). Aby wznowić przenoszenie danych w bazie danych, konieczne będzie ręczne wznowienie bazy danych. Aby uzyskać informacje o tym, jak wznowić bazę danych dostępności, zobacz dokumentację SQL Server — książki internetowe. <sygnatura czasowa> spid41s: 3313, ważność: 21; stan: 2. <sygnatura czasowa> spid41s podczas ponownego wykonywania operacji rejestrowania w bazie danych "<dbname>", wystąpił błąd w IDENTYFIKATORze rejestrowania (#). Zazwyczaj konkretny błąd jest wcześniej rejestrowany jako błąd w usłudze dziennik zdarzeń systemu Windows. Przywróć bazę danych z pełnej kopii zapasowej lub napraw bazę danych.
Przyczyna
Ten problem występuje, gdy w trakcie procesu ponawiania są stosowane zmiany, jeśli aparat bazy danych napotyka LSNs na stronach systemowych (GAM, PFS).
Rozwiązanie
Problem został po raz pierwszy rozwiązany w następującej zbiorczej aktualizacji programu SQL Server:
Każda nowa Zbiorcza aktualizacja programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji zbiorczej. Zalecamy pobranie i zainstalowanie najnowszych aktualizacji zbiorczych programu SQL Server:
Ta aktualizacja zapobiega występowaniu tego problemu. Jeśli problem już wystąpił, wykonaj poniższe czynności, aby ponownie dołączyć do funkcji zawsze włączonych grup dostępności:
-
Usuń istniejącą AlwaysOn replikę pomocniczą.
-
Uruchom następujące polecenie w plikach danych, których dotyczy problem, aby usunąć nieprzydzielone miejsce z bazy danych:
DBCC SHRINKFILE(<file_id>, TRUNCATEONLY)
-
Wykonaj kopię zapasową plików dziennika i bazy danych.
-
Przywracanie bazy danych i dziennika w niewłączonej replice pomocniczej.
-
Dołącz do funkcji zawsze włączonych grup dostępności.
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".
Informacje
Informacje o terminologii używanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.