Connessione di client a una sessione di mirroring del database (SQL Server)Connect Clients to a Database Mirroring Session (SQL Server)

Per connettersi a una sessione di mirroring del database un client può utilizzare SQL ServerSQL Server Native Client o il provider di dati .NET Framework per SQL ServerSQL Server.To connect to a database mirroring session, a client can use either SQL ServerSQL Server Native Client or .NET Framework Data Provider for SQL ServerSQL Server. Se configurati per un database SQL Server 2017SQL Server 2017 , questi provider di accesso ai dati supportano entrambi completamente il mirroring del database.When configured for a SQL Server 2017SQL Server 2017 database, these data access providers both fully support database mirroring. Per informazioni relative alle considerazioni di programmazione per l'utilizzo di un database con mirroring, vedere Using Database Mirroring.For information about programming considerations for using a mirrored database, see Using Database Mirroring. È inoltre necessario che l'istanza del server principale corrente sia disponibile e che l'account di accesso del client sia stato creato nell'istanza del server.In addition, the current principal server instance must be available and the login of the client must have been created on the server instance. Per altre informazioni, vedere Risolvere i problemi relativi agli utenti isolati (SQL Server).For more information, see Troubleshoot Orphaned Users (SQL Server). Le connessioni client a una sessione di mirroring del database non richiedono l'istanza del server di controllo del mirroring, se ne esiste una.Client connections to a database mirroring session do not involve the witness server instance, if one exists.

Creazione della connessione iniziale a una sessione di mirroring del database Making the Initial Connection to a Database Mirroring Session

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.For the initial connection to a mirrored database, a client must supply a connection string that minimally supplies the name of a server instance. Tale nome del server obbligatorio identifica l'istanza del server principale corrente ed è noto come nome partner iniziale.This required server name should identify the current principal server instance and is known as the initial partner name.

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.Optionally, the connection string can also supply the name of another server instance, which should identify the current mirror server instance, for use if the initial partner is unavailable during the first connection attempt. Il secondo nome viene definito nome partner di failover.The second name is known as the failover partner name.

È inoltre necessario che la stringa di connessione includa un nome di database,The connection string must also supply a database name. al fine di consentire i tentativi di failover da parte del provider di accesso ai dati.This is necessary to enable failover attempts by the data access provider.

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).On receiving a connection string, the data access provider stores the initial partner name and the failover partner name, if supplied, in a cache in the client's volatile memory (for managed code, the cache is scoped to the application domain). Dopo essere stato memorizzato nella cache, il nome partner iniziale non viene mai aggiornato dal provider di accesso ai dati.Once cached, the initial partner name is never updated by the data access provider. 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.When the client supplies the failover partner name, the data access provider also stores this failover partner name temporarily in case the provider cannot connect using the initial partner name.

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.A database mirroring session does not protect against server-access problems that are specific to clients, such as when a client computer is having a problems communicating with the network. 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.A connection attempt to a mirrored database can also fail for a variety of reasons that are unrelated to the data-access provider; for example, a connection attempt can fail because the principal server instance is inactive, as occurs when the database is failing over, or because of a network error.

Durante il tentativo di connessione, il provider di accesso ai dati inizia le operazioni utilizzando il proprio nome partner iniziale.When attempting to connect, the data access provider begins by using the initial partner name. Se l'istanza del server specificata è disponibile e corrisponde all'istanza del server principale corrente, il tentativo di connessione in genere riesce.If the specified server instance is available and is the current principal server instance, the connection attempt typically succeeds.

Nota

Se la sessione di mirroring viene sospesa, il client in genere si connette al server principale e quindi scarica il nome partner.If the mirroring session is paused, the client typically connects to the principal server and the downloads the partner name. Il database non è tuttavia disponibile per il client fino alla ripresa del mirroring.However, the database is unavailable to the client until mirroring resumes.

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.If that attempt does not work, the data access provider tries the failover partner name, if available. 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.If either partner name correctly identifies the current principal server, the data access provider normally succeeds in opening the initial connection. Al completamento della connessione, il provider di accesso ai dati scarica il nome dell'istanza del server mirror corrente.On completing this connection, the data access provider downloads the server instance name of the current mirror server. Questo nome viene memorizzato nella cache come nome partner di failover, sovrascrivendo l'eventuale nome partner di failover indicato dal client.This name is stored in the cache as the failover partner name, overwriting the client-supplied failover partner name, if any. Di conseguenza, il provider di dati .NET Framework per SQL ServerSQL Server non aggiorna il nome partner di failover.Thereafter, the .NET Framework Data Provider for SQL ServerSQL Server does not update the failover partner name. SQL ServerSQL Server Native Client aggiorna invece la cache ogni volta che una connessione successiva o il ripristino di una connessione restituisce un diverso nome partner.In contrast, SQL ServerSQL Server Native Client updates the cache whenever a subsequent connection or connection reset returns a different partner name.

