Simptomi
Kada koristite preslikavanje baze podataka u sistemu Microsoft SQL Server 2012 ili Microsoft SQL Server 2014, možete da pogodite stanje potvrde, a preslikavanje baze podataka ulazi u obustavljeno stanje.
Uzrok
Do problema dolazi zato što, prilikom dodele nove stranice, SQL Server dobija X zaključavanje na novoj stranici. SQL Server će staviti hobt_id (Heap ili B-Tree ID) kome nova stranica pripada u zahtevu za zaključavanje. Međutim, SQL Server ne može da hobt_id u evidenciji preslikavanja i rezultira različitim ponašanjem zaključavanja između primarnog i preslikane kopije. Ovo se može detaljno objasniti na sledeći na sledeći na sledeći na koji možete da objasnite:
-
T1 držite IX bravu na stranici P1.
-
T2 uradite razdeljak stranice na P1, dodelite novu stranicu P2, ovde se koristi sistemska transakcija TX, ona drži X bravu na P2. Ovde SQL Server nije stavio hobt_id evidenciji preslikavanja.
-
TX radi migraciju zaključavanja za T1 da bi premestio IX bravu sa P1 na P2.
-
TX se obavezao, sada T2 može da koristi Page P2, a T2 da dobije još jednu IX bravu na stranici P2.
-
T1 se obavezao, sada je T2 jedini koji drži IX bravu na P2.
-
Nakon mnogo umetanja, dolazi do eskalacije brave, na primarnom, T2 oslobađa IX na P2, ali na ogledalu, tokom eskalacije zaključavanja, T2 nije oslobodio IX bravu.
-
Nakon mnogo brisanja, Stranica P2 je postala prazna i dilovana je.
-
T3 je potrebna nova stranica, a dešava se da se dodeli P2, ovo zahteva X bravu, ali na ogledalu ovaj korak nije uspeo zbog koraka 6.
Na ogledalu, Korak 6 ne oslobađa IX bravu jer je hobt_id u zaključanom bloku neispravna. Ovaj netačan hobt_id dolazi tokom koraka 2 i zbog SQL Servera ne stavlja hobt_id u preslikanu evidenciju.Obično ne vidite nikakav problem jer je TX u koraku 2 veoma kratak, a blok zaključavanja sa neispravnim hobt_id će biti objavljen kada se obaveže. Međutim, zbog migracije zaključavanja u koraku3 i sledećih koraka (4 i 5), ovaj zaključani blok sa neispravnim hobt_id je očuvan i konačno izaziva problem. Primarni nema ovaj problem zato što koristi ispravan hobt_id koraku 2. Međutim, zapis evidencije nema ispravan hobt_id.
Rešenje
Problem je prvi put otklonjen u sledećoj kumulativnoj ispravki sistema SQL Server.
Kumulativna ispravka 1 za SQL Server 2014 /en-us/help/2931693
Kumulativna ispravka 9 za SQL Server 2012 SP1 /en-us/help/2931078
Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodnu kumulativnu ispravku. Pogledajte najnovije kumulativne ispravke za SQL Server:
Rešenje
Da biste to uradili, ponovo instalirajte ogledalo da biste okončali suspendovani status.
Status
Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".