Risolvere i problemi della sincronizzazione dati SQL

Si applica a: Database SQL di Azure

Questo articolo descrive come risolvere i problemi noti relativi a sincronizzazione dati SQL in Azure. Le possibili risoluzioni a un problema vengono fornite qui.

Per una panoramica della sincronizzazione dati SQL, vedere Sincronizzare i dati tra più database cloud e locali con la sincronizzazione dati SQL in Azure.

Importante

sincronizzazione dati SQL non supporta attualmente Istanza gestita di SQL di Azure o Azure Synapse Analytics.

Problemi di sincronizzazione

La sincronizzazione non viene eseguita correttamente nell'interfaccia utente del portale per i database locali associati all'agente client.

La sincronizzazione non viene eseguita correttamente nell'interfaccia utente del portale di sincronizzazione dati SQL per i database locali associati all'agente client. Nel computer locale che esegue l'agente vengono visualizzati System.IO.IOException errori nel registro eventi. Gli errori indicano che lo spazio su disco non è sufficiente.

  • Causa. L'unità dispone di spazio sufficiente.

  • Risoluzione. Creare più spazio nell'unità in cui si trova la directory %TEMP%.

Il gruppo di sincronizzazione è bloccato nello stato di elaborazione

Un gruppo di sincronizzazione in sincronizzazione dati SQL è rimasto nello stato di elaborazione per un lungo periodo. Non risponde al comando di arresto e il log non indica voci nuove.

Una delle condizioni seguenti può causare il blocco di un gruppo di sincronizzazione nello stato di elaborazione:

  • Causa. L'agente client è offline

  • Risoluzione. Assicurarsi che l'agente client sia online, quindi riprovare.

  • Causa. L'agente client è disinstallato o mancante.

  • Risoluzione. Se l'agente client è disinstallato o comunque mancante:

    1. Se esiste, rimuovere il file XML dell'agente dalla cartella di installazione della sincronizzazione dati SQL.
    2. Installare l'agente in un computer locale che può essere lo stesso o un altro computer. Inviare quindi la chiave dell'agente generata nel portale per l'agente che viene visualizzato come offline.
  • Causa. Il servizio di sincronizzazione dati SQL è stato arrestato.

  • Risoluzione. Riavviare il servizio di sincronizzazione dati SQL.

    1. Nel menu Start cercare Servizi.
    2. Nei risultati della ricerca fare clic su Servizi.
    3. Trovare il servizio di sincronizzazione dati SQL.
    4. Se lo stato del servizio è Arrestato, fare clic con il pulsante destro del mouse sul nome del servizio e scegliere Avvia.

Nota

Se queste informazioni non hanno consentito di cambiare lo stato di elaborazione del gruppo di sincronizzazione, il supporto tecnico Microsoft può reimpostare lo stato del gruppo di sincronizzazione. Per reimpostare lo stato del gruppo di sincronizzazione, nella pagina delle domande di Microsoft Q&A per Azure SQL Database creare un post. Nel post includere l'ID sottoscrizione e l'ID gruppo di sincronizzazione per il gruppo da reimpostare. Un tecnico del supporto tecnico Microsoft risponderà al post e comunicherà quando lo stato sarà stato reimpostato.

Vengono visualizzati dati non corretti nelle tabelle

Se le tabelle con lo stesso nome ma provengono da schemi di database diversi vengono incluse in una sincronizzazione, dopo la sincronizzazione vengono visualizzati dati errati nelle tabelle.

  • Causa. Il processo di provisioning sincronizzazione dati SQL usa le stesse tabelle di rilevamento per le tabelle con lo stesso nome, ma che si trovano in schemi diversi. Per questo motivo, le modifiche in entrambe le tabelle vengono applicate nella stessa tabella di rilevamento. Questa condizione causa errate modifiche ai dati durante la sincronizzazione.

  • Risoluzione. Assicurarsi che i nomi delle tabelle interessate dalla sincronizzazione siano diversi, anche se appartengono a schemi diversi di un database.

Vengono visualizzati dati della chiave primaria incoerenti dopo una sincronizzazione riuscita

Dopo una sincronizzazione segnalata come riuscita e nonostante il log non indichi righe non riuscite o ignorate, si osserva tuttavia che i dati della chiave primaria sono incoerenti tra i database del gruppo di sincronizzazione.

  • Causa. Si tratta di un comportamento previsto da progettazione. Le modifiche apportate a una colonna chiave primaria restituiscono dati incoerenti nelle righe in cui la chiave primaria è stata modificata.

  • Risoluzione. Per evitare questo problema, assicurarsi che non vengano modificati dati in una colonna chiave primaria. Per risolvere questo problema dopo che si è verificato, eliminare la riga contenente i dati incoerenti da tutti gli endpoint del gruppo di sincronizzazione. Reinserire quindi la riga.

Si osserva una riduzione delle prestazioni considerevole

Le prestazioni vengono considerevolmente ridotte, anche al punto da non poter aprire l'interfaccia utente di sincronizzazione dati.

  • Causa. La causa più probabile è un ciclo di sincronizzazione. Un ciclo di sincronizzazione si verifica quando una sincronizzazione per il gruppo di sincronizzazione A attiva una sincronizzazione per il gruppo di sincronizzazione B, che attiva quindi una sincronizzazione per il gruppo di sincronizzazione A. La situazione effettiva potrebbe essere più complessa e coinvolgere più di due gruppi di sincronizzazione nel ciclo. Il problema è che si è verificata un'attivazione circolare della sincronizzazione dovuta a gruppi di sincronizzazione in sovrapposizione.

  • Risoluzione. La correzione migliore è prevenire questa situazione. Verificare che non siano presenti riferimenti circolari nei gruppi di sincronizzazione. Le righe sincronizzate da un gruppo di sincronizzazione non possono essere sincronizzate da un altro gruppo di sincronizzazione.

Viene visualizzato un messaggio di errore: "Impossibile inserire il valore NULL nella colonna <colonna>. La colonna non consente valori Null". Cosa significa questo e come posso risolverlo?

Questo messaggio di errore indica che si è verificato uno dei due problemi seguenti:

  • Una tabella non dispone di una chiave primaria. Per risolvere il problema, aggiungere una chiave primaria a tutte le tabelle da sincronizzare.
  • Potrebbe essere presente una clausola WHERE nell'istruzione CREATE INDEX. La sincronizzazione dati non gestisce questa condizione. Per risolvere il problema, rimuovere la clausola WHERE o apportare manualmente le modifiche a tutti i database.

In che modo la sincronizzazione dati gestisce i riferimenti circolari? In altre parole, quando vengono sincronizzati gli stessi dati in più gruppi di sincronizzazione e pertanto continuano a cambiare?

La sincronizzazione dati non gestisce i riferimenti circolari. Si consiglia di evitarli.

Problemi relativi all'agente client

Per risolvere i problemi con l'agente client, vedere Troubleshoot Data Sync Agent issues (Risolvere i problemi relativi all'agente di sincronizzazione dati).

Problemi relativi all'installazione e alla manutenzione

Viene visualizzato un messaggio di spazio su disco non sufficiente

  • Causa. Il messaggio di spazio su disco non sufficiente può essere visualizzato quando rimangono ancora file da eliminare. Questa condizione può verificarsi a causa del software antivirus o perché i file sono aperti quando si prova a eseguire le operazioni di eliminazione.

  • Risoluzione. Eliminare manualmente i file di sincronizzazione nella cartella %temp% (del \*sync\* /s). Eliminare quindi le sottodirectory nella cartella %temp%.

Importante

Attendere che la sincronizzazione venga completata prima di eliminare qualsiasi file.

Non è possibile eliminare il gruppo di sincronizzazione

Non si riesce a eliminare un gruppo di sincronizzazione. Gli scenari seguenti possono impedire l'eliminazione di un gruppo di sincronizzazione.

  • Causa. L'agente client è offline.

  • Risoluzione. Assicurarsi che l'agente client sia online, quindi riprovare.

  • Causa. L'agente client è disinstallato o mancante.

  • Risoluzione. Se l'agente client è disinstallato o comunque mancante:
    a. Se esiste, rimuovere il file XML dell'agente dalla cartella di installazione della sincronizzazione dati SQL.
    b. Installare l'agente in un computer locale che può essere lo stesso o un altro computer. Inviare quindi la chiave dell'agente generata nel portale per l'agente che viene visualizzato come offline.

  • Causa. Un database è offline.

  • Risoluzione. Assicurarsi che i database siano tutti online.

  • Causa. È in corso il provisioning o la sincronizzazione del gruppo di sincronizzazione.

  • Risoluzione. Attendere il termine del processo di provisioning o di sincronizzazione, quindi riprovare a eliminare il gruppo di sincronizzazione.

Non è possibile annullare la registrazione di un database di SQL Server

  • Causa. Molto probabilmente si sta provando ad annullare la registrazione di un database che è già stato eliminato.

  • Risoluzione. Per annullare la registrazione di un database di SQL Server, selezionare il database e quindi selezionare Forza eliminazione.

    Se questa operazione non riesce a rimuovere il database dal gruppo di sincronizzazione:

    1. Arrestare e quindi riavviare il servizio host dell'agente client.
      a. Selezionare il menu Start.
      b. Immettere services.msc nella casella di ricerca.
      c. Nella sezione Programmi del riquadro dei risultati della ricerca fare doppio clic su Servizi.
      d. Fare clic con il pulsante destro del mouse sul servizio di sincronizzazione dati SQL.
      e. Se il servizio è in esecuzione, arrestarlo.
      f. Fare clic con il pulsante destro del mouse sulservizio e quindi selezionare Avvia.
      g. Controllare se il database è ancora registrato. Se non è più registrato, l'operazione è stata completata. In caso contrario, procedere al passaggio successivo.
    2. Aprire l'app dell'agente client (SqlAzureDataSyncAgent).
    3. Selezionare Modifica credenziali, quindi immettere le credenziali per il database.
    4. Procedere con l'annullamento della registrazione.

