Transazioni tra database non supportate per il mirroring del database o i gruppi di disponibilità AlwaysOn (SQL Server)
Le transazioni tra database e le transazioni distribuite non sono supportate da Always On gruppi di disponibilità o dal mirroring del database. perché l'atomicità e integrità delle transazioni non può essere garantita per i motivi seguenti:
In caso di transazioni tra database, il relativo commit viene eseguito in modo indipendente. Pertanto, anche per i database presenti in un solo gruppo di disponibilità, potrebbe verificarsi un failover dopo il commit di una transazione da parte di un database, ma prima che la stessa operazione venga effettuata da un altro database. Per il mirroring del database questo problema è composto perché, dopo un failover, il database con mirroring si trova in genere in un'istanza del server diversa dall'altro database e anche se entrambi i database vengono mirroring tra gli stessi due partner, non è garantito che entrambi i database eseseguono il failover contemporaneamente.
In caso di transazioni distribuite, dopo un failover, tramite il nuovo server principale o la nuova replica primaria non è possibile effettuare la connessione al Distributed Transaction Coordinator (DTC) nel server principale o nella replica primaria precedente. Per questo motivo, tramite il nuovo server principale o la nuova replica primaria non è possibile ottenere lo stato delle transazioni.
Nell'esempio di mirroring del database seguente si illustra come può verificarsi un'incoerenza logica. In questo esempio un'applicazione utilizza una transazione tra database per inserire due righe di dati. Una riga viene inserita in una tabella in un database con mirroring, A, l'altra viene inserita in un altro database, B. Il database A viene sottoposto a mirroring in modalità a protezione elevata con failover automatico. Durante il commit della transazione, il database A diventa non disponibile e viene automaticamente eseguito il failover della sessione di mirroring sul mirror del database A.
Dopo il failover, è possibile che il commit della transazione tra database abbia esito positivo sul database B, ma non sul database di cui è stato eseguito il failover. Questa situazione si verifica qualora il server principale originale del database A non abbia inviato il log per la transazione tra database al server mirror prima dell'errore. Dopo il failover, tale transazione non è più presente nel nuovo server principale. I database A e B diventano incoerenti perché i dati inseriti nel database B rimangono inalterati, mentre quelli inseriti nel database A sono stati persi.
Uno scenario analogo può verificarsi quando si utilizza una transazione MS DTC. Ad esempio, dopo il failover, il nuovo server principale contatta MS DTC. MS DTC, tuttavia, non rileva il nuovo server principale e termina tutte le transazioni di cui si sta preparando il commit e per le quali in altri database il commit viene considerato eseguito.
Importante
L'utilizzo del mirroring del database o dei gruppi di disponibilità con DTC non comporta un'installazione non supportata di SQL Server. Se, tuttavia, un database fa parte di una sessione di mirroring del database o di un gruppo di disponibilità e nel database viene utilizzato anche DTC, i problemi di supporto verranno esaminati da Microsoft solo se non correlati all'utilizzo combinato del mirroring del database o dei gruppi di disponibilità con DTC.