Nella figura seguente viene illustrata una connessione client al partner iniziale, Partner_A, per un database con mirroring denominato Db_1.The following figure illustrates a client connection to the initial partner, Partner_A, for a mirrored database named 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.This figure shows a case in which the initial partner name supplied by the client correctly identifies the current principal server, 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.The initial connection attempt succeeds, and the data access provider stores the name of the mirror server (currently Partner_B) as the failover partner name in the local cache. Il client si connette infine alla copia principale del database Db_1 .Finally, the client connects to the principal copy of the Db_1 database.

Connessione client quando il partner iniziale è il server principaleClient connection if initial partner is principal

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.The initial connection attempt may fail, for example, because of a network error or an inactive server instance. 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.Because the initial partner is unavailable, for the data access provider to attempt to connect to the failover partner, the client must have supplied the failover partner name in the connection string.

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.In that case, if the failover partner name is unavailable, the original connection attempt continues until the network connection timeout or an error is returned (just as for a non-mirrored database).

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:When the failover partner name is supplied in the connection string, the behavior of the data access provider depends on the network protocol and operating system of the client, as follows:

  • Per il protocollo TCP/IP, i tentativi di connessione sono regolati da un algoritmo per la riesecuzione dei tentativi di connessione specifico del mirroring del database.For TCP/IP, the connection attempts are regulated by a connection retry algorithm that is specific to database mirroring. L'algoritmo per i nuovi tentativi di connessione determina il tempo massimo ( tempo per i nuovi tentativi) stabilito per l'apertura di una connessione per un tentativo di connessione specifico.The connection retry algorithm determines the maximum time (the retry time) allotted for opening a connection in a given connection attempt.

  • Per altri protocolli di reteFor other network protocols

    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.If an error occurs or if the initial partner is unavailable, the initial connection attempt waits until the network connection timeout period expires or the login timeout period expires on the data access provider. In genere, tale attesa dura dai 20 ai 30 secondi.Typically, this wait is on the order of 20 to 30 seconds. Successivamente, se non si è verificato il timeout del provider di accesso ai dati, esso tenta di connettersi al partner di failover.Thereafter, if the data access provider has not timed out, it attempts to connect to the failover partner. 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.If the connection timeout period expires before the connection succeeds or the failover partner is unavailable, the connection attempt fails. 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.If failover partner is available within the login timeout period and is now the principal server, the connection attempt normally succeeds.

Stringhe di connessione per un database con mirroringConnection Strings for a Mirrored Database

La stringa di connessione fornita dal client include informazioni utilizzate dal provider di accesso ai dati per connettersi al database.The connection string supplied by the client contains information that the data access provider uses to connect to the database. In questa sessione vengono illustrate le parole chiave specificatamente rilevanti per la connessione a un database con mirroring utilizzando una connessione tramite driver ODBC di SQL ServerSQL Server Native Client.This section discusses the keywords that are specifically relevant for connecting to a mirrored database using a SQL ServerSQL Server Native Client ODBC Driver Connection.

Attributo NetworkNetwork Attribute

La stringa di connessione deve includere l'attributo Rete per specificare il protocollo di rete.The connection string should contain the Network attribute to specify the network protocol. Questo assicura che il protocollo di rete specificato sia persistente tra le connessioni a partner diversi.This ensures that the specified network protocol persists between connections to different partners. Il protocollo ottimale per la connessione a un database con mirroring è TCP/IP.The best protocol for connecting to a mirrored database is TCP/IP. Per assicurare che il client richieda il TCP/IP per ogni connessione ai partner, una stringa di connessione include l'attributo seguente:To ensure that the client requests TCP/IP for every connection to the partners, a connection string supplies the following attribute:

Network=dbmssocn;   

Importante

È consigliabile mantenere TCP/IP all'inizio dell'elenco dei protocolli per un client.We recommend keeping TCP/IP at the top of a client's protocol list. Tuttavia, se la stringa di connessione specifica l'attributo Rete , questo ha la priorità sull'ordine dell'elenco.However, if the connection string specifies the Network attribute, this overrides the list order.

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:Alternatively, to ensure that the client requests named pipes for every connection to the partners, a connection string supplies the following attribute:

Network=dbnmpntw;   

Importante

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.Because named pipes does not use the TCP/IP retry algorithm, in many cases, a named pipes connection attempt may time out before connecting to a mirrored database.

Attributo ServerServer Attribute

La stringa di connessione deve includere un attributo Server indicante il nome partner iniziale, che dovrebbe identificare l'istanza del server principale corrente.The connection string must contain a Server attribute that supplies the initial partner name, which should identify the current principal server instance.

Il modo più semplice per identificare l'istanza del server è specificarne il nome, <nome_server>[\<nome_istanza_SQL_Server>].The simplest way to identify the server instance is by specifying its name , <server_name>[\<SQL_Server_instance_name>]. Esempio:For example:

Server=Partner_A;

oor

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.However, when the system name is used, the client must perform a DNS lookup to obtain the IP address of the server and a SQL Server Browser query to obtain the port number of the server on which the partner resides. Queste ricerche e query possono essere ignorate specificando l'indirizzo IP e il numero di porta del partner nell'attributo Server , anziché il nome del server.Those lookups and queries can be bypassed by specifying the IP address and port number of the partner in the Server attribute, rather than specifying the server name. Questo è consigliabile per ridurre al minimo la possibilità di ritardi esterni durante la connessione al partner.This is recommended to minimize the possibility of external delays while connecting to that partner.

Nota

Una query SQL Server Browser è necessaria se la stringa di connessione specifica il nome dell'istanza denominata e non la porta.A SQL Server Browser query is necessary if the connection string specifies the named instance name and not the port.

Per specificare l'indirizzo IP e la porta, l'attributo Server assume il formato Server=<indirizzo_ip>,<porta>, ad esempio:To specify the IP address and port, the Server attribute takes the following form, Server=<ip_address>,<port>, for example:

Server=123.34.45.56,4724;   

Nota

L'indirizzo IP può essere IP versione 4 (IPv4) o IP versione 6 (IPv6).The IP address can be IP Version 4 (IPv4) or IP Version 6 (IPv6).

Attributo DatabaseDatabase Attribute

È inoltre necessario che la stringa di connessione specifichi l'attributo Database per indicare il nome del database con mirroring.In addition, the connection string must specify the Database attribute to supply the name of the mirrored database. Se il database non è disponibile quando il client tenta di stabilire la connessione, viene generata un'eccezione.If the database is unavailable when the client attempts to connect, an exception is raised.

Ad esempio, per connettersi esplicitamente al database AdventureWorks nel server principale Partner_A, un client deve usare la stringa di connessione seguente:For example, to expressly connect to the AdventureWorks database on the principal server Partner_A, a client uses the following connection string:

" Server=Partner_A; Database=AdventureWorks "

Nota

Le informazioni sull'autenticazione vengono omesse dalla stringa.This string omits authentication information.

Importante

L'aggiunta al prefisso del protocollo dell'attributo Server (Server=tcp:<nomeserver>) non è compatibile con l'attributo Rete e l'indicazione del protocollo in entrambe le posizioni determinerà probabilmente un errore.Bundling the protocol prefix with the Server attribute (Server=tcp:<servername>) is incompatible with the Network attribute, and specifying the protocol in both places will likely result in an error. Di conseguenza, è consigliabile che una stringa di connessione specifichi il protocollo tramite l'attributo Rete e specifichi solo il nome del server nell'attributo Server ("Network=dbmssocn; Server=<nomeserver>").Therefore, we recommend that a connection string specify the protocol using the Network attribute and specify only the server name in the Server attribute ("Network=dbmssocn; Server=<servername>").

Attributo Failover PartnerFailover Partner Attribute

Oltre al nome partner iniziale, il client può anche specificare il nome partner di failover, che identifica l'istanza del server mirror corrente.In addition to the initial partner name, the client can also specify failover partner name, which should identify the current mirror server instance. Il partner di failover viene specificato dalla parola chiave dell'attributo Failover Partner.The failover partner is specified by one of the keywords for the failover partner attribute. La parola chiave per questo attributo dipende dall'API utilizzata.The keyword for this attribute depends on the API that you are using. Nella seguente tabella vengono elencate le parole chiave:The following table lists these keywords:

APIAPI Parola chiave per l'attributo Failover PartnerKeyword for failover partner attribute
Provider OLE DBOLE DB Provider FailoverPartnerFailoverPartner
Driver ODBCODBC Driver Failover_PartnerFailover_Partner
ADO (ActiveX Data Objects)ActiveX Data Objects (ADO) Partner di failoverFailover Partner

Il modo più semplice per identificare l'istanza del server è tramite il nome di sistema, <nome_server>[\<nome_istanza_SQL_Server>].The simplest way to identify the server instance is by its system name, <server_name>[\<SQL_Server_instance_name>].

In alternativa, è possibile specificare l'indirizzo IP e il numero di porta nell'attributo Partner di failover .Alternatively, the IP address and port number can be supplied in the Failover Partner attribute. 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.If the initial connection attempt fails during the first connection to the database, the attempt to connect to the failover partner will be freed from relying on DNS and 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.Once a connection is established, the failover partner name will be overwritten with the failover partner name, so if a failover occurs, the redirected connections will require DNS and 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.When only the initial partner name is provided, application developers do not need to take any action or write any code except about how to reconnect.

Nota

Gli sviluppatori di applicazioni con codice gestito forniscono il nome del partner di failover nella proprietà ConnectionString dell'oggetto SqlConnection .Managed code application developers supply the failover partner name in the ConnectionString of the SqlConnection object. 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 MicrosoftMicrosoft .NET Framework.For information on using this connection string, see "Database Mirroring Support in the .NET Framework Data Provider for SQL Server" in the ADO.NET documentation, which is part of the MicrosoftMicrosoft .NET Framework SDK.

Stringa di connessione di esempioExample Connection String

Ad esempio, per connettersi esplicitamente al database AdventureWorks tramite TCP/IP in Partner_A o Partner_B, è necessario che un'applicazione client che usa il driver ODBC includa la stringa di connessione seguente:For example, to explicitly connect using TCP/IP to the AdventureWorks database on either Partner_A or Partner_B, a client application that uses the ODBC Driver could supply the following connection string:

"Server=Partner_A; Failover_Partner=Partner_B; Database=AdventureWorks; 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:Alternatively, the client could use the IP address and port number to identify the initial partner, Partner_A; for example, if the IP address is 250.65.43.21 and the port number is 4734, the connection string would be:

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

Algoritmo di riesecuzione dei tentativi di connessione (per connessioni TCP/IP) Connection Retry Algorithm (for TCP/IP Connections)

Per una connessione TCP/IP, quando entrambi i nomi partner si trovano nella cache, il provider di accesso ai dati applica un algoritmo di riesecuzione dei tentativi di connessione.For a TCP/IP connection, when both partner names are in the cache, the data access provider adheres to a connection retry algorithm. Questa operazione viene eseguita sia per eseguire la connessione iniziale alla sessione sia per eseguire la riconnessione dopo aver perso la connessione stabilita.This is true both for making the initial connection to the session and for reconnecting after losing an established connection. Dopo avere aperto una connessione, è necessario ulteriore tempo per il completamento dei passaggi di pre-accesso e di accesso.Once a connection has been opened, completing the pre-login and login steps takes additional time.

Nota

Il tempo impiegato nell'apertura di una connessione può superare il tempo di riesecuzione dei tentativi a causa di fattori esterni, ad esempio ricerche DNS lente, lentezza del controller di dominio o del centro di distribuzione chiave (KDC) Kerberos, tempo impiegato per contattare SQL Server Browser, traffico di rete intenso e così via.The time spent in opening a connection can exceed the retry time because of external factors, such as slow DNS lookups, slow domain controller/Kerberos Key Distribution Center (KDC), time spent contacting SQL Server Browser, network congestion, and so forth. Tali fattori esterni possono impedire a un client di connettersi a un database con mirroring.Such external factors can prevent a client from connecting to a mirrored database. Inoltre, questi fattori esterni possono fare sì che una connessione richieda più tempo del tempo di riesecuzione dei tentativi stabilito.Also, external factors can cause a connection to take longer to open than the allotted retry time. Per informazioni su come ignorare DNS e SQL Server Browser per il tentativo di connessione al partner iniziale, vedere Creazione della connessione iniziale a una sessione di mirroring del database, riportato in precedenza in questo argomento.For information on bypassing DNS and SQL Server Browser for connection attempt to the initial partner, see Making the Initial Connection to a Database Mirroring Session, earlier in this topic.

Se un tentativo di connessione ha esito negativo o il tempo di riesecuzione dei tentativi scade prima che abbia esito positivo, il provider di accesso ai dati tenterà la connessione all'altro partner.If a connection attempt fails or the retry time expires before it succeeds, the data access provider tries the other partner. Se a questo punto non è ancora stata aperta una connessione, il provider tenterà alternativamente i nomi partner iniziale e di failover finché non verrà aperta una connessione o fino al timeout del periodo di accesso. Il periodo di timeout di accesso predefinito è 15 secondi.If a connection is not opened by this point, the provider alternately tries the initial and failover partner names, until a connection is opened or the login period times out. The default login time-out period is 15 seconds. È consigliabile utilizzare un periodo di timeout di accesso di almeno 5 secondi.We recommend that the login time-out period be at least 5 seconds. L'utilizzo di un periodo di timeout più breve può impedire qualsiasi tentativo di connessione.Specifying a smaller time-out period might prevent any of the connection attempts from succeeding.

Il tempo di riesecuzione dei tentativi è una percentuale del periodo di accesso.The retry time is a percentage of the login period. Il tempo di riesecuzione dei tentativi di connessione è maggiore in ogni ciclo successivo.The retry time for a connection attempt is larger in each successive round. Nel primo ciclo, il tempo di riesecuzione per ognuno dei due tentativi è l'8% del periodo di accesso totale.In the first round, the retry time for each of the two attempts is 8 percent of the total login period. In ogni ciclo successivo, l'algoritmo di riesecuzione dei tentativi aumenta dello stesso valore il tempo massimo di riesecuzione.In each successive round, the retry algorithm increases the maximum retry time by the same amount. I tempi di riesecuzione dei primi otto tentativi di connessione sono pertanto i seguenti:Thus, the retry times for the first eight connection attempts is as follows:

8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%

Il tempo di riesecuzione dei tentativi viene calcolato mediante la formula seguente:The retry time is calculated using the following formula:

TempoRiesecuzione = TempoRiesecuzionePrecedente +( 0,08 \TimeoutAccesso)RetryTime* = PreviousRetryTime +( 0.08 \LoginTimeout)*

Dove PreviousRetryTime è inizialmente pari a 0.Where PreviousRetryTime is initially 0.

Ad esempio, se per l'accesso si usa il periodo di timeout predefinito di 15 secondi, TimeoutAccesso = 15.For example, if using the default login time-out period of 15 seconds, LoginTimeout = 15. In questo caso, i tempi di riesecuzione dei tentativi stabiliti nei primi tre cicli sono i seguenti:In this case, the retry times allotted in the first three rounds are as follows:

ArrotondamentoRound CalcoloRetryTime RetryTime calculation Tempo di riesecuzione per tentativoRetry time per attempt
11 0 +(0.08 \* 15)0 +(0.08 \* 15) 1,2 secondi1.2 seconds
22 1.2 +(0.08 \* 15)1.2 +(0.08 \* 15) 2,4 secondi2.4 seconds
33 2.4 +(0.08 \* 15)2.4 +(0.08 \* 15) 3,6 secondi3.6 seconds
44 3.6 +(0.08 \* 15)3.6 +(0.08 \* 15) 4,8 secondi4.8 seconds

Nella figura seguente vengono illustrati questi tempi di riesecuzione dei tentativi di connessione successivi, per ognuno dei quali si verifica il timeout.The following figure illustrates these retry times for successive connection attempts, each of which times out.

Ritardo massimo tra i tentativi di riesecuzione per un timeout di accesso di 15 secondiMaximum retry delays for 15 second login timeout

Per il periodo di timeout di accesso predefinito, il tempo massimo stabilito per i primi tre cicli di tentativi di connessione è pari a 14,4 secondi.For the default login time-out period, the maximum time allotted to the first three rounds of connection attempts is 14.4 seconds. Se ogni tentativo richiedesse tutto il tempo stabilito, rimarrebbero solo 0,6 secondi di tempo prima del timeout del periodo di accesso. In tal caso, il quarto ciclo verrebbe abbreviato consentendo solo un rapido tentativo finale di connessione mediante il nome partner iniziale.If every attempt were to use all of its allotted time, only 0.6 seconds of time would remain before the login period times out. In that case, the fourth round would be curtailed, allowing only a final quick attempt to connect using the initial partner name. Un tentativo di connessione può tuttavia dare esito negativo prima della scadenza del tempo di riesecuzione dei tentativi stabilito, in particolare negli ultimi cicli.However, a connection attempt may fail in less than its allotted retry time, particularly in later rounds. Ad esempio, se si riceve un errore di rete è possibile che un tentativo termini prima della scadenza del tempo di riesecuzione dei tentativi.For example, receiving a network error can cause an attempt to end before the retry time expires. Se i primi tentativi hanno esito negativo a causa di un errore di rete, sarebbe disponibile ulteriore tempo per il quarto ciclo e forse per quelli successivi.If earlier attempts fail due to a network error, additional time would be available for the fourth round and, perhaps, additional rounds.

