Creazione della connessione iniziale a una sessione di mirroring del database

Per la connessione iniziale a un database con mirroring, è necessario che un client renda disponibile una stringa di connessione che includa, come minimo, il nome di un'istanza del server. Tale nome del server obbligatorio identifica l'istanza del server principale corrente ed è noto come nome partner iniziale.

Facoltativamente, la stringa di connessione può indicare inoltre il nome di un'altra istanza del server, che identifichi l'istanza del server mirror corrente, da utilizzare se il partner iniziale non sia disponibile durante il primo tentativo di connessione. Il secondo nome viene definito nome partner di failover.

È inoltre necessario che la stringa di connessione includa un nome di database, al fine di consentire i tentativi di failover da parte del provider di accesso ai dati.

Alla ricezione di una stringa di connessione, il provider di accesso ai dati archivia il nome partner iniziale e il nome partner di failover, se disponibile, in una cache nella memoria volatile del client (per il codice gestito, l'ambito della cache è il dominio applicazione). Dopo essere stato memorizzato nella cache, il nome partner iniziale non viene mai aggiornato dal provider di accesso ai dati. Quando il client rende disponibile il nome partner di failover, il provider di accesso ai dati memorizza inoltre il nome di questo partner di failover temporaneamente nel caso in cui il provider non possa connettersi utilizzando il nome partner iniziale.

Una sessione di mirroring del database non costituisce protezione contro i problemi di accesso al server specifici dei client, ad esempio nel caso di problemi di comunicazione di un computer client con la rete. Un tentativo di connessione a un database con mirroring può non riuscire per varie ragioni, non correlate al provider di accesso ai dati, ad esempio un tentativo di connessione può non riuscire perché l'istanza del server principale è inattiva, perché si verifica durante il failover del database o a causa di un errore di rete.

Durante il tentativo di connessione, il provider di accesso ai dati inizia le operazioni utilizzando il proprio nome partner iniziale. Se l'istanza del server specificata è disponibile e corrisponde all'istanza del server principale corrente, il tentativo di connessione in genere riesce.

Nota

Se la sessione di mirroring viene sospesa, il client in genere si connette al server principale e quindi scarica il nome partner. Il database non è tuttavia disponibile per il client fino alla ripresa del mirroring.

Se il tentativo ha esito negativo, il provider di accesso ai dati tenta di stabilire la connessione utilizzando il nome partner di failover, se disponibile. Se uno dei nomi partner disponibili consente di identificare correttamente il server principale corrente, il tentativo di stabilire la connessione iniziale da parte del provider di accesso ai dati in genere ha esito positivo. Al completamento della connessione, il provider di accesso ai dati scarica il nome dell'istanza del server mirror corrente. Questo nome viene memorizzato nella cache come nome partner di failover, sovrascrivendo l'eventuale nome partner di failover indicato dal client. Di conseguenza, il provider di dati .NET Framework per SQL Server non aggiorna il nome partner di failover. SQL Server Native Client aggiorna invece la cache ogni volta che una connessione successiva o il ripristino di una connessione restituisce un diverso nome partner.

Nella figura seguente viene illustrata una connessione client al partner iniziale, Partner_A, per un database con mirroring denominato Db_1. Nella figura viene illustrato un caso in cui il nome partner iniziale specificato dal client identifica correttamente il server principale corrente, Partner_A. Il tentativo di connessione iniziale riesce e il provider di accesso ai dati archivia il nome del server mirror, attualmente Partner_B, come nome partner di failover nella cache locale. Infine, il client si connette alla copia principale del database Db_1.

Connessione client quando il partner iniziale è il server principale

Il tentativo di connessione iniziale può non riuscire, ad esempio, a causa di un errore di rete o di un'istanza del server non attiva. Poiché il partner iniziale non è disponibile, per consentire al provider di accesso ai dati di tentare la connessione al partner di failover, è necessario che il nome partner di failover sia stato specificato dal client nella stringa di connessione.

In questo caso, se il nome partner di failover non è disponibile, il tentativo di connessione originale continua fino al timeout della connessione di rete o alla restituzione di un errore, analogamente a quanto avviene per un database senza mirroring.

Quando il nome partner di failover viene specificato nella stringa di connessione, il comportamento del provider di accesso ai dati dipende dal protocollo di rete e dal sistema operativo del client, come segue:

  • Per il protocollo TCP/IP, se sul client è in esecuzione Microsoft Windows XP o versione successiva, i tentativi di connessione sono regolati da un algoritmo per la riesecuzione dei tentativi di connessione specifico del mirroring di database. L'algoritmo per la riesecuzione dei tentativi di connessione determina il tempo massimo (tempo di riesecuzione dei tentativi) stabilito per l'apertura di una connessione in un determinato tentativo di connessione. Per ulteriori informazioni, vedere Utilizzo delle parole chiave delle stringhe di connessione con SQL Server Native Client.

  • Per altri protocolli di rete e per i client sui quali non è in esecuzione Microsoft Windows XP o versione successiva

    Se si verifica un errore o se il partner iniziale non è disponibile, il tentativo di connessione iniziale attende fino alla scadenza del periodo di timeout della connessione di rete o fino alla scadenza del periodo di timeout di accesso sul provider di accesso ai dati. In genere, tale attesa dura dai 20 ai 30 secondi. Successivamente, se non si è verificato il timeout del provider di accesso ai dati, esso tenta di connettersi al partner di failover. Se il periodo di timeout della connessione scade prima che la connessione venga stabilita o se il partner di failover diventa non disponibile, il tentativo di connessione non riesce. Se il partner di failover è disponibile entro il periodo di timeout di accesso ed è ora il server principale, il tentativo di connessione in genere ha esito positivo.

Stringhe di connessione per un database con mirroring

La stringa di connessione fornita dal client include informazioni utilizzate dal provider di accesso ai dati per connettersi al database. In questa sessione vengono illustrate le parole chiave specificatamente rilevanti per la connessione a una database con mirroring utilizzando una connessione tramite driver ODBC di SQL Server Native Client . Per informazioni relative alle parole chiave delle stringhe di connessione, vedere Utilizzo delle parole chiave delle stringhe di connessione con SQL Server Native Client.

Attributo Network

La stringa di connessione deve includere l'attributo Network per specificare il protocollo di rete. Questo assicura che il protocollo di rete specificato sia persistente tra le connessioni a partner diversi. Il protocollo ottimale per la connessione a un database con mirroring è TCP/IP. Per assicurare che il client richieda il TCP/IP per ogni connessione ai partner, una stringa di connessione include l'attributo seguente:

Network=dbmssocn; 
Nota importanteImportante

È consigliabile mantenere TCP/IP all'inizio dell'elenco dei protocolli per un client. Se tuttavia la stringa di connessione specifica l'attributo Network, questo ha la priorità sull'ordine dell'elenco.

In alternativa, per assicurare che il client richieda il protocollo Named Pipes per ogni connessione ai partner, una stringa di connessione include l'attributo seguente:

Network=dbnmpntw; 
Nota importanteImportante

Poiché il protocollo Named Pipes non utilizza l'algoritmo per la riesecuzione dei tentativi TCP/IP, in molti casi, per un tentativo di connessione con tale protocollo può verificarsi il timeout prima della connessione a un database con mirroring.

Attributo Server

La stringa di connessione deve includere un attributo Server indicante il nome partner iniziale, che dovrebbe identificare l'istanza del server principale corrente.

Il modo più semplice per identificare l'istanza del server è specificarne il nome, <server_name>[\<SQL_Server_instance_name>]. Ad esempio:

Server=Partner_A;

Oppure

Server=Partner_A\Instance_2;

Quando viene utilizzato il nome di sistema, è tuttavia necessario che il client esegua una ricerca DNS per ottenere l'indirizzo IP del server e una query SQL Server Browser per ottenere il numero di porta del server sul quale si trova il partner. Queste ricerche e query possono essere ignorate specificando l'indirizzo IP e il numero di porta del partner nell'attributo Server, anziché specificando il nome del server. Questo è consigliabile per ridurre al minimo la possibilità di ritardi esterni durante la connessione al partner.

Nota

Una query SQL Server Browser è necessaria se la stringa di connessione specifica il nome dell'istanza denominata e non la porta.

Per specificare l'indirizzo IP e la porta, l'attributo Server assume il formato seguente, Server=<ip_address>,<port>, ad esempio:

Server=123.34.45.56,4724; 

Nota

L'indirizzo IP può essere IP versione 4 (IPv4) o IP versione 6 (IPv6).

Attributo Database

È inoltre necessario che la stringa di connessione specifichi l'attributo Database per indicare il nome del database con mirroring. Se il database non è disponibile quando il client tenta di stabilire la connessione, viene generata un'eccezione.

Ad esempio, per connettersi esplicitamente al database AdventureWorks2008R2 nel server principale Partner_A, un client utilizza la stringa di connessione seguente:

" Server=Partner_A; Database=AdventureWorks2008R2 "

Nota

Le informazioni sull'autenticazione vengono omesse dalla stringa. Per informazioni sulle parole chiave per l'autenticazione integrata, vedere Utilizzo delle parole chiave delle stringhe di connessione con SQL Server Native Client.

Nota importanteImportante

L'aggiunta al prefisso del protocollo dell'attributo Server (Server=tcp:<servername>) non è compatibile con l'attributo Network e l'impostazione del protocollo in entrambe le posizioni determinerà probabilmente un errore. Pertanto, è consigliabile che una stringa di connessione specifichi il protocollo utilizzando l'attributo Network e specifichi solo il nome del server nell'attributo Server ("Network=dbmssocn; Server=<servername>").

Attributo Failover Partner

Oltre al nome partner iniziale, il client può anche specificare il nome partner di failover, che identifica l'istanza del server mirror corrente. Il partner di failover viene specificato dalla parola chiave dell'attributo Failover Partner. La parola chiave per questo attributo dipende dall'API utilizzata. Nella seguente tabella vengono elencate le parole chiave:

API

Parola chiave per l'attributo Failover Partner

Provider OLE DB

FailoverPartner

Driver ODBC

Failover_Partner

ADO (ActiveX Data Objects)

Failover Partner

Per ulteriori informazioni sulle parole chiave di queste API, vedere Utilizzo delle parole chiave delle stringhe di connessione con SQL Server Native Client.

Il modo più semplice per identificare l'istanza del server è tramite il relativo nome di sistema, <server_name>[\<SQL_Server_instance_name>].

In alternativa, è possibile specificare l'indirizzo IP e il numero di porta nell'attributo Failover Partner. Se il tentativo di connessione iniziale non riesce durante la prima connessione al database, il tentativo di connessione al partner di failover non dovrà più utilizzare necessariamente il DNS e SQL Server Browser. Una volta stabilita una connessione, il nome partner di failover sarà sovrascritto dal nome partner di failover. In questo modo, se si verifica un failover, le connessioni reindirizzate richiederanno il DNS e SQL Server Browser.

Nota

Quando viene specificato solo il nome del partner iniziale, non è necessaria alcuna operazione o scrittura di codice da parte degli sviluppatori dell'applicazione, fatta eccezione per quello relativo alla modalità di riconnessione.

Nota

Gli sviluppatori di applicazioni con codice gestito forniscono il nome del partner di failover nella proprietà ConnectionString dell'oggetto SqlConnection. Per informazioni sull'utilizzo di questa stringa di connessione, vedere la sezione relativa al supporto del mirroring del database nel Provider di dati .NET Framework per SQL Server nella documentazione di ADO.NET, che fa parte dell'SDK di Microsoft .NET Framework.

Stringa di connessione di esempio

Ad esempio, per connettersi esplicitamente al database AdventureWorks2008R2 mediante TCP/IP in Partner_A o Partner_B, è necessario che un'applicazione client con il driver ODBC includa la stringa di connessione seguente:

"Server=Partner_A; Failover_Partner=Partner_B; Database=AdventureWorks2008R2; Network=dbmssocn"

In alternativa, il client può utilizzare l'indirizzo IP e il numero di porta per identificare il partner iniziale, Partner_A. Ad esempio, se l'indirizzo IP è 250.65.43.21 e il numero di porta è 4734, la stringa di connessione sarà la seguente:

"Server=250.65.43.21,4734; Failover_Partner=Partner_B; Database=AdventureWorks2008R2; Network=dbmssocn"