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
Á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 .