Accedi a Microsoft
Accedi o crea un account.
Salve,
Select a different account.
Hai più account
Scegli l'account con cui vuoi accedere.

Sintomi

Si supponga di creare un gruppo di disponibilità usando la clausola WITH DTC_SUPPORT = PER_DB in Microsoft SQL Server. Quando si tenta di eseguire un'istruzione SAVE TRANSACTION in una transazione o in stored procedure di sistema come sp_executesql, viene visualizzato uno dei messaggi di errore seguenti:

Msg 627, Livello 16, Stato 0, LineNumber
Impossibile utilizzare SAVE TRANSACTION all'interno di una transazione distribuita.
Msg 12324, Livello 16, Stato 100, LineNumber
Le transazioni distribuite (DTC) non sono supportate con tabelle ottimizzate per la memoria.
Errore: 3933, Gravità: 16, Stato: 1.
Impossibile alzare di livello la transazione a una transazione distribuita perché esiste un punto di salvataggio attivo nella transazione.

Causa

Quando un database in Always On gruppo di disponibilità è abilitato per WITH DTC_SUPPORT = PER_DB, purché una transazione riguardi più database, la transazione viene alzata di livello alla transazione MSDTC in SQL Server 2016 SP2 e SQL Server 2017. Esistono limitazioni nelle transazioni MSDTC, ad esempio non è possibile usare punti di salvataggio, non è possibile usare tabelle ottimizzate per la memoria.

In alcune situazioni le transazioni tra database non si verificano perché gli utenti hanno transazioni che coinvolgono due database utente, ma perché implicano il database corrente e database di sistema (master, tempdb, modello, database delle risorse di sistema). Poiché il database delle risorse di sistema è in realtà di sola lettura, non è necessario promuovere la transazione MSDTC se una transazione tra database coinvolge un database delle risorse di sistema ma non altri database di sistema. 

Risoluzione

La correzione introdotta in questo articolo della Knowledge Base ignora la promozione alla transazione MSDTC se il database delle risorse di sistema e un database utente che fa parte di un gruppo di disponibilità abilitato per PER_DB DTC sono coinvolti in una transazione tra database all'interno della stessa istanza di SQL Server.

Pertanto, se la causa originale degli errori elencati sopra è una transazione tra database che coinvolge il database delle risorse di sistema, questa correzione lo risolverà. A volte l'utente può visualizzare gli errori elencati sopra con la stessa causa sottostante. Di seguito sono elencate le condizioni in cui si applica questa correzione:

  • Un database fa parte di un gruppo di disponibilità Always On abilitato CON DTC_SUPPORT = PER_DB.

  • Una transazione tra database implica il database e il database delle risorse di sistema nella stessa istanza di SQL Server.

  • All'interno della transazione tra database viene usato SAVE TRANSACTION o sono coinvolte tabelle ottimizzate per la memoria.

Tale transazione non riesce con gli errori elencati sopra senza questa correzione. Con questa correzione, tale transazione dovrebbe procedere.

Nota: questa correzione riguarda le transazioni tra database che coinvolgono il database delle risorse di sistema, ma qualsiasi transazione tra database che coinvolge database utente e contiene un'istruzione SAVE TRANSACTION continuerà a non riuscire e dovrà essere riscritta.

Questo problema è stato risolto nel seguente aggiornamento cumulativo per SQL Server:

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli aggiornamenti rapidi e tutte le correzioni per la sicurezza inclusi nell'aggiornamento cumulativo precedente. Scopri gli aggiornamenti cumulativi più recenti per SQL Server:

Ulteriori informazioni

Ulteriori informazioni su DTC_SUPPORT = PER_DB, tabelle ottimizzate per la memoria, SAVE TRANSACTION sono disponibili nei collegamenti seguenti.

Le transazioni di database all'interno della stessa istanza di SQL Server collegano questa parte 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
tabelle ottimizzate per la memoria collegano questa parte a
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsCOLLEGAMENTO SAVE TRANSACTION 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

Stato

Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".

Riferimenti

Informazioni sulla terminologia utilizzata da Microsoft per descrivere gli aggiornamenti software.

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?

Grazie per il feedback!

×