Un'altra causa di esito negativo di un tentativo è un'istanza del server non attiva, come si verifica quando un'istanza del server è impegnata nel failover del relativo database.Another cause of a failed attempt is an inactive server instance, as occurs when a server instance is engaged in failing over its database. In questo caso, viene imposto un ritardo nella riesecuzione dei tentativi per impedire ai client di causare l'overload dei partner con una successione rapida di tentativi di connessione.In this case, a retry delay is imposed to prevent clients from overloading the partners with a rapid succession of connection attempts.

Nota

Quando entrambi i nomi partner sono disponibili, se il periodo di timeout di accesso è infinito, il client tenta di riconnettersi ai server all'infinito, alternando tra il nome partner iniziale e il nome partner di failover.When both partner names are available, if the login time-out period is infinite, the client attempts to reconnect to the servers indefinitely, alternating between the initial partner name and the failover partner name.

Ritardi di riesecuzione dei tentativi durante il failoverRetry Delays During Failover

Se un client tenta di connettersi a un partner durante il failover, il partner risponde immediatamente che non è attivo.If a client attempts to connect to a partner that is failing over, the partner immediately responds that it is inactive. In questo caso, ogni ciclo di tentativi di connessione è molto più breve del tempo di riesecuzione stabilito.In this case, each round of connection attempts are much briefer than the allotted retry time. Potranno pertanto essere eseguiti molti cicli di tentativi di connessione prima del timeout del periodo di accesso. Per evitare l'overload dei partner con una serie rapida di tentativi di connessione durante un failover, il provider di accesso ai dati aggiunge un breve ritardo dopo ogni ciclo di riesecuzione dei tentativi.This means that many rounds of connection attempts could happen before the login period times out. To avoid overloading the partners with a rapid series of connection attempts during a failover, the data access provider adds a brief retry delay after each retry cycle. La durata di tale ritardo è determinata dall'algoritmo di ritardo dei tentativi.The length of a given retry delay is determined by the retry-delay algorithm. Dopo il primo ciclo, il ritardo è di 100 millisecondi.After the first round, the delay is 100 milliseconds. Dopo ognuno dei tre cicli successivi, il ritardo raddoppia (200, 400 e 800).After each of the next three rounds, the retry delay doubles—to 200, 400, and 800. Per tutti i cicli successivi, il ritardo dei tentativi è di 1 secondo fino alla riuscita o al timeout del tentativo di connessione.For all later rounds, the retry delay is 1 second until the connection attempt succeeds or times out.

Nota

Se l'istanza del server viene arrestata, la richiesta di connessione ha immediatamente esito negativo.If the server instance is stopped, then the connection request fails immediately.

Nella figura seguente viene illustrato il modo in cui il ritardo dei tentativi influisca sui tentativi di connessione durante un failover manuale in cui i partner cambiano di ruolo.The following figure illustrates how the retry delay affects connection attempts during a manual failover, in which the partners switch their roles. Il periodo di timeout di accesso è 15 secondi.The login time-out period is 15 seconds.

Algoritmo di ritardo dei tentativi di riesecuzioneRetry-delay algorithm

Riconnessione a una sessione di mirroring del database Reconnecting to a Database Mirroring Session

Se una connessione stabilita a una sessione di mirroring del database ha esito negativo per qualsiasi motivo, ad esempio a causa di un failover di mirroring del database, e l'applicazione tenta di riconnettersi al server iniziale, il provider di accesso ai dati può tentare di ristabilire la connessione utilizzando il nome del partner di failover memorizzato nella cache del client.If an established connection to a database mirroring session fails for any reason, for example, due to a database mirroring failover, and the application attempts to reconnect to the initial server, the data access provider can attempt to reconnect using the failover partner name stored in the client's cache. La riconnessione non è tuttavia automatica.Reconnecting is not automatic, however. È necessario che l'applicazione riconosca l'errore,The application must become aware of the error. chiuda la connessione non riuscita e ne apra una nuova utilizzando gli stessi attributi della stringa di connessione.Then, the application needs to close the failed connection and open a new connection using the same connection string attributes. A questo punto, il provider di accesso ai dati reindirizzerà la connessione al partner di failover.At this point, the data access provider redirects the connection to the failover partner. Se l'istanza del server identificata da questo nome è attualmente il server principale, il tentativo di connessione ha in genere esito positivo.If the server instance identified by this name is currently the principal server, the connection attempt usually succeeds. Se non è chiaro se è stato eseguito il commit o il rollback di una transazione, l'applicazione dovrà verificare lo stato della transazione, come durante la riconnessione a un'istanza del server autonoma.If it is unclear whether a transaction was committed or rolled back, the application must check on the state of the transaction, in the same way as when reconnecting to a stand-alone server instance.

