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

Jelenségek

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

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

A probléma oka

Ha egy AlwaysOn rendelkezésre állási csoportban lévő adatbázis engedélyezve van a WITH DTC_SUPPORT = PER_DB esetében, ha egy tranzakció több adatbázist is érint, a tranzakció msdTC-tranzakcióra lépteti elő SQL Server 2016 SP2 és SQL Server 2017-ben. Az MSDTC-tranzakciókra korlátozások vonatkoznak, például a mentési pontok nem használhatók, a memóriaoptimalizált táblák nem használhatók.

Bizonyos esetekben az adatbázisközi tranzakciók nem azért történnek, mert a felhasználók két felhasználói adatbázist érintő tranzakciókkal rendelkeznek, hanem azért, mert a tranzakciók az aktuális adatbázist és rendszeradatbázisokat (master, tempdb, modell, rendszererőforrás-adatbázis) foglalják magukban. Mivel a rendszererőforrás-adatbázis valójában csak olvasható, nem szükséges előléptetni az MSDTC-tranzakcióra, ha egy adatbázisközi tranzakció a rendszererőforrás-adatbázist érinti, más rendszeradatbázisokat azonban nem. 

Megoldás

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

Ezért ha a fent felsorolt hibák eredeti oka a rendszererőforrás-adatbázist érintő adatbázisközi tranzakció, ez a javítás megoldja azt. Előfordulhat, hogy a felhasználó ugyanazzal a mögöttes okkal látja a fent felsorolt hibákat. Az alábbiakban felsoroljuk azokat a feltételeket, amelyek mellett ez a javítás érvényes:

  • Az adatbázisok a WITH DTC_SUPPORT = PER_DB engedélyezett Always On rendelkezésre állási csoport részei.

  • Az adatbázisközi tranzakció magában foglalja ezt az adatbázist és a rendszererőforrás-adatbázist ugyanabban a SQL Server példányban.

  • A rendszer az adatbázisközi tranzakción belül a SAVE TRANSACTION tranzakciót használja, vagy memóriaoptimalizált táblákat használ.

Az ilyen tranzakció a fent felsorolt hibákkal hiúsulna meg a javítás nélkül. 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ázisközi tranzakciókat kezeli, de a felhasználói adatbázisokat és a SAVE TRANSACTION utasítást tartalmazó adatbázisközi tranzakciók továbbra is sikertelenek lesznek, és újra kell írni őket.

Ezt a problémát az alábbi összegző frissítésben javítottuk SQL Server esetében:

A SQL Server minden új összegző frissítése tartalmazza az összes gyorsjavítást és az előző összegző frissítésben szereplő összes biztonsági javítást. Tekintse meg a SQL Server legújabb összegző frissítéseit:

További információ

A DTC_SUPPORT = PER_DB, a memóriaoptimalizált táblák és a SAVE TRANSACTION értékről az alábbi hivatkozásokon talál további információt.

Az ugyanazon SQL Server példányon belüli adatbázis-tranzakciók ezt a részt 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-instancememóriaoptimalizált táblákhoz csatoljákhttps://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsSAVE TRANSACTION (TRANZAKCIÓ MENTÉSE) összekapcsolja ezt a részt a 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 a probléma „A következőkre vonatkozik:” részben felsorolt Microsoft-termékekre vonatkozik.

Hivatkozások

Ismerje meg a Microsoft által a szoftverfrissítések leírására használt terminológiát .

További segítségre van szüksége?

További lehetőségeket szeretne?

Fedezze fel az előfizetés előnyeit, böngésszen az oktatóanyagok között, ismerje meg, hogyan teheti biztonságossá eszközét, és így tovább.