Simptomai
Kai naudojate duomenų bazės dubliavimą "Microsoft SQL Server" 2012 arba "Microsoft SQL Server 2014", galite paspausti teigti sąlygą ir duomenų bazės į sulaikytą būseną.
Priežastis
Ši problema iškyla dėl to, kad skirstydama naują puslapį, "SQL Server" gauna X užraktą naujame puslapyje. SQL serveris sukurs hobt_id (krūvos arba B-Tree ID), į kurį naujas puslapis priklauso užrakto užklausoje. Tačiau "SQL Server" negali įtraukti hobt_id į veidrodinį atspindį ir sukelia skirtingą užrakto veikimą tarp pirminio ir veidrodžio. Tai galima išsamiai paaiškinti taip:
-
T1 turi IX užraktą puslapyje P1.
-
T2 ar puslapis padalytas į P1, priskirti naują puslapį P2, čia naudojamas sistemos operacijų TX, ji turi X užraktą P2. Čia SQL serveris nepateikė hobt_id atspindinti žurnalų.
-
TX arba užrakinti perkėlimą, skirtą T1, kad perkeltumėte IX užraktą iš P1 į P2.
-
TX padarytas, dabar T2 gali naudoti Page P2, ir T2 gauti kitą IX užrakinti puslapyje P2.
-
T1 įvykdytas, dabar T2 yra vienintelis, turintis IX užraktą P2.
-
Po daug įterpimo, yra užrakto perskyrimo įvyksta, pirminio, T2 išleidžia IX ant P2, bet veidrodis, metu užrakinti eskalavimo metu, T2 nepaleido IX užrakto.
-
Po daug naikinimo Page P2 tapo tuščias ir yra Deal.
-
T3 turi būti naujas puslapis ir taip nutinka, kad būtų galima priskirti P2, tam reikia X užrakto, tačiau veidrodis Šis veiksmas nepavyko dėl 6 veiksmo.
Veidrodis 6 veiksmu neatleidžia IX šliuzo, nes blokinio bloko hobt_id neteisinga. Ši neteisinga hobt_id gaunama atliekant 2 veiksmą ir dėl to, kad SQL serveris nepateikia hobt_id veidrodinio Atspindinimo žurnalui. paprastai nematote jokių problemų, nes TX 2 veiksme yra labai trumpas, o užrakinimo blokas su neteisingu hobt_id bus išleistas. Tačiau dėl "3 žingsnis" blokavimo perkėlimo ir toliau nurodytų veiksmų (4 ir 5) Šis blokavimo blokas su neteisingais hobt_id išlieka ir galiausiai sukelia problemą. Pirminis neturi šios problemos, nes atliekant 2 veiksmą naudojamas teisingas hobt_id. Tačiau žurnalų įraše nėra teisingos hobt_id.
Sprendimas
Problema pirmą kartą buvo išspręsta šį kaupiamąjį naujinimą SQL serverio.
Kaupiamasis naujinimas 1 SQL serverio 2014 /en-us/help/2931693
Kaupiamasis naujinimas 9 SQL serverio 2012 SP1 /en-us/help/2931078
Kiekvienas naujas Kaupiamasis naujinimas, skirtas "SQL Server", yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio kaupiamojo naujinimo. Peržiūrėkite naujausius kaupiamuosius SQL serverio naujinimus:
Sprendimas
Norėdami išspręsti šią problemą, iš naujo inicijuoti veidrodį, kad būtų nutraukta sulaikyta būsena.
Statusą
"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema.