Simptomi
Ja izmantojat datu bāzes spoguļošanu programmā Microsoft SQL Server 2012 vai Microsoft SQL Server 2014, var tikt parādīts nosacījums un datu bāzes spoguļošana tiek ierakstīta suspendētā stāvoklī.
Cēlonis
Problēma rodas tāpēc, ka, piešķirot jaunu lapu, SQL Server jaunā lapā iegūst X slēdzeni. SQL Server novietos hobt_id (terehons vai B-Tree ID), uz kuru jaunā lapa ir iekļauta bloķēšanas pieprasījumā. Taču SQL Server nevar ievietot hobt_id spoguļa žurnālfailā un izraisa atšķirīgu bloķēšanas darbību starp primāro un spoguli. To var detalizēti izskaidrot šādi:
-
T1 turiet IX slēdzi lapā P1.
-
T2 veiciet lappuses sadalīšanu P1, piešķiriet jaunu lappusi P2, tiek izmantots sistēmas transakciju TX, tajā ir X atslēga P2. Šeit SQL Server nedeva hobt_id spoguļošanas žurnālu.
-
TX ir bloķēšanas migrācija uz T1, lai pārvietotu IX slēdzi no P1 uz P2.
-
TX izdarīts, tagad T2 var izmantot lapu P2 un T2, lai iegūtu citu IX slēdzi lapā P2.
-
T1 ir izdarīts, tagad T2 ir vienīgais, kam ir IX atslēga P2.
-
Pēc tam, kad ir ievietotas daudzas bloķēšanas darbības, primārā, T2 izlaiž IX on P2, bet uz spoguļa bloķēšanas eskalācijas laikā T2 nelaida IX slēdzi.
-
Pēc daudzu dzēšanas lapa P2 kļuva tukša un ir atdalīta.
-
T3 nepieciešama jauna lapa, un tas notiek, lai piešķirtu P2, tam nepieciešama X bloķēšana, bet spogulis šī darbība neizdevās 6. darbības dēļ.
Spogulī 6. darbībā netiek izlaists IX bloķējums, jo hobt_id bloķēšanas blokā nav pareizs. Šī nepareizā hobt_id ir iekļauta 2. darbībā, un SQL Server dēļ neveic hobt_ids spoguļošanas žurnālfailā. parasti neredzat nekādu problēmu, jo TX 2. darbībā ir ļoti īss, un bloķēšanas bloks ar nepareizu hobt_id tiek izlaists, kad tas tiek izdarīts. Taču, tā kā bloķēšana ir Step3 un tālāk norādītās darbības (4 un 5), šis bloķēšanas bloks ar nepareizu hobt_id tiek saglabāts, un pēc tam tā izraisa problēmu. Primārajai nav šīs problēmas, jo tā izmanto pareizo hobt_id 2. darbībā. Taču ieraksta reģistrēšana nav pareiza hobt_id.
Risinājums
Šī problēma pirmo reizi tika izlabota tālāk sniegtajā SQL Server kumulatīvajā atjauninājumā.
Kumulatīvais atjauninājums 1 SQL Server 2014 /en-us/help/2931693
Kumulatīvais atjauninājums 9 SQL Server 2012 SP1 /en-us/help/2931078
Katrā jaunajā kumulatīvajā SQL Server atjauninājumā ir iekļauti visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos kumulatīvos atjauninājumus SQL Server:
Risinājums
Lai novērstu šo problēmu, atkārtoti inicializējiet spoguli, lai beigtu apturēto statusu.
Statusa
Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".