Simptome
Luați în considerare următorul scenariu:
Rulați Microsoft SQL Server 2014 sau Microsoft SQL Server 2012 cu pachetul Service Pack 2 (SP2) pe un server care găzduiește reproducerea secundară a unui grup de disponibilitate ca parte a unui upgrade nou.
Ați aplicat una dintre următoarele actualizări instalării SQL Server:
- Actualizarea cumulativă 5 pentru SQL Server 2014
- SQL Server 2012 Service Pack 2 - Actualizare cumulativă 4
- SQL Server 2012 Service Pack 2 Actualizare cumulativă 3
Important Remedierea rapidă menționată în acest articol înlocuiește aceste actualizări cumulative. Nu instalați aceste actualizări dacă nu ați făcut deja acest lucru.
Pentru a termina instalarea actualizării cumulative, reporniți această reproducere secundară.
Nu reușiți grupul de disponibilitate care efectuează tranziția replicii secundare actualizate la rolul principal.
În acest scenariu, este posibil să vă confruntați cu unul sau mai multe dintre următoarele simptome pe serverul care rulează SQL Server și care găzduiește acum replica principală a grupului de disponibilitate:
Reproducerile secundare sunt raportate ca "FĂRĂ SINCRONIZARE".
Atunci când interogați sys.dm_exec_requests, observați blocarea intermitentă între sesiunile utilizatorilor și o sesiune a cărei comandă este raportată ca "DB_STARTUP". De asemenea, este posibil să observați blocaje între comenzile CHECKPOINT și DB_STARTUP.
Blocările care implică sesiunea care a recuperat una dintre bazele de date cu disponibilitate sunt raportate în jurnalul de erori SQL Server. Aceste jurnale seamănă cu următoarele:
<data/ora> spid<xx> Recovery is writing a checkpoint in database <dbname/dbid>. Aceasta este
Doar un mesaj informativ. Nu este necesară nicio acțiune a utilizatorului.
<data/ora> spid<xx> Recuperare finalizată pentru baza de date <dbname/dbid> în <x> secundă(s) (analiză
<x> ms, refacere <x> ms, anulare <x> ms.) Acesta este doar un mesaj informativ. Nu este necesară nicio acțiune a utilizatorului.
…
<Dată/Oră> SPID<XX> Eroare: 1205, Severitate: 13, Stare: 28.
<data/ora> spid<xx> Tranzacția (ID <proces xx>) a fost blocată la blocarea resurselor cu alta
și a fost aleasă ca victimă a impasului. Rulați din nou tranzacția.Dacă baza de date de disponibilitate este activată pentru Microsoft SQL Server Service Broker, este posibil ca mesajele din baza de date de disponibilitate să nu fie procesate cu succes. Dacă porniți instrumentul de urmărire Profiler, apoi capturați evenimentul "Broker:Message Classify", este capturat următorul eveniment:
9791, Brokerul este dezactivat în baza de date a expeditorului
Notă: Aceasta nu este o problemă sistematică. Este posibil să puteți aplica aceste actualizări cumulative la o configurare AlwaysOn fără a întâmpina această problemă. Dacă ați aplicat deja aceste actualizări cumulative și nu ați observat această problemă, sistemul nu este afectat și aceste informații nu vi se aplică.
Cauză
Această problemă apare deoarece apare uneori o condiție de cursă între firele de sistem și conexiunile utilizatorului. Acest lucru împiedică logica de corecție a actualizării cumulative să obțină blocările necesare pentru a finaliza procesul de actualizare.
Rezolvare
Pentru a rezolva această problemă, aplicați următoarea remediere rapidă critică la cerere (COD):
3034679 REMEDIERE: Grupurile de disponibilitate AlwaysOn pot fi raportate ca NESINCRONIZÂNDU-SE
Important Trebuie să aplicați această remediere rapidă COD în locul următoarelor actualizări cumulative:
- Actualizarea cumulativă 5 pentru SQL Server 2014
- SQL Server 2012 Service Pack 2 - Actualizare cumulativă 4
- SQL Server 2012 Service Pack 2 Actualizare cumulativă 3
Notă Dacă ați aplicat deja aceste actualizări cumulative, trebuie să utilizați următoarea soluție pentru a rezolva această problemă.
Soluție
Deoarece această problemă este cauzată de o dispută între sesiunea de utilizator și sesiunea de upgrade în raport cu bazele de date cu disponibilitate în timp ce bazele de date trec la rolul principal, trebuie să eliminați această dispută pentru a permite ca bazele de date să se recupereze din această stare.
Pentru a evita această problemă, urmați acești pași:
Încercați următoarele metode în ordinea specificată.
Metoda 1: Eliminați accesul la baza de dateAtunci când bazele de date întâmpină simptomele menționate în secțiunea "Simptome", utilizați unul dintre pașii următori sau ambii pași, după cum este necesar, pentru a elimina condiția de blocare a blocării:
- Interogare sys.dm_exec_requests pentru a găsi sesiunile în care apare blocarea blocării în bazele de date cu disponibilitate. Utilizați instrucțiunea KILL pentru a încheia aceste sesiuni.
- Dezactivați sau opriți aplicația care accesează bazele de date de disponibilitate.
Dacă Metoda 1 nu rezolvă problema, treceți la Metoda 2.
Metoda 2: Reporniți serverul gazdă SQL ServerCând accesul aplicațiilor și accesul utilizatorilor sunt încă dezactivate, reporniți instanța SQL Server care găzduiește bazele de date cu disponibilitate afectate. Pentru a face acest lucru, urmați acești pași:
- Dezactivați reluarea automată în caz de nereușită a grupului de disponibilitate.
- Reporniți instanța de SQL Server afectată care găzduiește replica principală.
- Activați reluarea automată în caz de nereușită a grupului de disponibilitate.
După ce bazele de date afectate își revin complet, restabiliți conectivitatea aplicației și utilizatorilor.
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft care sunt listate în secțiunea „Se aplică la”.
Referințe
Pentru mai multe informații despre actualizările cumulative care sunt afectate de această problemă, consultați următoarele articole din Baza de cunoștințe Microsoft: