Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Risoluzione dei problemi di replica di SQL Server

Nell'articolo precedente, Impostazione e configurazione della replica di SQL Server, abbiamo discusso in modo approfondito il concetto di replica di SQL Server, i suoi componenti, i tipi e come configurare la replica transazionale SQL passo dopo passo. Si consiglia vivamente di esaminare l'articolo precedente e comprendere il concetto di replica e i suoi componenti prima di leggere questo articolo. In questo articolo, vedremo come risolvere un sito di replica di SQL Server esistente.

Panoramica sulla risoluzione dei problemi

L'obiettivo principale della replica di SQL Server è mantenere sincronizzati i dati nell'editore e nel Sottoscrittore. Nello scenario felice, se una transazione viene eseguita e salvata nel database di pubblicazione, verrà copiata nel database di distribuzione, quindi sincronizzata e applicata a tutti i Sottoscrittori collegati a quel Publisher. Se si verifica un problema in qualsiasi fase di questo processo, le modifiche dell'editore non saranno disponibili per l'abbonato. In questo caso, è necessario risolvere e risolvere il problema il prima possibile prima di ritrovarsi con un sito di replica SQL scaduto che dovrebbe essere sincronizzato nuovamente da zero o un database con il relativo file di registro delle transazioni esaurisce lo spazio libero, sospendendo tutte le transazioni del database .

L'identificazione del passaggio in cui la sincronizzazione della replica non riesce e l'allocazione di un messaggio di errore indicativo che porta a risolvere il problema è la parte più impegnativa del processo di risoluzione dei problemi di replica di SQL ServerSQL Server. Inoltre, il controllo dell'ultima ora di sincronizzazione e delle modifiche eseguite a/dopo tale ora che potrebbero causare questo errore può anche aiutare a risolvere l'errore di sincronizzazione della replica.

La comprensione del ruolo dell'agente di replica di SQL Server consentirà di identificare il passaggio in cui la sincronizzazione non riesce. Ricordiamo che esistono tre agenti di replica comuni tra la maggior parte dei tipi di replica di SQL Server. L'agente snapshot è responsabile della creazione dello snapshot di sincronizzazione iniziale. L'agente per la lettura dei log è responsabile della lettura delle modifiche dal file di registro delle transazioni del database e della copia nel database di distribuzione e, infine, della Distribuzione agente responsabile della sincronizzazione delle modifiche con gli abbonati.

In questo articolo, sfrutteremo il Monitoraggio della replica e Monitoraggio dell'attività lavorativa Windows nel monitoraggio dello stato della replica di SQL Server e nell'ottenimento di informazioni su eventuali errori di sincronizzazione non riusciti.

Scenari di risoluzione dei problemi

Il modo migliore e diretto per capire come risolvere i problemi di replica di SQL Server è fornire scenari pratici e mostrare come risolvere questo particolare problema. Iniziamo a discutere gli scenari uno per uno.

Problema con il servizio di SQL Server Agent

Il servizio SQL Server Agent svolge un ruolo fondamentale nel processo di sincronizzazione della replica di SQL Server. Ciò è dovuto al fatto che ogni agente di replica verrà eseguito in un processo dell'agente SQL.

Essendo un amministratore di database proattivo, è necessario controllare lo stato del sito di replica SQL su base giornaliera. Per controllare lo stato del sito di replica, fare clic con il pulsante destro del mouse su Pubblicazione, sotto il nodo Replica -> Pubblicazioni locali, e scegliere Launch Replication Monitor opzione, come mostrato di seguito:

Dalla finestra Replication Monitor, puoi visualizzare un messaggio di avviso, che mostra che la replica scadrà presto o è già scaduta, senza visualizzare alcun messaggio di errore indicativo, come di seguito:

