KB4092554 – FIX: dochází k chybám 627 nebo 12324, když jsou transakce mezi databázemi povýšeny na distribuované transakce ve skupině dostupnosti SQL serveru.

Příznaky

Předpokládejme, že vytvoříte skupinu dostupnosti pomocí klauzule with DTC_SUPPORT = PER_DB na serveru Microsoft SQL Server. Při pokusu o provedení příkazu Save Transaction v transakčním nebo systémově uložených procedurách , jako je sp_executesql,se zobrazí jedna z následujících chybových zpráv:

Msg 627, úroveň 16, stav 0, line lineNumber V distribuovaných transakcích nelze použít operaci uložit. Msg 12324, úroveň 16, stav 100, line lineNumber Distribuované transakce nejsou podporované u paměťově optimalizovaných tabulek. Chyba: 3933, závažnost: 16, stav: 1. Transakci nelze převést na distribuovanou transakci, protože v této transakci je aktivní bod uložení.

Příčina

Pokud je u databáze ve skupině dostupnost vždy nastavená možnost DTC_SUPPORT = PER_DB, bude transakce povýšena na transakci MSDTC v systému SQL Server 2016 SP2 a SQL Server 2017. V transakcích MSDTC se nevztahují omezení, například ukládání bodů nelze použít, protože paměťově optimalizované tabulky nelze použít.

V některých situacích se transakce mezi databázemi nevyskytují, protože uživatelé mají transakce zahrnující dvě uživatelské databáze, ale protože transakce zahrnují aktuální databázi a systémové databáze (Master, tempdb, model a databáze systémových prostředků). Vzhledem k tomu, že systémová databáze prostředků je ve skutečnosti jenom pro čtení, není nutné podporovat transakce MSDTC, pokud transakce mezi databázemi zahrnuje systémové databáze prostředků, ale ne jiné systémové databáze.

Řešení

Oprava zavedená v této verzi KB vynechává promoakci na transakce koordinátoru MSDTC, pokud jsou databáze systémových prostředků a databáze uživatelů, které jsou součástí skupiny dostupnosti povolené pro PER_DB DTC, součástí transakce mezi databázemi ve stejné instanci systému SQL Server.

Pokud je tedy původní příčina chyb uvedená výše uvedena v křížových transakcích týkajících se systémové databáze prostředků, tato oprava ji zaznamená. Může se stát, že uživatel uvidí výše uvedené chyby se stejnou příčinou. Následující seznam obsahuje podmínky, za kterých se tato oprava týká:

  • Databáze je součástí skupiny Always On Availability Enabled s DTC_SUPPORT = PER_DB.

  • Transakce mezi databázemi zahrnuje tuto databázi a databázi systémových prostředků ve stejné instanci systému SQL Server.

  • V křížové transakci v databázi se používá ukládání transakcí nebo se týká paměťově optimalizovaných tabulek.

Taková transakce by nefungovala, aniž by byla tato oprava uvedená výše. V této opravě by měla tato transakce pokračovat.

Poznámka: Tato oprava řeší transakce mezi databázemi, které zahrnují databázi systémových prostředků, ale jakákoli transakce křížových databází, která zahrnuje uživatelské databáze a obsahuje příkaz Uložit transakci , se nezdaří a musí být přepsána.

Tento problém je opravený v následující kumulativní aktualizaci SQL serveru:

Kumulativní aktualizace 7 pro SQL Server 2017       

Kumulativní aktualizace 1 pro SQL Server 2016 SP2

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:

Nejnovější kumulativní aktualizace pro SQL Server 2017

Nejnovější kumulativní aktualizace pro SQL Server 2016

Další informace

Další informace o DTC_SUPPORT = PER_DB, paměť optimalizované tabulky, uložení transakce najdete na následujících odkazech.

Databázové transakce ve stejné instanci systému SQL Server : Tato částodkazuje nahttps://docs.Microsoft.com/en-US/SQL/Database-Engine/Availability-Groups/Windows/Transactions-Always-On-Availability-and-Database-mirroring?View=SQL-Server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instancepaměťově optimalizované tabulky sodkazem na https://docs.Microsoft.com/en-US/SQL/Relational-databases/In-Memory-OLTP/Transactions-with-memory-Optimized-Tables?View=SQL-Server-2017#limitationsUložit transakci této části na https://docs.Microsoft.com/en-US/SQL/t-SQL/Language-Elements/SAVE-TRANSACTION-Transact-SQL?View=SQL-Server-2017#remarks

https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

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.

Odkazy

Informace o terminologii , kterou Microsoft používá k popisu aktualizací softwaru.

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 překladu?

Co ovlivnilo váš názor?

Máte další zpětnou vazbu? (Nepovinné)

Děkujeme za váš názor!

×