Simptomi
Kada koristite zrcaljenje baze podataka u sustavu Microsoft SQL Server 2012 ili Microsoft SQL Server 2014, možda ćete pritisnuti uvjet tvrditi i zrcaljenje baze podataka u privremeno prekinuto stanje.
Uzrok
Problem se pojavljuje jer kada alokacija nove stranice, SQL Server dobije X Lock na novoj stranici. SQL Server će staviti hobt_id (hrpa ili B-stabla ID) na koje nova stranica pripada u zahtjevu za zaključavanje. Međutim, SQL Server ne može staviti hobt_id u zapisnik zrcaljenje i rezultira drugačijim ponašanjem zaključavanja između primarnog i zrcalnog prikaza. To se može detaljno objasniti na sljedeći način:
-
Na stranici P1 držite bravu IX.
-
T2 učinite stranicu razdvojen u programu P1, alociranje nove stranice P2, ovdje se koristi funkcija TX sustava, koja sadrži X Lock na servisu P2. Ovdje SQL Server nije postavio hobt_id u zapisnik zrcaljenje.
-
TX radi zaključavanje migracije za T1 za premještanje IX brave s servisa P1 na P2.
-
TX je počinio, sada T2 može koristiti stranicu P2, a T2 će dobiti još jednu bravu IX na stranici P2.
-
T1 počinjen, sada je T2 jedina osoba koja sadrži IX bravu na sustavu P2.
-
Nakon puno umetanja, u primarnoj verziji, T2 oslobađa IX na P2, ali na zrcalu tijekom blokade eskalacije, T2 nije oslobodio bravu IX.
-
Nakon puno brisanja, stranica P2 postala je prazna te se deallocuje.
-
T3 treba novu stranicu, a to se događa da biste alocirali P2, za to je potrebna brava X, ali u ogledalu ovaj korak nije uspio zbog šestog koraka.
Na zrcalu šesti korak ne oslobađa Lock IX jer je hobt_id u zaključanom bloku neispravna. Ta netočna hobt_id dolazi tijekom koraka 2 i zbog toga što SQL poslužitelj ne stavlja hobt_id u zapisnik zrcaljenja. obično se ne prikazuje problem jer je TX u drugom koraku vrlo kratak, a zaključani blok s netočnim hobt_id bit će oslobođen kada se izvrši. Međutim, zbog blokade migracije u Korak3 i sljedećih koraka (4 i 5) ovaj zaključani blok s netočnim hobt_id sačuvat će se i konačno uzrokovati problem. Primarni nema taj problem jer koristi ispravnu hobt_id u drugom koraku. No zapis zapisnika nema ispravne hobt_id.
Rješenje
Problem je prvi put riješen u sljedećem kumulativnom ažuriranju sustava SQL Server.
Kumulativno ažuriranje 1 za SQL Server 2014 /en-us/help/2931693
Kumulativno ažuriranje 9 za SQL Server 2012 SP1 /en-us/help/2931078
Svako novo Kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sve sigurnosne ispravke uključene u prethodno Kumulativno ažuriranje. Pogledajte najnovija kumulativna ažuriranja za SQL Server:
Zaobilazno rješenje
Da biste zaobišli taj problem, ponovno pokrenite ogledalo da biste prekinuli status suspendirane.
Status
Microsoft je potvrdio da se radi o problemu u Microsoftovim proizvodima navedenim u odjeljku "odnosi se na".