Se la finestra Replication Monitor non ci fornisce informazioni utili sul motivo per cui il sito di replica sta per scadere, il passaggio successivo consiste nel controllare Job Activity Monitor nel nodo di SQL Server Agent. Visitando il nodo di SQL Server Agent, vedrai direttamente che il servizio di SQL Server Agent non è in esecuzione (dal cerchio rosso accanto ad esso). Se il servizio SQL Server Agent non è in esecuzione, significa che tutti i processi creati in quell'istanza non funzionano, inclusi i processi dell'agente di replica. Di conseguenza, l'intero sito di replica non funziona.

Per risolvere il problema, è necessario avviare il servizio SQL Server Agent direttamente da SQL Server Management Studio o utilizzando SQL Server Configuration Manager (consigliato), come mostrato di seguito:

Dopo aver avviato il servizio SQL Server Agent, controllare di nuovo Replication Monitor e assicurarsi che lo stato dell'abbonato sia In esecuzione e tutte le transazioni in sospeso vengono sincronizzate correttamente con l'abbonato. Puoi controllare questi passaggi uno per uno, verificando che i record vengano copiati dalla sezione Editore a Distributore:

Quindi sincronizzato dal Distributore all'Abbonato con successo, come di seguito:

E infine assicurati che non ci siano transazioni non distribuite dall'ultima scheda, come mostrato di seguito:

Dopodiché, dobbiamo assicurarci che i lavori degli agenti di replica siano attivi e in esecuzione senza problemi. È possibile controllare i processi dell'agente SQL espandendo il nodo dell'agente SQL Server in Esplora oggetti SSMS e visualizzare il monitoraggio dell'attività dei processi, quindi verificare se l'agente di lettura log e l'agente di distribuzione sono in esecuzione, tenendo in considerazione che l'agente snapshot funzionerà solo durante il processo di creazione dello snapshot, come mostrato di seguito:

Puoi anche rivedere la cronologia dei lavori degli agenti di replica e controllare il motivo dell'errore precedente, facendo clic con il pulsante destro del mouse su quel lavoro e scegliendo Visualizza cronologia opzione come di seguito:

Dove potresti trovare un messaggio di errore indicativo che aiuta a superare questo problema in futuro, come di seguito:

Per ovviare al problema precedente, la modalità di avvio del servizio SQL Server Agent dovrebbe essere modificata da Manuale ad Automatica, in questo modo ti assicurerai che il servizio si avvii automaticamente al riavvio del server di hosting.

Problema di autorizzazione dell'agente snapshot

Si supponga che durante il controllo dello stato della replica di SQL Server, utilizzando il monitoraggio della replica, si è notato che si è verificato un errore di replica, dal segno X all'interno del cerchio rosso. E il Monitor replica mostra che l'errore proviene da uno degli agenti di replica, dal segno X all'interno del cerchio rosso nella parte superiore della scheda Agenti.

Per identificare l'errore di replica, dobbiamo sfogliare la scheda Agenti e controllare quale agente non riesce. Dalla pagina Agenti, vedrai che l'agente snapshot è quello in errore. Fare doppio clic sull'agente snapshot ed esaminare il seguente messaggio di errore:

L'agente di replica non ha registrato un messaggio di avanzamento da 10 minuti. Ciò potrebbe indicare un agente che non risponde o un'attività di sistema elevata. Verifica che i record vengano replicati nella destinazione e che le connessioni all'abbonato, all'editore e al distributore siano ancora attive.

Sfortunatamente, questo messaggio di errore è generico e mostra solo che l'agente snapshot non funziona senza specificarne il motivo, come segue:

Quindi dobbiamo cercare informazioni utili in un altro posto, che è il lavoro di Snapshot Agent. Nella finestra Job Activity Monitor, nel nodo SQL Server Agent, è possibile vedere che il processo di Snapshot Agent non è riuscito. E da quella cronologia dei lavori, puoi vedere che non è riuscito di recente, a causa del problema di autenticazione del proxy. In altre parole, le credenziali dell'account con cui viene eseguito Snapshot Agent non sono corrette, come mostrato di seguito:

Per risolvere il problema delle credenziali dell'agente snapshot, fare clic con il pulsante destro del mouse sulla pubblicazione, sotto il nodo Replica -> Pubblicazione locale, e scegliere le Proprietà opzione. Dalla finestra delle proprietà della pubblicazione, sfoglia la Sicurezza agente pagina e reinserire le credenziali dell'account con cui verrà eseguito Snapshot Agent.

Dopo aver aggiornato le credenziali dell'account dell'agente snapshot, avvia nuovamente il processo dell'agente snapshot dalla finestra Monitoraggio attività processo e assicurati che il processo funzioni correttamente, come illustrato di seguito:

Inoltre, controlla se l'agente snapshot ora funziona correttamente e il messaggio di errore non viene più visualizzato in Replication Monitor, come mostrato di seguito:

Problema di autorizzazione della cartella snapshot

Si supponga che, quando si tenta di sincronizzare l'editore e l'abbonato utilizzando lo snapshot iniziale o di risincronizzare il sito di replica dello snapshot utilizzando un nuovo snapshot, il processo di creazione dello snapshot non è riuscito con il seguente messaggio di errore di accesso:

Questo messaggio di errore mostra che l'account con cui è in esecuzione l'agente snapshot non dispone dell'autorizzazione per accedere alla cartella snapshot specificata nel messaggio di errore.

Per risolvere il problema, dobbiamo controllare l'account con cui è in esecuzione Snapshot Agent, dalla pagina Agent Security della finestra delle proprietà della pubblicazione, come mostrato di seguito:

Quindi sfoglia la cartella snapshot specificata nel messaggio di errore e assicurati che questo account snapshot disponga di un'autorizzazione di lettura-scrittura minima su quella cartella, quindi esegui di nuovo l'agente snapshot e verifica che il problema sia stato risolto ora e che lo snapshot di sincronizzazione sia stato creato correttamente, poiché sotto:

Problema di autorizzazione dell'abbonato

Si supponga che, durante il controllo dello stato del sito di replica di SQL Server, utilizzando il monitoraggio della replica, si verifica un errore con l'abbonato, come mostrato di seguito:

Se fai clic sull'icona di errore, vedrai che si è verificato l'errore durante il tentativo di sincronizzare le transazioni dal Distributore all'Abbonato. E dal messaggio di errore, è chiaro che il distributore non è in grado di connettersi all'istanza SQL Server dell'abbonato a causa di problemi di autorizzazione, come mostrato di seguito:

Per risolvere il problema, è necessario controllare e aggiornare le credenziali utilizzate per connettersi all'istanza dell'abbonato. Per verificare le credenziali, fare clic con il tasto destro del mouse su Abbonamento sotto il nodo Replica -> Pubblicazioni locali -> il nome della pubblicazione corrente e scegliere l'opzione Proprietà. Dalla Connessione abbonati campo sotto la finestra Proprietà abbonato, aggiorna le credenziali per l'account che verrà utilizzato per connettersi all'istanza abbonato, come mostrato di seguito:

Dopodiché, controlla di nuovo lo stato della replica da Replication Monitor e vedrai che il problema di connessione dell'abbonato non è più disponibile e il sito di replica funziona normalmente, come mostrato di seguito:

Abbonato non raggiungibile

Un altro problema di errore di replica di SQL Server che potresti incontrare dal lato dell'abbonato è che il distributore non è in grado di connettersi all'abbonato, mostrando sotto il distributore alla pagina dell'abbonato che non è in grado di aprire la connessione con l'abbonato a causa di "Rete Correlato…” errore di connettività, mostrato nella finestra Replication Monitor di seguito:

Questo messaggio di errore indica che esiste un problema di connessione tra l'istanza del distributore e l'istanza del Sottoscrittore. Il primo e semplice modo per verificare questo problema di connettività consiste nell'assicurarsi che l'istanza di SQL Server del sottoscrittore sia online. Questo può essere verificato da Gestione configurazione SQL Server dal lato dell'abbonato. Nella nostra situazione, possiamo vedere che il servizio SQL Server sul lato dell'abbonato è interrotto. Per risolvere il problema, avviare il servizio SQL Server e verificare da Replication Monitor che il sito di replica sia nuovamente sincronizzato, come illustrato di seguito. Per problemi di connettività SQL più avanzati, controlla il documento Risoluzione dei problemi di connettività MS:

Problema di autorizzazione del database dell'abbonato

Si supponga di controllare lo stato di sincronizzazione della replica di SQL Server, utilizzando il monitoraggio della replica, e si rileva che la replica non riesce durante il tentativo di replicare le modifiche dal distributore al Sottoscrittore, facendo clic sull'errore del sottoscrittore, vedrai che il Il distributore è in grado di raggiungere l'abbonato e connettersi ad esso, ma non è in grado di connettersi al database dell'abbonamento per mancanza di autorizzazione, come mostrato di seguito:

Per risolvere il problema, connettiti all'abbonato e assicurati che l'account utilizzato per connettersi al database dell'abbonato sia un membro del ruolo fisso del database db_Owner, come mostrato di seguito:

Dopodiché, controlla di nuovo Replication Monitor e assicurati che il Distributore sia in grado di raggiungere il database di sottoscrizione e replicare le modifiche, come di seguito:

Problema di differenza di dati

Si supponga che uno dei team di sviluppo del database affermi che alcune modifiche apportate alla tabella Shifts nell'editore (SQL1) non si riflettono nei report giornalieri eseguiti sull'istanza dell'abbonato (SQL2) e ha fornito lo snapshot di seguito che mostra che le modifiche non vengono replicate:

Il primo passaggio per la verifica del problema di sincronizzazione della replica è l'apertura di Replication Monitor e individuare in quale passaggio non riesce. Dal Monitor replica, puoi vedere che l'agente di lettura del registro non riesce, poiché le modifiche non vengono replicate dal distributore all'abbonato, ma non viene restituito alcun messaggio chiaro da quell'agente, come mostrato di seguito:

Poiché non riusciamo a trovare messaggi di errore significativi da Replication Monitor, verificheremo la cronologia del lavoro dell'agente di lettura log, utilizzando Job Activity Monitor, che mostra che le credenziali per l'account con cui è in esecuzione l'agente di lettura log non sono corrette , come mostrato di seguito:

Per risolvere il problema delle credenziali di Log Reader Agent, sfoglia la pagina Agent Security della finestra delle proprietà della pubblicazione e aggiorna le credenziali di Log Reader Agent con una valida, come di seguito:

Controllando nuovamente il Monitor replica, vedrai che le modifiche vengono replicate correttamente e che i dati vengono aggiornati con le nuove modifiche ai turni, come mostrato di seguito:

Riga non trovata in Abbonato

Esaminiamo la questione da un altro lato. Diciamo che c'è una modifica eseguita nella tabella dei turni come mostrato di seguito:

Ma questa modifica non viene replicata nel Sottoscrittore e l'intero sito di replica di SQL Server non è riuscito. Da Replication Monitor, puoi vedere che non riesce durante il tentativo di apportare la modifica dal Distributore al Sottoscrittore e non è riuscito a causa del fatto che non è in grado di aggiornare quel record specifico con ID uguale a 3, perché questo record non è disponibile nella tabella del database degli abbonati, come mostrato di seguito:

Controllando quel record sul lato Abbonato (SQL2), vedrai che il record non è disponibile, come di seguito:

Per ovviare a questo problema, dobbiamo inserire nuovamente quel record nella tabella del database degli abbonati e lasciare che il Distributore provi ad aggiornarlo di nuovo, risolvendo il problema di errore di sincronizzazione della replica, come mostrato di seguito:

SQL Server offre un'opzione per consentire al sito di replica di continuare a funzionare anche se viene rilevato un problema di incoerenza dei dati, in cui è possibile risolvere manualmente questo problema di incoerenza in un secondo momento. A tale scopo, da Replication Monitor, fai clic con il pulsante destro del mouse sull'abbonato e scegli Profilo agente opzione, come mostrato di seguito:

Dalla finestra visualizzata, puoi aggiornare il profilo dell'agente di lettura log e consentirgli di continuare a replicare le modifiche ai dati in caso di problemi di incoerenza dei dati, come mostrato di seguito:

Problema di abbonamento non inizializzato

Se il sito di replica viene lasciato senza monitoraggio per molto tempo e si verifica un errore senza alcuna correzione per più di tre giorni, il sito di replica sarà scaduto e l'abbonamento verrà contrassegnato come non inizializzato, in attesa di essere reinizializzato utilizzando un nuovo snapshot . Lo stesso scenario può essere affrontato quando si crea un nuovo Abbonamento senza inizializzarlo, come mostrato di seguito:

Per risolvere il problema, dovremmo reinizializzare quell'abbonamento, facendo clic con il pulsante destro del mouse sull'abbonamento sotto il nodo Replica -> Pubblicazioni locali ed espandere la pubblicazione, quindi scegliere l'opzione Reinizializza e contrassegnare questo abbonamento per l'inizializzazione e renderlo pronto per ricevere un nuovo istantanea, come mostrato di seguito:

Se lo stato della sottoscrizione rimane non inizializzato dopo la reinizializzazione, controllare il lavoro dell'agente snapshot utilizzando la finestra Monitoraggio attività lavoro e vedere perché non riesce. Dalla cronologia dei lavori dell'agente snapshot, vedrai che il lavoro non è riuscito a causa di un problema che determina il proprietario del lavoro dell'agente, come mostrato di seguito:

Per ovviare a questo problema, apri il lavoro Snapshot Agent e cambia il proprietario del lavoro in SA o qualsiasi utente amministratore valido e il lavoro verrà eseguito correttamente, come indicato di seguito:

Ora vedrai che lo stato dell'abbonamento è cambiato in In esecuzione, dato che è in attesa dell'istantanea iniziale per avviare il processo di sincronizzazione, come mostrato di seguito:

Per generare una nuova istantanea, fai clic con il pulsante destro del mouse sulla pubblicazione, sotto il nodo Replica-> Pubblicazioni locali, e seleziona Visualizza stato dell'agente snapshot opzione.

Dalla finestra aperta, fare clic sul pulsante Start per avviare il processo di creazione dell'istantanea. Quando lo snapshot che contiene tutti gli articoli del Publisher è stato creato correttamente, apri nuovamente il Monitor replica e controlla lo stato dell'Abbonamento, dove vedrai che lo snapshot è applicato all'Abbonato e sincronizzato con il Publisher, come mostrato di seguito:

Problema con il proprietario del database dell'editore

Si supponga inoltre che, durante il controllo dello stato del sito di replica di SQL Server, utilizzando Replication Monitor, il sito di replica non è riuscito e l'errore è stato rilevato nell'agente di lettura log. Controllando il messaggio di errore restituito da quell'agente, è emerso che si è verificato un problema nel determinare l'attuale proprietario del database di pubblicazione, come mostrato di seguito:

Per risolvere il problema, è necessario aggiornare l'attuale proprietario del database di pubblicazione, sostituendolo con un utente del database valido, utilizzando SP_changedbowner stored procedure di sistema o semplicemente dalla finestra delle proprietà del database. Dopodiché, esegui nuovamente il processo dell'agente di lettura log, utilizzando la finestra Monitoraggio attività processo, quindi convalida se il problema dell'agente non è più disponibile, utilizzando Monitoraggio replica, come mostrato di seguito:

Conclusione

In questo articolo sono stati illustrati diversi problemi che potresti incontrare durante l'utilizzo della funzionalità di replica di SQL ServerSQL Server per copiare dati tra siti diversi e come risolverli.

Si consiglia vivamente di mantenere aggiornato il motore di SQL Server, con gli SP e le CU più recenti, in modo che tutti i bug relativi alle funzionalità di replica di SQL Server vengano corretti automaticamente. Infine, in qualità di amministratore proattivo del database di SQL Server, tieni d'occhio il tuo sito di replica per risolvere qualsiasi problema dall'inizio prima che diventi più grande e più difficile da risolvere.