Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I problemi fisici, del sistema operativo o di SQL Server possono causare un errore in una sessione di mirroring del database. Il mirroring del database non controlla regolarmente i componenti su cui Sqlservr.exe si basa per verificare se funzionano correttamente o hanno avuto esito negativo. Tuttavia, per alcuni tipi di errori, il componente interessato segnala un errore a Sqlservr.exe. Un errore segnalato da un altro componente viene chiamato errore rigido. Per rilevare altri errori che altrimenti non verrebbero rilevati, il mirroring del database implementa il proprio meccanismo di timeout. Quando si verifica un timeout del mirroring, il mirroring del database presuppone che si sia verificato un errore e dichiari un errore software. Tuttavia, alcuni errori che si verificano a livello di istanza di SQL Server non causano il timeout del mirroring e possono non essere rilevati.
Importante
Gli errori nei database diversi dal database con mirroring non sono rilevabili in una sessione di mirroring del database. Inoltre, è improbabile che venga rilevato un errore del disco dati, a meno che il database non venga riavviato a causa di un errore del disco dati.
La velocità di rilevamento degli errori e, pertanto, il tempo di reazione della sessione di mirroring a un errore, dipende dal fatto che l'errore sia difficile o flessibile. Alcuni errori rigidi, ad esempio gli errori di rete, vengono segnalati immediatamente. Tuttavia, in alcuni casi, i periodi di timeout specifici del componente possono ritardare la segnalazione di alcuni errori rigidi. Per gli errori flessibili, la durata del periodo di timeout del mirroring determina la velocità di rilevamento degli errori. Per impostazione predefinita, questo periodo è 10 secondi. Questo è il valore minimo consigliato.
Errori causati da errori rigidi
Le possibili cause di errori rigidi includono (ma non solo) le condizioni seguenti:
Connessione o collegamento interrotto
Una scheda di rete non valida
Modifica del router
Modifiche apportate al firewall
Riconfigurazione dell'endpoint
Perdita dell'unità in cui risiede il log delle transazioni
Errore del sistema operativo o del processo
Ad esempio, quando il disco di log nel database principale diventa non rispondente e si guasta, il sistema operativo informa Sqlservr.exe che si è verificato un errore grave.
Alcuni componenti, ad esempio componenti di rete e alcuni sottosistemi di I/O, hanno i propri timeout per determinare gli errori. Tali timeout sono indipendenti dal mirroring del database, che non ne ha conoscenza ed è completamente inconsapevole del loro comportamento. In questi casi, il ritardo di timeout aumenta il tempo tra il verificarsi di un errore e il momento in cui il mirroring del database riceve l'errore critico risultante.
Annotazioni
L'unico controllo errori attivo che viene eseguito per il mirroring del database riguarda casi di errore lieve. Per altre informazioni, vedere "Errori dovuti a errori soft", più avanti in questo argomento.
Per interpretare le condizioni di errore che si verificano in rete, chiedere a un tecnico di rete quali messaggi di errore vengono inviati a una porta quando si verificano gli eventi seguenti in una connessione TCP:
DNS non funziona.
I cavi sono scollegati.
Microsoft Windows dispone di un firewall che blocca una porta specifica.
L'applicazione che sta monitorando una porta non riesce.
Un server basato su Windows viene rinominato.
Viene riavviato un server basato su Windows.
Annotazioni
Il mirroring non protegge da problemi specifici per il client che accede ai server. Si consideri, ad esempio, un caso in cui una scheda di rete pubblica gestisce le connessioni client all'istanza del server principale, mentre una scheda di interfaccia di rete privata gestisce tutto il traffico di mirroring tra le istanze del server. In questo caso, il guasto della scheda di rete pubblica impedirebbe ai client di accedere al database, sebbene il database continuerebbe a essere sottoposto a mirroring.
Errori causati da errori soft
Le condizioni che potrebbero causare timeout del mirroring includono(ma non sono limitate a) quanto segue:
Errori di rete, ad esempio timeout dei collegamenti TCP, pacchetti eliminati o danneggiati o pacchetti in un ordine non corretto.
Un sistema operativo, un server o un database che non risponde.
Un server Windows ha esaurito il tempo di connessione.
Risorse di calcolo insufficienti, come il sovraccarico della CPU o del disco, il riempimento del log delle transazioni, o il sistema che esaurisce la memoria o i thread. In questi casi, è necessario aumentare il periodo di timeout, ridurre il carico di lavoro o modificare l'hardware per gestire il carico di lavoro.
Meccanismo di Mirroring Time-Out
Poiché gli errori soft non sono rilevabili direttamente da un'istanza del server, un errore soft potrebbe causare un'attesa illimitata di un'istanza del server. Per evitare questo problema, il mirroring del database implementa il proprio meccanismo di timeout, in base a ogni istanza del server in una sessione di mirroring che invia un ping a ogni connessione aperta a intervalli fissi.
Per mantenere aperta una connessione, un'istanza del server deve ricevere un ping su tale connessione nel periodo di timeout definito, più il tempo necessario per inviare un altro ping. La ricezione di un ping durante il periodo di timeout indica che la connessione è ancora aperta e che le istanze del server comunicano su di essa. Quando si riceve un ping, un'istanza del server reimposta il contatore di timeout su tale connessione.
Se non viene ricevuto alcun ping su una connessione durante il periodo di timeout, un'istanza del server considera il timeout della connessione. L'istanza del server chiude la connessione di timeout e gestisce l'evento di timeout in base allo stato e alla modalità operativa della sessione.
Anche se l'altro server procede correttamente, un timeout viene considerato un errore. Se il valore di timeout per una sessione è troppo breve per la velocità di risposta regolare di uno dei partner, possono verificarsi errori false. Un errore falso si verifica quando un'istanza del server contatta correttamente un'altra il cui tempo di risposta è così lento che i ping non vengono ricevuti prima della scadenza del periodo di timeout.
Nelle sessioni in modalità a prestazioni elevate, il periodo di timeout è sempre di 10 secondi. Questo è in genere sufficiente per evitare errori falsi. Nelle sessioni in modalità a sicurezza elevata, il periodo di timeout predefinito è di 10 secondi, ma è possibile modificare la durata. Per evitare falsi errori, è consigliabile impostare il periodo di timeout per il mirroring su 10 secondi o più.
Per modificare il valore di timeout (solo modalità a sicurezza elevata)
- Utilizzare l'istruzione ALTER DATABASE <database> SET PARTNER TIMEOUT <integer>.
Per visualizzare il valore di timeout corrente
- Query mirroring_connection_timeout in sys.database_mirroring.
Risposta a un errore
Indipendentemente dal tipo di errore, un'istanza del server che rileva un errore risponde in modo appropriato in base al ruolo dell'istanza, alla modalità operativa della sessione e allo stato di qualsiasi altra connessione nella sessione. Per informazioni su ciò che si verifica sulla perdita di un partner, vedere Modalità operative del mirroring del database.
Vedere anche
Stimare l'interruzione del servizio durante il cambio di ruolo (mirroring del database)
Modalità operative di mirroring del database
Cambio di ruolo durante una sessione di mirroring del database (SQL Server)
Mirroring del database (SQL Server)