Príznaky
Pri použití databázy zrkadlenie v Microsoft SQL Server 2012 alebo Microsoft SQL Server 2014, môže zasiahnuť podmienky argumentu a zrkadlenie databázy vstúpi do stavu pozastavené.
Príčina
Problém sa vyskytuje, pretože pri priradení novej stránky získa SQL Server X Lock na novej strane. SQL Server umiestni hobt_id (haldy alebo B-Tree ID), ku ktorému nová strana patrí do žiadosti o uzamknutie. SQL Server však nedokáže vložiť hobt_id do zrkadlového záznamu a výsledky v rôznych problémoch uzamknutia medzi primárnym a zrkadlovým. Toto je možné podrobne vysvetliť takto:
-
T1 podržte IX Lock na strane P1.
-
T2 Ak chcete rozdeliť stránku na P1, vyhradiť novú stranu P2, tu sa používa systémová transakcia TX, je držiteľom X Lock na P2. Tu SQL Server nevložil hobt_id do zrkadlového denníka.
-
TX je migrácia uzamknutia pre T1 na presun IX Lock z P1 na P2.
-
TX spáchané, teraz T2 môže použiť stránku P2 a T2 získať ďalšie IX Lock na strane P2.
-
T1 dopustil, teraz T2 je jediný, kto má IX Lock na P2.
-
Po vložení veľkého počtu sa vyskytne Eskalácia uzamknutia, na primárnej, T2 uvoľňuje IX na P2, ale na zrkadle, počas eskalácie uzamknutia T2 neuvoľnil IX Lock.
-
Po mnohých odstránení sa strana P2 stala prázdnou a je dealokovaná.
-
T3 potrebuje novú stranu a stáva sa priradením P2, to si vyžaduje zámok X, ale na zrkadle, tento krok zlyhal z dôvodu kroku 6.
V zrkadle sa krok 6 nezbavuje zámku IX, pretože hobt_id v bloku uzamknutia je nesprávna. Tento nesprávny hobt_id sa zobrazuje v kroku 2 a pretože SQL Server neumiestňuje hobt_id do zrkadlového denníka. zvyčajne sa nezobrazuje žiadny problém, pretože TX v kroku 2 je veľmi krátka a blok uzamknutia s nesprávnym hobt_id sa uvoľní, keď sa dopustí. Z dôvodu uzamknutia migrácie v Krok3 a nasledujúcich krokov (4 a 5) sa však tento blok uzamknutia s nesprávnou hobt_id zachová a nakoniec problém spôsobuje. Primárna nemá tento problém, pretože v kroku 2 používa správny hobt_id. Záznam denníka však nemá správnu hobt_id.
Riešenie
Tento problém bol najskôr vyriešený v nasledujúcej kumulatívnej aktualizácii SQL servera.
Kumulatívna aktualizácia 1 pre SQL Server 2014 /en-us/help/2931693
Kumulatívna aktualizácia balíka 9 pre SQL Server 2012 SP1 /en-us/help/2931078
Každá nová Kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchlych opráv a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúcej kumulatívnej aktualizácie. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:
Alternatívne riešenie
Ak chcete problém obísť, znova inicializovať zrkadlo na ukončenie pozastaveného stavu.
Stav
Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.