Condividi tramite


Mirroring del database in SQL Server

Il mirroring del database in SQL Server consente di mantenere una copia, o mirror, di un database di SQL Server in un server di standby. Il mirroring garantisce che siano sempre presenti due copie separate dei dati, offrendo disponibilità elevata e ridondanza completa dei dati. Il provider di dati .NET per SQL Server fornisce il supporto implicito per il mirroring del database. Pertanto, una volta configurato il provider per un database SQL Server, lo sviluppatore non dovrà eseguire alcuna operazione né scrivere codice. L'oggetto SqlConnection supporta inoltre una modalità di connessione esplicita che consente di specificare il nome di un server partner di failover in ConnectionString.

Questa sequenza di eventi semplificata si verifica per un oggetto SqlConnection che ha come destinazione un database configurato per il mirroring:

  1. L'applicazione client si connette correttamente al database principale e il server restituisce il nome del server partner che viene quindi memorizzato nella cache del client.

  2. In caso di errore del server contenente il database principale o di interruzione della connettività, lo stato della connessione e della transazione andrà perso. L'applicazione client tenta di ristabilire una connessione al database principale e non riesce.

  3. L'applicazione client tenta quindi di stabilire in modo trasparente una connessione al database mirror nel server partner. Se l'esito è positivo, la connessione viene reindirizzata al database mirror che diventa quindi il nuovo database principale.

Definizione del partner di failover nella stringa di connessione

Se si specifica il nome di un server partner di failover nella stringa di connessione, il client tenterà di connettersi in modo trasparente al partner di failover se il database principale non è disponibile quando l'applicazione client si connette per la prima volta.

";Failover Partner=PartnerServerName"

Se si omette il nome del server partner di failover e il database principale non è disponibile quando l'applicazione client si connette per la prima volta, viene generata l'eccezione SqlException.

Quando l'oggetto SqlConnection viene aperto, il server restituisce il nome del partner di failover che sostituirà tutti i valori specificati nella stringa di connessione.

Nota

Per gli scenari di mirroring del database, nella stringa di connessione è necessario specificare in modo esplicito il nome del catalogo o del database iniziale. Se il client riceve informazioni di failover su una connessione che non presenta un catalogo o un database iniziale specificato in modo esplicito, tali informazioni non vengono memorizzate nella cache e l'applicazione non tenta di eseguire il failover se si verifica un errore nel server principale. Se una stringa di connessione ha un valore per il partner di failover, ma nessun valore per il catalogo o il database iniziale, viene generata l'eccezione InvalidArgumentException.

Recupero del nome del server corrente

In caso di failover, è possibile recuperare il nome del server al quale la connessione corrente è effettivamente connessa tramite la proprietà DataSource di un oggetto SqlConnection. Il frammento di codice seguente recupera il nome del server attivo, supponendo che la variabile di connessione faccia riferimento a un oggetto SqlConnection aperto.

Quando si verifica un evento di failover e la connessione passa al server mirror, la proprietà DataSource viene aggiornata in modo da riflettere il nome del mirror.

Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;

Comportamento del mirroring SqlClient

Il client prova sempre a connettersi al server principale corrente. Se non riesce, prova a connettersi al partner di failover. Se il database mirror è stato già passato al ruolo principale nel server partner, la connessione riesce e il nuovo mapping ruolo principale-mirror viene inviato al client e memorizzato nella cache per la durata dell'oggetto AppDomain chiamante. Il nuovo mapping non viene memorizzato nell'archivio permanente e non è disponibile per successive connessioni in un AppDomain o in un processo diverso. È disponibile, tuttavia, per connessioni successive all'interno dello stesso AppDomain. Notare che un AppDomain o un processo diverso eseguito sullo stesso computer o su un computer diverso dispone sempre del proprio pool di connessioni e tali connessioni non vengono reimpostate. In questo caso, se il database primario diventa inattivo, ogni processo o AppDomain ha esito negativo una volta e il pool viene cancellato automaticamente.

Nota

Il supporto del mirroring nel server viene configurato per ogni database. Se vengono eseguite operazioni di manipolazione dei dati su altri database non inclusi nel set principale/mirror, usando nomi multipart o modificando il database corrente, le modifiche apportate a questi altri database non vengono propagate in caso di errore. Quando si modificano i dati in un database senza mirroring, non viene generato alcun errore. Lo sviluppatore deve valutare il possibile impatto di queste operazioni.

Risorse relative al mirroring del database

Per informazioni di carattere concettuale e sulla configurazione, la distribuzione e l'amministrazione del mirroring, vedere le risorse seguenti nella documentazione di SQL Server.

Risorsa Descrizione
Mirroring del database Viene descritto come impostare e configurare il mirroring in SQL Server.

Vedi anche