Symptomer
Når du bruker databasespeiling i 2012 for Microsoft SQL Server eller Microsoft SQL Server-2014, kan du treffer en assert betingelse og databasespeiling går inn i hvilemodus.
Årsak
Dette problemet oppstår fordi ved tildeling av en ny side, henter SQL Server en X-lås på den nye siden. SQL Server vil plassere hobt_id (Heap eller B-tre-ID) som tilhører den nye siden i Lås-forespørselen. SQL Server kan imidlertid legge til hobt_id i speiling logg og resultater i forskjellige Lås oppførsel fra primært og speil.
Dette kan forklares i detalj som følger:
-
T1 holder en IX lås på Page P1.
-
T2 gjør en side som er delt på P1, tildele en ny side P2, en Systemtransaksjon TX brukes her, og den inneholder en X-lås på P2. Her SQL Server ikke har lagt til hobt_id i loggen for speiling.
-
TX har en lås migrering for T1 flytte IX-Lås fra P1 til P2.
-
TX utført, nå T2 kan bruke Page P2 og T2 får tak i en annen IX lås på P2-siden.
-
Utført T1, T2 nå er den eneste som innehar en IX lås på P2.
-
Etter at du har mye å sette inn, oppstår en lås Opptrapping, på primært T2 utgir IX på P2, men på speilet, under Lås eskalering T2 låse ikke IX.
-
Etter mye sletting, Page P2 ble tom og er er fradelt.
-
T3 trenger en ny side, og det skjer ikke tildele P2, dette krever en X-Lås, men på speilet, vil dette trinnet som mislyktes på grunn av trinn 6.
På speilet frigjør trinn 6 ikke låsen IX fordi hobt_id i Lås-blokken er ugyldig. Denne feil hobt_id kommer under trinn 2, og på grunn av SQL Server plasserer du hobt_id i loggen for speiling.
Vanligvis ser du ikke et problem fordi det er svært kort, TX i trinn 2, og vil bli utgitt Lås-blokk med feil hobt_id når det utføres. Imidlertid på grunn av låsen på nytt i step3 og følgende trinn (4 og 5), denne Lås blokk med feil hobt_id beholdes og til slutt som forårsaker problemet.
Primært har ikke dette problemet fordi den bruker en riktig hobt_id i trinn 2. Men loggposten er ikke riktig hobt_id.
Oppløsning
Problemet ble først løst i den følgende kumulative oppdateringen av SQL Server.
Samleoppdatering 1 for SQLServer-2014/en-us/help/2931693
Kumulativ oppdatering 9 for SQL Server 2012 SP1/en-us/help/2931078
Hver nye kumulative oppdateringen for SQL Server inneholder alle hurtigreparasjonene og alle sikkerhetsreparasjoner som fulgte med den forrige kumulative oppdateringen. Sjekk ut de nyeste kumulative oppdateringene for SQL Server:
Løsningen
Hvis du vil omgå problemet, initialiseres på nytt speil for å avslutte stoppet status.
Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".