Non si hanno privilegi sufficienti per avviare i servizi di sistema

  • Causa. Questo errore si verifica in due situazioni:

    • Il nome utente e/o la password non è corretta.
    • L'account utente specificato non ha privilegi sufficienti per accedere come servizio.
  • Risoluzione. Concedere all'account utente le credenziali di accesso come servizio.

    1. Passare a Start>Pannello di controllo>Strumenti di amministrazione>Criteri di sicurezza locali>Criteri locali>Assegnazione diritti utente.
    2. Selezionare Accesso come servizio.
    3. Nella finestra di dialogo Proprietà aggiungere l'account utente.
    4. Selezionare Apply (Applica) e quindi OK.
    5. Chiudere tutte le finestre.

Un database ha lo stato "Non aggiornato"

  • Causa. La sincronizzazione dati SQL rimuove dal servizio i database che sono stati offline per 45 o più giorni, calcolati dal momento in cui il database è stato portato offline. Se un database è offline per 45 o più giorni e quindi torna online, lo stato viene è Non aggiornato.

  • Risoluzione. Per evitare lo stato Non aggiornato, assicurarsi che nessuno dei database rimanga offline per 45 o più giorni.

    Se lo stato del database è Non aggiornato:

    1. Rimuovere il database con lo stato Non aggiornato dal gruppo di sincronizzazione.
    2. Aggiungere di nuovo il database al gruppo di sincronizzazione.

    Avviso

    Si perdono tutte le modifiche apportate al database mentre era offline.

Un gruppo di sincronizzazione ha lo stato "Non aggiornato"

  • Causa. Se non è possibile applicare una o più modifiche per l'intero periodo di conservazione di 45 giorni, un gruppo di sincronizzazione può diventare obsoleto.

  • Risoluzione. Per evitare lo stato Non aggiornato per un gruppo di sincronizzazione, esaminare i risultati dei processi di sincronizzazione nel visualizzatore cronologia con regolarità. Analizzare e risolvere eventuali modifiche non applicate.

    Se lo stato di un gruppo di sincronizzazione non è aggiornato, eliminare il gruppo di sincronizzazione e quindi ricrearlo.

Un gruppo di sincronizzazione non può essere eliminato entro tre minuti dalla disinstallazione o dall'arresto dell'agente

Non è possibile eliminare un gruppo di sincronizzazione entro tre minuti dalla disinstallazione o dall'arresto dell'agente client di sincronizzazione dati SQL associato.

  • Risoluzione.

    1. Rimuovere un gruppo di sincronizzazione mentre gli agenti di sincronizzazione associati sono online (consigliato).
    2. Se l'agente è offline, ma è installato, portarlo online nel computer locale. Attendere che lo stato dell'agente venga visualizzato come online nel portale di sincronizzazione dati SQL. Rimuovere quindi il gruppo di sincronizzazione.
    3. Se l'agente è offline perché è stato disinstallato:
      a. Se esiste, rimuovere il file XML dell'agente dalla cartella di installazione della sincronizzazione dati SQL.
      b. Installare l'agente in un computer locale che può essere lo stesso o un altro computer. Inviare quindi la chiave dell'agente generata nel portale per l'agente che viene visualizzato come offline.
      c. Provare a eliminare il gruppo di sincronizzazione.

Cosa accade quando si ripristina un database perso o danneggiato?

Se si ripristina un database perso o danneggiato da un backup, potrebbe verificarsi la non convergenza dei dati nei gruppi di sincronizzazione a cui appartiene il database.

Messaggio di errore "Sync0022 Customer non dispone dell'autorizzazione per eseguire l'azione 'syncGroupOperationResults/read'"

Se viene visualizzato il messaggio Sync0022 Customer does not have authorization to perform action 'syncGroupOperationResults/read'di errore , l'account che tenta di eseguire l'operazione non dispone di autorizzazioni sufficienti a livello di sottoscrizione. Aggiungere:

  • "Microsoft.Sql/locations/syncMemberOperationResults/read"
  • "Microsoft.Sql/locations/syncAgentOperationResults/read"
  • "Microsoft.Sql/locations/syncGroupOperationResults/read"

Per altre informazioni, vedere Controllo degli accessi in base al ruolo dei provider di risorse e account di database sincronizzazione dati SQL con privilegi minimi necessari.

Passaggi successivi

Per altre informazioni sulla sincronizzazione dati SQL, vedere:

Per altre informazioni sul database SQL, vedere: