Conectați-vă cu Microsoft
Conectați-vă sau creați un cont.
Salut,
Selectați un alt cont.
Aveți mai multe conturi
Alegeți contul cu care doriți să vă conectați.

Simptome

Atunci când utilizați oglindire bază de date în Microsoft SQL Server 2012 sau Microsoft SQL Server 2014, este posibil să loviți o condiție de afirmare și oglindirea bazei de date intră în starea suspendat.

Cauză

Problema apare deoarece, atunci când atribuiți o pagină nouă, SQL Server obține un X Lock pe pagina nouă. SQL Server va plasa hobt_id (teanc sau ID-ul de arborescentă) la care se află noua pagină în solicitarea de blocare. Cu toate acestea, SQL Server nu poate plasa hobt_id în Jurnalul de oglindire și are ca rezultat un comportament de blocare diferit între prima și oglinda principală. Acest lucru poate fi explicat în detaliu, după cum urmează:

  1. T1 țineți o blocare IX la pagina P1.

  2. T2 faceți o scindare de pagină pe P1, alocați o pagină nouă P2, se utilizează o tranzacție de sistem TX aici, care deține un X Lock pe P2. Aici SQL Server nu a introdus hobt_id în Jurnalul de oglindire.

  3. TX face o migrare de blocare pentru T1 pentru a muta blocarea IX de la P1 la P2.

  4. TX s-a angajat, acum T2 poate folosi pagina P2, iar T2 obține un alt blocaj IX pe pagina P2.

  5. T1 s-a angajat, acum T2 este singura persoană care deține o blocare IX pe P2.

  6. După o mulțime de inserare, se produce o escaladare a încuietorii, în versiunea principală, T2 eliberează IX la P2, dar în oglindă, în timpul escaladării încuietorii, T2 nu a lansat blocarea IX.

  7. După o mulțime de ștergere, pagina P2 a devenit goală și este dealocată.

  8. T3 are nevoie de o pagină nouă și se întâmplă să aloce P2, aceasta necesită un X Lock, dar în oglindă, acest pas nu a reușit din cauza pasului 6.

În oglindă, Pasul 6 nu eliberează blocarea IX, deoarece hobt_id din blocul de blocare este incorectă. Acest hobt_id incorect vine în timpul pasului 2 și, din cauza SQL Server, nu pune hobt_id în Jurnalul de oglindire. de obicei, nu vedeți nicio problemă, deoarece TX în pasul 2 este foarte scurt, iar blocarea cu hobt_id incorecte va fi lansată atunci când se angajează. Cu toate acestea, din cauza migrării de blocare în Pasul3 și a următoarelor pași (4 și 5), acest bloc de blocare cu hobt_id incorecte este conservat și, în cele din urmă, determină problema. Principalul nu are această problemă, deoarece utilizează o hobt_id corectă la pasul 2. Dar înregistrarea jurnalului nu are hobt_id corecte.

Fiecare nouă actualizare cumulativă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în actualizarea cumulativă anterioară. Consultați cele mai recente actualizări cumulative pentru SQL Server:

Soluție de evitare

Pentru a rezolva problema, reinițializați oglinda pentru a încheia starea suspendat.

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele

Explorați instruirea >

Fiți primul care obține noile caracteristici

Alăturați-vă la Microsoft Insider >

Au fost utile aceste informații?

Cât de mulțumit sunteți de calitatea limbajului?
Ce v-a afectat experiența?

Vă mulțumim pentru feedback!

×