Share via


Mirroring del database e transazioni tra database

Data aggiornamento: 12 dicembre 2006

Il mirroring del database non è supportato né nelle transazioni tra database né nelle transazioni distribuite perché l'atomicità e integrità delle transazioni non può essere garantita per i motivi seguenti:

  • Nel caso delle transazioni tra database, dopo un failover il database con mirroring è disponibile in una diversa istanza del server, generalmente in un database separato dal database senza mirroring. Anche se il mirroring di entrambi i database viene eseguito tra gli stessi due partner, non esiste alcuna garanzia che il failover di entrambi i database avvenga contemporaneamente.
  • Nel caso delle transazioni distribuite, dopo un failover il nuovo server principale non è in grado di connettersi al Distributed Transaction Coordinator (DTC) del server principale precedente che utilizza lo stesso ID di risorsa. Per questo motivo, il nuovo server principale non può ottenere lo stato delle transazioni.

Nell'esempio seguente viene illustrato come può verificarsi un'inconsistenza 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 inconsistenti 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.

Vedere anche

Concetti

Transazioni distribuite (Motore di database)
Transazioni distribuite MS DTC

Altre risorse

Mirroring del database

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Contenuto modificato:
  • Revisione dell'argomento per segnalare che il mirroring del database non è supportato né nelle transazioni tra database né nelle transazioni distribuite e per spiegarne i motivi.