Lingua

Mirroring del database in SQL Server

Il mirroring del database in SQL Server consente di conservare una copia o un mirroring di un database 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. Dopo aver configurato il mirroring del database per un database SQL Server, Microsoft. Data.SqlClient lo supporta senza codice client aggiuntivo. È anche possibile specificare un server partner di failover nella ConnectionString proprietà .

La sequenza di eventi seguente si verifica quando l'oggetto SqlConnection punta a 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, il provider genera SqlException.

Quando SqlConnection viene aperto correttamente, il server restituisce il nome del partner di failover. Tale nome sostituisce il valore 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

Dopo un failover, utilizzare la DataSource proprietà per recuperare il nome del server connesso. Il frammento di codice seguente presuppone che la variabile di connessione faccia riferimento a un'istanza aperta della SqlConnection classe .

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

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

Il 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 di principale sul server partner, la connessione riesce e la nuova corrispondenza tra ruolo di primario e mirror viene inviata al client e memorizzata nella cache per la durata del AppDomain chiamante. Non è archiviato nell'archiviazione permanente e non è disponibile per le connessioni successive in un diverso AppDomain o processo. Tuttavia, è disponibile per le connessioni successive all'interno della stessa istanza AppDomain. Si noti che un altro AppDomain processo o in esecuzione nello stesso computer o in un altro computer ha sempre il pool di connessioni e tali connessioni non vengono reimpostate. In tal caso, se il database primario diventa inattivo, ogni processo o AppDomain ha esito negativo una sola 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 per il 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