Přihlásit se pomocí účtu Microsoft
Přihlaste se nebo si vytvořte účet.
Dobrý den,
Vyberte jiný účet.
Máte více účtů.
Zvolte účet, pomocí kterého se chcete přihlásit.

Příznaky

Předpokládejme, že vytvoříte skupinu dostupnosti pomocí klauzule WITH DTC_SUPPORT = PER_DB v microsoft SQL Server. Při pokusu o spuštění příkazu SAVE TRANSACTION v transakci nebo systémové uložené procedury, jako je například sp_executesql, zobrazí se jedna z následujících chybových zpráv:

Msg 627, úroveň 16, stav 0, line LineNumber
V rámci distribuované transakce nelze použít funkci SAVE TRANSACTION.
Msg 12324, úroveň 16, stav 100, lineNumber
řádku Distribuované transakce (DTC) nejsou podporovány u tabulek optimalizovaných pro paměť.
Chyba: 3933, závažnost: 16, stav: 1.
Nelze zvýšit úroveň transakce na distribuovanou transakci, protože v této transakci je aktivní bod uložení.

Příčina

Pokud je databáze ve skupině dostupnosti AlwaysOn povolena pro with DTC_SUPPORT = PER_DB, pokud transakce zahrnuje více databází, transakce je povýšena na transakce MSDTC v SQL Server 2016 SP2 a SQL Server 2017. V transakcích MSDTC existují omezení, například uložit body nelze použít, nelze použít tabulky optimalizované pro paměť.

V některých situacích k transakcím mezi databázemi dochází ne 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 (hlavní databáze, databáze tempdb, model, databáze systémových prostředků). Vzhledem k tomu, že databáze systémových prostředků je ve skutečnosti jen pro čtení, není nutné zvýšit úroveň na transakci MSDTC, pokud transakce mezi databázemi zahrnuje databázi systémových prostředků, ale ne jiné systémové databáze. 

Řešení

Oprava zavedená v této znalostní bázi přeskočí povýšení na transakci MSDTC, pokud se databáze systémových prostředků a uživatelská databáze, která je součástí skupiny dostupnosti povolené pro PER_DB DTC, účastní transakce mezi databázemi ve stejné instanci SQL Server.

Proto pokud je původní příčinou výše uvedených chyb mezi databázovými transakcemi zahrnujícími databázi systémových prostředků, tato oprava ji vyřeší. V některých případech se uživateli můžou zobrazit výše uvedené chyby se stejnou základní příčinou. Následující seznam uvádí podmínky, za kterých se tato oprava vztahuje:

  • Databáze je součástí skupiny dostupnosti AlwaysOn s povolenou funkcí WITH DTC_SUPPORT = PER_DB.

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

  • Uvnitř transakce mezi databázemi se používá funkce SAVE TRANSACTION nebo jsou zahrnuté tabulky optimalizované pro paměť.

Taková transakce selže s chybami uvedenými výše bez této opravy. S touto opravou by taková transakce měla pokračovat.

Poznámka: Tato oprava řeší transakce mezi databázemi, které zahrnují databázi systémových prostředků, ale všechny transakce mezi databázemi, které zahrnují uživatelské databáze a obsahují příkaz SAVE TRANSACTION , stále selžou a musí být přepsány.

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

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 pro SQL Server:

Další informace

Další informace o DTC_SUPPORT = PER_DB, paměti optimalizované tabulky, SAVE TRANSACTION naleznete na následujících odkazech.

Databázové transakce v rámci stejné instance SQL Server propojují tuto část s https://learn.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-instance
tabulkou optimalizovanou pro paměť.
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsULOŽIT TRANSAKCI propojit tuto část s https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks

https://learn.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

Přečtěte si o terminologii , kterou Microsoft používá k popisu aktualizací softwaru.

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.

Komunity vám pomohou klást otázky a odpovídat na ně, poskytovat zpětnou vazbu a vyslechnout odborníky s bohatými znalostmi.

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?
Po stisknutí tlačítka pro odeslání se vaše zpětná vazba použije k vylepšování produktů a služeb Microsoftu. Váš správce IT bude moci tato data shromažďovat. Prohlášení o zásadách ochrany osobních údajů.

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

×