KB4092554 – JAVÍTÁS: A 627-es vagy a 12324-es hiba lép fel, amikor az adatbázisok közötti tranzakciókat előléptetik elosztott tranzakciókká SQL Server rendelkezésre állási csoportban

Hatókör
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows

Tünetek

Feltételezzük, hogy a Microsoft SQL Server WITH DTC_SUPPORT = PER_DB záradékával hoz létre egy rendelkezésre állási csoportot. Amikor megpróbál végrehajtani egy SAVE TRANSACTION utasítást egy tranzakcióban vagy a rendszer által tárolt eljárásban (például sp_executesql), a következő hibaüzenetek egyike jelenik meg:

Megjegyzés

Msg 627, Level 16, State 0, Line LineNumber
A SAVE TRANSACTION utasítás elosztott tranzakción belül nem használható.
Msg 12324, Level 16, State 100, Line LineNumber
Az elosztott tranzakciók (DTC) nem támogatottak memóriaoptimalizált táblákkal.
Hiba: 3933, Súlyosság: 16, Állapot: 1.
A tranzakció nem léptethető elő elosztott tranzakcióvá, mert a tranzakcióban aktív mentési pont található.

Ok

Ha egy adatbázis engedélyezve van a folyamatosan működő rendelkezésre állási csoportban a WITH DTC_SUPPORT = PER_DB értékre, mindaddig, amíg a tranzakció több adatbázist érint, a tranzakció MSDTC-tranzakcióvá alakul a SQL Server 2016 SP2 és SQL Server 2017 kiadásban. Az MSDTC-tranzakciókra korlátozások vonatkoznak, például nem használhatók mentési pontok, memóriaoptimalizált táblák nem használhatók.

Bizonyos esetekben nem azért kerülnek sor, mert a felhasználóknak két felhasználói adatbázist érintő tranzakcióik történnek, hanem azért, mert a tranzakciók érintik az aktuális adatbázist és a rendszeradatbázisokat (főadatbázis, tempdb, modell, rendszererőforrás-adatbázis). Mivel a rendszererőforrás-adatbázis ténylegesen írásvédett, nem szükséges MSDTC-tranzakcióvá előléptetni, ha az adatbázisok közötti tranzakció rendszererőforrás-adatbázist érint, más rendszeradatbázisokat azonban nem.

Megoldás

Az ebben a tudásbáziscikkben szereplő javítás kihagyja az MSDTC-tranzakcióvá való előléptetést, ha a rendszererőforrás-adatbázis és egy, a PER_DB DTC számára engedélyezett rendelkezésre állási csoport részét képező felhasználói adatbázis ugyanazon a SQL Server példányon belül adatbázisok közötti tranzakcióban vesz részt.

Ezért ha a fent felsorolt hibák eredeti oka egy rendszererőforrás-adatbázist érintő adatbázisok közötti tranzakció, a javítás orvosolni fogja a problémát. Előfordulhat, hogy a felhasználó a fent felsorolt hibákat látja ugyanazzal a kiváltó okkal. Az alábbiakban felsoroljuk azokat a feltételeket, amelyek fennáll a javítás alkalmazása:

  • Az adatbázis egy folyamatosan elérhető rendelkezésre állási csoport része, amely engedélyezett, WITH DTC_SUPPORT = PER_DB.
  • Az adatbázisok közötti tranzakciók során ez az adatbázis és a rendszererőforrás-adatbázis ugyanabban az SQL Server-példányban található.
  • Az adatbázisok közötti tranzakción belül a SAVE TRANSACTION művelet van használatban, vagy memóriaoptimalizált táblák is érintettek.

Az ilyen tranzakciók a javítás nélkül a fent felsorolt hibákkal meghiúsulnának. Ezzel a javítással az ilyen tranzakciónak folytatódnia kell.

Megjegyzés: Ez a javítás a rendszererőforrás-adatbázist érintő adatbázisok közötti tranzakciókra vonatkozik, de a felhasználói adatbázisokat érintő és SAVE TRANSACTION utasítást tartalmazó adatbázisok közötti tranzakciók továbbra is sikertelenek lesznek, és újra kell írni.

Ezt a hibát az SQL Server következő összegző frissítésében javítottuk:

Az SQL Server összegző frissítéseinek ismertetése:

Az SQL Server minden új összegző frissítése tartalmazza az összes gyorsjavítást és minden biztonsági javítást, amely az előző kumulatív frissítésben szerepelt. Tekintse meg az SQL Server legújabb összegző frissítéseit:

További információ

További információ a DTC_SUPPORT = PER_DB, a memóriaoptimalizált táblákról, a SAVE TRANSACTION szolgáltatásról az alábbi linkeken található.

Az ugyanazon SQL Server példányon belüli adatbázis-tranzakciók ezt a részt a 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
A memóriaoptimalizált táblázatok összekapcsolják ezt a részt https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitations
TRANZAKCIÓ MENTÉSE Link this part to 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

Állapot

A Microsoft megerősítette, hogy ez egy olyan probléma a Microsoft-termékekben, amely az „Érintett szolgáltatás“ című szakaszban van felsorolva.

Hivatkozások

Ismerje meg a Microsoft szoftverfrissítésekkel kapcsolatos terminológiáját .