Symptomy
Rozpatrzmy następujący scenariusz:
-
Korzystasz z programu Microsoft SQL Server 2014 lub Microsoft SQL Server 2012 z dodatkiem Service Pack 2 (SP2) na serwerze obsługującym replikę pomocniczą grupy dostępności w ramach uaktualnienia stopniowego.
-
Do instalacji programu SQL Server została zastosowana jedna z następujących aktualizacji:
-
SQL Server 2014 — Zbiorcza aktualizacja 5
-
SQL Server 2012 z dodatkiem Service Pack 2 aktualizacja zbiorcza 4
-
SQL Server 2012 z dodatkiem Service Pack 2 aktualizacja zbiorcza 3
Ważne Poprawka opisana w tym artykule zastępuje te zbiorcze aktualizacje. Nie instaluj tych aktualizacji, jeśli jeszcze tego nie zrobiono.
-
-
Aby zakończyć instalowanie aktualizacji zbiorczej, ponownie uruchom tę replikę pomocniczą.
-
Nastąpi przejęcie awaryjne grupy dostępności, która przeniesie zaktualizowaną replikę pomocniczą do roli głównej.
W tym scenariuszu na serwerze, na którym jest uruchomiony program SQL Server i jest obecnie obsługiwana podstawowa replika grupy dostępności, może wystąpić jeden lub więcej z następujących objawów:
-
Repliki pomocnicze są zgłaszane jako "nie Synchronizuj".
-
Podczas wykonywania kwerend sys.dm_exec_requests można zauważyć sporadyczne blokowanie między sesjami użytkowników i sesją, której polecenie jest zgłaszane jako "DB_STARTUP". Możesz też zauważyć blokowanie między punktami kontrolnymi a poleceniami DB_STARTUP .
-
W dzienniku błędów programu SQL Server są zgłaszane zakleszczenia obejmujące sesję odzyskaną w jednej z baz danych dostępności. Te dzienniki są podobne do następujących: <date/time> spid<xx> Recovery is writing a checkpoint in database <dbname/dbid>. This isan informational message only. No user action is required.<date/time> spid<xx> Recovery completed for database <dbname/dbid> in <x> second(s) (analysis<x> ms, redo <x> ms, undo <x> ms.) This is an informational message only. No user action is required.…<date/time> spid<xx> Error: 1205, Severity: 13, State: 28.<date/time> spid<xx> Transaction (Process ID <xx>) was deadlocked on lock resources with anotherprocess and has been chosen as the deadlock victim. Rerun the transaction.
-
Jeśli baza danych dostępności jest włączona dla brokera usług programu Microsoft SQL Server, wiadomości w bazie danych dostępności mogą nie być przetwarzane pomyślnie. Po uruchomieniu narzędzia Śledzenie profilera, a następnie przechwyceniu zdarzenia "Broker: Message sklasyfikować" jest przechwytywane następujące zdarzenie:
9791, Broker jest wyłączony w bazie danych nadawcy
Uwaga Nie jest to problem systematyczny. Możesz zastosować te aktualizacje skumulowane w konfiguracji funkcji AlwaysOn bez występowania tego problemu. Jeśli te zbiorcze aktualizacje zostały już zastosowane, a nie zauważysz tego problemu, system nie jest narażony i te informacje nie mają zastosowania do Ciebie.
Przyczyna
Ten problem występuje, ponieważ sytuacja wyścigu zdarza się czasami między wątkami systemowymi a połączeniami użytkowników. Uniemożliwia to logikę poprawek aktualizacji zbiorczej przed uzyskaniem blokad, które są wymagane do ukończenia procesu aktualizacji.
Rozwiązanie
Aby rozwiązać ten problem, zastosuj następującą krytyczną poprawkę na żądanie (COD) :
3034679 Poprawka: zawsze włączone można zgłosić niesynchronizowane grupy dostępnościWażne Musisz zastosować tę poprawkę w wersji ChZT zamiast następujących aktualizacji zbiorczych:
-
SQL Server 2014 — Zbiorcza aktualizacja 5
-
SQL Server 2012 z dodatkiem Service Pack 2 aktualizacja zbiorcza 4
-
SQL Server 2012 z dodatkiem Service Pack 2 aktualizacja zbiorcza 3
Uwaga Jeśli te aktualizacje zbiorcze zostały już zastosowane, w celu rozwiązania tego problemu należy wykonać następujące czynności.
Obejście
Ponieważ ten problem jest spowodowany przez rywalizację między sesją użytkownika a sesją uaktualnienia do bazy danych dostępności, gdy bazy danych są przenoszone do roli podstawowej, należy wyeliminować tę rywalizację, aby umożliwić odzyskiwanie baz danych z tego stanu. Aby obejść ten problem, wykonaj następujące czynności:
-
Wypróbuj następujące metody w podanej kolejności.
Metoda 1: eliminowanie dostępu do bazy danychJeśli w bazach danych występują objawy wymienione w sekcji "Symptomy", należy użyć jednej lub obu poniższych czynności, aby wyeliminować warunek blokowania blokowania:
-
Sys.dm_exec_requests zapytań, aby zlokalizować sesje, w których występuje blokada blokowania w bazach danych dostępności. Zakończ te sesje za pomocą instrukcji Kill .
-
Wyłączanie lub zatrzymywanie aplikacji, która uzyskuje dostęp do baz danych dostępności.
Jeśli metoda 1 nie rozwiązała problemu, przejdź do metody 2.
Metoda 2: ponowne uruchamianie serwera hosta programu SQL ServerGdy dostęp do aplikacji i dostęp użytkownika są nadal wyłączone, uruchom ponownie wystąpienie programu SQL Server, w którym znajdują się bazy danych dostępności, których dotyczy problem. W tym celu wykonaj następujące czynności:
-
Wyłącz automatyczną pracę awaryjną grupy dostępności.
-
Uruchom ponownie wystąpienie, którego dotyczy problem programu SQL Server, w którym jest obsługiwana replika podstawowa.
-
Włączanie automatycznej pracy awaryjnej grupy dostępności.
-
-
Gdy odzyskane bazy danych odzyskają całkowicie, ponownie Ustanów połączenie z aplikacją i użytkownikami.
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".
Informacje
Aby uzyskać więcej informacji na temat aktualizacji skumulowanych, których dotyczy ten problem, zobacz następujące artykuły z bazy wiedzy Microsoft Knowledge Base: