Platí pro
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)

Příznaky

Pokud používáte zrcadlení databáze v Microsoft SQL serveru 2012 nebo Microsoft SQL serveru 2014, může dojít k zavolání podmínky Assert a zrcadlení databáze do stavu pozastaveno.

Příčina

K tomuto problému dochází, protože při přidělení nové stránky obdrží SQL Server na nové stránce zámek X. SQL Server vloží hobt_id (halda nebo B-stromové ID), do kterého nová stránka patří do žádosti o zámek. SQL Server ale nemůže hobt_id do protokolu zrcadlení a výsledky se můžou lišit mezi primárním a zrcadlovým chováním. Popis se dá podrobně vysvětlit takto:

  1. T1 Držte zámek IX na stránce P1.

  2. T2: stránka se dělí na P1, přidělí novou stránku P2, použije se zde systémová transakce TX. Do protokolu zrcadlení SQL Server neuvedl hobt_id.

  3. Pomocí zámku uzamkne migrace pro T1 přesunutí zámku z P1 na P2.

  4. TX potvrzeno: T2 může použít stránku P2 a T2 získá další zámek IX na stránce P2.

  5. T1 potvrzeno: T2 je jediný, kdo má zámek IX v P2.

  6. Po šarži vložení dojde na primárním T2 k eskalaci zámku, ale na zrcadlu během Eskalace zámku, T2 neuvolnil zámek IX.

  7. Po odstranění šarží se stránka P2 vyprázdní a je navrácena.

  8. T3 potřebuje novou stránku a stane se mu přidělit hodnota P2, vyžaduje proto zámek X, ale na zrcadle se tento krok nezdařil kvůli kroku 6.

V důsledku toho krok 6 neuvolní zámek IX, protože hobt_id v bloku zámku je nesprávný. Tento nesprávný hobt_id v kroku 2 spadá a z toho důvodu SQL Server neumísťuje hobt_id do protokolu zrcadlení. obvykle se vám nezobrazuje žádný problém, protože v kroku 2 TX je velmi krátké a blok zámku s nesprávným hobt_id bude při potvrzení uvolněn. Z důvodu zámku migrace v Step3 a v následujících krocích (4 a 5) se ale tento blok zámku s nesprávným hobt_id zachová a konečně to způsobí problém. Primární nemá tento problém, protože používá správný hobt_id v kroku 2. Ale záznam protokolu nemá správný hobt_id.

Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace SQL serveru:

Alternativní řešení

Problém vyřešíte tak, že znovu inicializujete zrcadlo a ukončíte tak stav pozastaveno.

Stav

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.