Příznaky

Zvažte následující scénář:

  • Do tabulky Microsoft SQL serveru 2008 nebo SQL Server 2008 R2 vložíte mnoho řádků pomocí jednoho z následujících dotazů:

    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>

    Poznámky

    • Zástupný symbol <>target_table představuje skutečný název cílové tabulky.

    • <predikát> zástupný symbol představuje skutečný predikát.

    • Zástupný symbol <source_table> představuje skutečnou zdrojovou tabulku.

  • Překročena prahová hodnota eskalace zámku tabulky.

V tomto scénáři databázový stroj nestupňování uzamkne.

Příčina

K tomuto problému dochází, protože SQL Server nepočítá interně všechny nové zámky generované operacemi INSERT. Proto se prahová hodnota pro eskalaci zámku nemusí aktivovat, když je to povinné.

Řešení

Informace o aktualizaci Service Pack pro SQL Server 2008

Tento problém vyřešíte pomocí nejnovější aktualizace Service Pack pro SQL Server 2008. Další informace najdete v následujícím článku znalostní báze Microsoft Knowledge Base:

968382 Jak získat nejnovější aktualizaci Service Pack pro SQL Server 2008

Informace o aktualizaci Service Pack pro SQL Server 2008 R2

Tento problém vyřešíte pomocí nejnovější aktualizace Service Pack pro SQL Server 2008 R2. Další informace najdete v následujícím článku znalostní báze Microsoft Knowledge Base:

2527041Jak získat nejnovější aktualizaci Service Pack pro SQL Server 2008 R2

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.Tento problém byl poprvé opraven v aktualizaci SQL Server 2008 Service Pack 2 pro SQL Server 2008. Tento problém byl poprvé opraven v SQL serveru 2008 R2 Service Pack 1 pro SQL Server 2008 R2.

Další informace

Další informace o eskalaci zámku najdete na následujícím webu Microsoft TechNet:

Obecné informace o eskalaci zámkuPokud chcete zjistit, jestli jsou zámky tabulky eskalacé, spusťte následující příkazy Transact-SQL:

USE tempdbGOCREATE TABLE x (i INT NOT NULL PRIMARY KEY)GOBEGIN TRANINSERT xSELECT TOP (40000)ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rFROM master..spt_values a, master..spt_values bORDER BYrSELECTCOUNT(*)FROM sys.dm_tran_locksWHERE request_session_id = @@SPID ROLLBACKGODROP TABLE x 

Pokud jsou zámky tabulky eskalacé, vrátí poslední příkaz SELECT hodnotu 1 nebo 2. Pokud zámky tabulky nejsou eskalacé, vrátí poslední příkaz SELECT hodnotu buď 40 066 , nebo 40 067.

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti

Projít školení >

Získejte nové funkce jako první

Připojit se k programu Microsoft Insider >

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?

Děkujeme vám za zpětnou vazbu.

×