KB2938828 – POPRAVKA: Sesija preslikavanja baze podataka pokazuje suspendovano stanje u SQL Server 2012 ili SQL Server 2014

Primenjuje se na
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Simptomi

Kada koristite preslikavanje baze podataka u sistemu Microsoft SQL Server 2012 ili Microsoft SQL Server 2014, možete da pogodite uslov potvrde i preslikavanje baze podataka prelazi u suspendovano stanje.

Uzrok

Do problema dolazi zato što prilikom dodeljivanja nove stranice SQL Server dobija X katanac na novoj stranici. SQL Server će staviti hobt_id (Heap ili B-Tree ID) kojoj pripada nova stranica u zahtevu za zaključavanje. Međutim, SQL Server ne možete da stavite hobt_id u evidenciju preslikavanja, što dovodi do različitog ponašanja zaključavanja između primarne i zrcalne oblasti.

Ovo se može detaljno objasniti na sledeći način:

  1. T1 drži IX bravu na stranici P1.
  2. T2 uradi podelu stranice na P1, dodeli novu stranicu P2, sistemska transakcija TKS se koristi ovde, drži Ks bravu na P2. Ovde SQL Server nije stavio hobt_id u evidenciju preslikavanja.
  3. TKS radi migraciju zaključavanja za T1 da premesti IKS bravu sa P1 na P2.
  4. TKS izvršen, sada T2 može da koristi stranicu P2, a T2 dobija još jednu IX bravu na stranici P2.
  5. T1 počinio, sada T2 je jedini koji ima IKS bravu na P2.
  6. Nakon mnogo umetanja, dolazi do eskalacije zaključavanja, na primarnom, T2 oslobađa IKS na P2, ali na ogledalu, tokom eskalacije zaključavanja, T2 nije oslobodio IKS bravu.
  7. Nakon mnogo brisanja, stranica P2 je postala prazna i raspoređena.
  8. T3 treba novu stranicu, i dešava se da dodeli P2, to zahteva X lock, ali u ogledalu, ovaj korak nije uspeo zbog koraka 6.

Na ogledalu, korak 6 ne otpušta IX bravu jer je hobt_id u bloku zaključavanja neispravna. Ova netačna hobt_id dolazi tokom 2. koraka i zbog SQL Server ne stavlja hobt_id u evidenciju preslikavanja.
Obično ne vidite nikakav problem jer je TX u koraku 2 veoma kratak, a blok za zaključavanje sa netačnim hobt_id će biti oslobođen kada se izvrši. Međutim, zbog migracije zaključavanja u 3. koraku i sledećim koracima (4 i 5), blok zaključavanja sa netačnim hobt_id se čuva i na kraju dovodi do problema.
Primarni nema ovaj problem jer koristi ispravnu hobt_id u 2. koraku. Međutim, zapis evidencije nema ispravne hobt_id.

Rešenje

Problem je prvi put rešen u sledećoj kumulativnoj ispravci 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

Osnovni podaci o kumulativnim ispravkama za SQL Server

Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su uključene u prethodnu kumulativnu ispravku. Pogledajte najnovije kumulativne ispravke za SQL Server:

      

Privremeno rešenje

Da biste rešili problem, ponovo pokrenete preslikano da biste okončali status obustavljanja.

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku „Odnosi se na“.