Accedi con Microsoft
Accedi o crea un account.
Salve,
Seleziona un altro account.
Hai più account
Scegli l'account con cui vuoi accedere.

Sintomi

Quando si utilizza transazioni XA, Driver JDBC di Microsoft SQL Server e Microsoft SQL Server come database back-end, si potrebbero avere orfani transazioni in sospeso di SQL Server se il gestore delle transazioni si verifica un arresto anomalo o un problema di connettività.

Inoltre, si verifichi uno dei seguenti sintomi comuni:

  • Le transazioni sono in sospeso per molto tempo nell'istanza di SQL Server. Possono presentare un null - 2 l'ID di sessione nel database.

  • Le transazioni sono bloccate per lungo tempo da una transazione con un ID di sessione -2 . In questo modo un timeout di blocco o di bloccare i thread.

Causa

Se la connessione tra il gestore delle transazioni e di SQL Server viene persa per una transazione non preparata, quindi il Driver JDBC per SQL Server non la pulizia di tali transazioni e possono continuare ad utilizzare le risorse e blocca altre transazioni. A causa dell'implementazione XA nel Driver JDBC per SQL Server, SQL Server non è in grado di rilevare le disconnessioni anomale dei gestori delle transazioni. Pertanto, per SQL Server, queste transazioni rimangono nel sistema fino al timeout della transazione XA o il database viene riavviato. Il timeout utilizza infinito nell'istanza di SQL Server e non è configurabile nel database.

Soluzione alternativa

Per risolvere questo problema, utilizzare uno dei seguenti metodi:

  • Quando si verificano eventuali arresti anomali di Java Virtual Machine (JVM) o problemi di connettività di rete che producono tali transazioni orfane, riavviare il server di database.

  • Arrestare singolarmente le transazioni orfane nel database per pulire le risorse. Per verificare che una transazione è isolata, assicurarsi che non sia stato in dubbio (preparato) che attualmente sta completando o transazione. Tutte le transazioni che durano attraverso il riavvio dell'oggetto correlato JVM e un ciclo di ripristino ha esito positivo devono essere orfani.

  • Impostare un valore di timeout per le transazioni XA è più lungo di forzare l'arresto non appena viene superato il valore di timeout della transazione più lunga. Tale operazione può essere eseguita chiamando il metodo XAResource.setTransactionTimeout() .

  • Per molti gestori delle transazioni di terze parti, l'oggetto XAResource non è accessibile direttamente dal codice chiamante e il gestore delle transazioni non è impostato il valore di timeout della transazione. In questo caso, un'applicazione esterna può essere utilizzata per impostare il timeout della transazione su un nuovo valore predefinito. Questa nuova impostazione predefinita verrà utilizzata da tutte le altre transazioni che non si specificano un timeout della transazione.

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?
Premendo Inviare, il tuo feedback verrà usato per migliorare i prodotti e i servizi Microsoft. L'amministratore IT potrà raccogliere questi dati. Informativa sulla privacy.

Grazie per il feedback!

×