La riconnessione è analoga a una connessione iniziale per la quale la stringa di connessione specifica un nome partner di failover.Reconnecting resembles an initial connection for which the connection string supplied a failover partner name. Se il primo tentativo di connessione ha esito negativo, si alternano tentativi di connessione tra il nome partner iniziale e il nome partner di failover finché il client non si connette al server principale oppure fino al timeout del provider di accesso ai dati.If the first connection attempt fails, connection attempts alternate back and forth between the initial partner name and failover partner name until either the client connects to the principal server or the data access provider times out.

Nota

SQL ServerSQL Server Native Client verifica che venga eseguita la connessione a un'istanza del server principale, ma non controlla se questa istanza sia partner dell'istanza del server specificata nel nome partner iniziale della stringa di connessione. Native Client verifies that it connects to a principal server instance but not whether this instance is the partner of server instance specified in the initial partner name of the connection string.

Se per le connessioni viene utilizzato TCP/IP, l'algoritmo di riesecuzione dei tentativi di connessione determina la quantità di tempo stabilita per i tentativi di connessione in ogni ciclo.If the connections use TCP/IP, the connection retry algorithm determines the amount of time allotted to the connection attempts in each round.

Importante

In caso di disconnessione del client dal database, il provider di accesso ai dati non tenterà di ristabilire la connessione.If the client gets disconnected from the database, the data access provider does not attempt to reconnect. È necessario che il client generi una nuova richiesta di connessione.The client must issue a new connection request. Inoltre, se un'applicazione si arresta in seguito alla perdita della connessione, i nomi partner memorizzati nella cache andranno persi.Also, if an application shuts down on losing the connection, it will lose the cached partner names. Se la connessione è andata persa perché il server principale non era più disponibile, l'unico modo per ristabilire la connessione dell'applicazione al server mirror consiste nel fornire il nome partner di failover nella relativa stringa di connessione.If the connection was lost because the principal server became unavailable, the only way that the application can reconnect to the mirror server is by supplying the failover partner name in its connection string.

Impatto del reindirizzamento su un'applicazione clientImpact of Redirection on a Client Application

Dopo un failover, il provider di accesso ai dati reindirizza la connessione all'istanza del server principale corrente.After a failover, the data access provider redirects the connection to the current principal server instance. Tuttavia, il reindirizzamento è trasparente per i client.However, the redirection is transparent to clients. A un client, una connessione reindirizzata appare come una connessione all'istanza del server identificata dal nome partner iniziale.To a client, a redirected connection appears to be a connection to the server instance identified by the initial partner name. Se il partner iniziale è attualmente il server mirror, il client può apparire come se fosse connesso al server mirror e aggiornasse il database mirror.When the initial partner is currently the mirror server, the client can appear to be connected to the mirror server and updating the mirror database. In realtà, tuttavia, il client è stato reindirizzato al partner di failover, ovvero il database principale corrente, e sta aggiornando il nuovo database principale.Actually, however, the client has been redirected to the failover partner, which is the current principal database, and the client is updating the new principal database.

Dopo essere stato reindirizzato al partner di failover, un client può riscontrare risultati imprevisti durante l'utilizzo di un'istruzione Transact-SQLTransact-SQL USE per utilizzare un database diverso.After being redirected to the failover partner, a client can experience unexpected results when using a Transact-SQLTransact-SQL USE statement to use a different database. Questa situazione può verificarsi se l'istanza del server principale corrente (il partner di failover) presenta un set diverso di database rispetto al server principale originale (il partner iniziale).This can happen if the current principal server instance (the failover partner) has a different set of databases than the original principal server (the initial partner).

Impatto di un nome partner di failover non aggiornato The Impact of a Stale Failover Partner Name

L'amministratore del database può modificare il partner di failover in qualunque momento.The database administrator can change the failover partner at any time. Pertanto, un nome partner di failover specificato dal client potrebbe essere scaduto o non aggiornato.Therefore, a client-supplied failover partner name might be out of date, or stale. Ad esempio, considerare un partner di failover denominato Partner_B che viene sostituito da un'altra istanza del server, Partner_C.For example, consider a failover partner named Partner_B that is replaced by another server instance, Partner_C. Ora, se un client fornisce Partner_B come nome del partner di failover, tale nome è non aggiornato.Now, if a client supplies Partner_B as the failover partner name, that name is stale. Se il nome partner di failover specificato dal client non è aggiornato, il provider di accesso ai dati si comporta come se il client non avesse fornito alcun nome partner di failover.When the client-supplied failover partner name is stale, the behavior of the data access provider equates to the case in which a failover partner name is not supplied by the client.

Si consideri ad esempio la situazione in cui un client utilizza una stringa di connessione per una serie di quattro tentativi di connessione.For example, consider situation in which a client uses one connection string for a series of four connection attempts. Nella stringa di connessione il nome partner iniziale è Partner_A e il nome partner di failover è Partner_B:In the connection string, the initial partner name is Partner_A, and the failover partner name is Partner_B:

"Server=Partner_A; Failover Partner=Partner_B; Database=AdventureWorks"  

Nella tabella seguente sono riportate quattro configurazioni partner, per ognuna delle quali viene indicato se la stringa di connessione specificata consente la connessione del client per la prima volta.The following table shows four partner configurations and indicates for each whether this connection string works for connecting the client for the first time.

Nota

Un'applicazione può tenere traccia delle modifiche alla configurazione e modificare di conseguenza la propria stringa di connessione.An application can track configuration changes and change its connection string accordingly. Questo richiede codice aggiuntivo ma riduce il carico amministrativo.This requires extra code but reduces the administrative burden.

ConfigurazioneConfiguration Server principalePrincipal server Server mirrorMirror server Comportamento al tentativo di connessione specificando Partner_A e Partner_BBehavior when attempting to connect specifying Partner_A and Partner_B
Configurazione di mirroring originale.Original mirroring configuration. Partner_APartner_A Partner_BPartner_B Partner_A viene memorizzato nella cache come nome partner iniziale.Partner_A is cached as the initial partner name. Il client riesce a connettersi a Partner_A.The client succeeds in connecting to Partner_A. Il client scarica il nome del server mirror, Partner_B, e lo memorizza nella cache, ignorando il nome partner di failover specificato dal client.The client downloads the name of mirror server, Partner_B, and caches it, ignoring the client-supplied failover partner name.
In Partner_A si verifica un errore hardware, che provoca il failover, disconnettendo i client.Partner_A experiences a hardware failure, and failover occurs (disconnecting clients). Partner_BPartner_B nonenone Partner_A è ancora memorizzato nella cache come nome partner iniziale, ma il nome partner di failover specificato dal client, Partner_B, consente al client di connettersi al server principale corrente.The Partner_A is still cached as the initial partner name, but the client-supplied failover partner name, Partner_B, permits the client to connect to the current principal server.
L'amministratore del database arresta il mirroring, disconnettendo i client, sostituisce Partner_A con Partner_C e riavvia il mirroring.The database administrator stops mirroring (disconnecting clients), replaces Partner_A with Partner_C, and restarts mirroring. Partner_BPartner_B Partner_CPartner_C Il client tenta di connettersi senza successo a Partner_A. Il client tenta quindi di connettersi a Partner_B, ovvero il server principale corrente, e la connessione ha esito positivo.The client attempts to connect to Partner_A and fails; then the client tries Partner_B (the current principal server) and succeeds. Il provider di accesso ai dati scarica il nome del server mirror corrente, Partner_C, e lo memorizza nella cache come nome partner di failover corrente.The data access provider downloads the name of the current mirror server, Partner_C, and caches it as the current failover partner name.
Viene eseguito il failover manuale del servizio su Partner_C, disconnettendo i client.Service is manually failed over to Partner_C (disconnecting clients). Partner_CPartner_C Partner_BPartner_B Il client tenta di connettersi inizialmente a Partner_A, quindi a Partner_B.Client attempts to connect to Partner_A initially, and then to Partner_B. Entrambi i nomi generano errori e infine si verifica il timeout della richiesta di connessione, la quale avrà esito negativo.Both names fail, and eventually the connection request times out and fails.

Vedere ancheSee Also

Mirroring del database (SQL Server) Database Mirroring (SQL Server)
Possibili errori durante il mirroring del databasePossible Failures During Database Mirroring