Usare il parametro -SkipErrors in agente di distribuzione

Questo articolo presenta l'utilizzo del -SkipErrors parametro in agente di distribuzione.

Versione originale del prodotto: SQL Server
Numero KB originale: 327817

Riepilogo

Microsoft SQL Server include il nuovo parametro -SkipErrors nel agente di distribuzione che consente al agente di distribuzione di ignorare l'errore indicato nella replica transazionale e di continuare il processo di distribuzione.

L'estratto seguente è tratto dall'argomento Gestione degli errori dell'agente nella documentazione online di SQL Server:

Nell'elaborazione tipica della replica non si verificano errori che devono essere ignorati. La possibilità di ignorare gli errori durante la replica transazionale è disponibile per le circostanze univoche in cui si prevedono errori e non si vuole che influiscano sulla replica, ad esempio quando si esegue il failover in un server di pubblicazione secondario durante il log shipping.

Microsoft consiglia di usare questo parametro con cautela e solo quando si ha una buona conoscenza di quanto segue:

  • Indica l'errore.
  • Motivo per cui si verifica l'errore.
  • Perché è meglio ignorare l'errore invece di risolverlo.

Se non si conoscono le risposte a questi elementi, l'uso inappropriato del -SkipErrors parametro può causare incoerenze dei dati tra il server di pubblicazione e il Sottoscrittore. Questo articolo descrive alcuni problemi che possono verificarsi quando si usa erroneamente il -SkipErrors parametro .

Ulteriori informazioni

Nella replica transazionale, le modifiche dei dati nel server di pubblicazione vengono propagate al Sottoscrittore nell'unità di transazione.

In una transazione possono essere presenti più comandi. Per impostazione predefinita, se un comando ha esito negativo, viene eseguito il rollback dell'intera transazione di replica nel Sottoscrittore. Se si aggiunge il -SkipErrors parametro per consentire al agente di distribuzione di ignorare determinati errori, il singolo comando che causa questo errore non viene applicato al Sottoscrittore, ma vengono applicati tutti gli altri comandi nelle stesse transazioni. In questo caso, la transazione di replica viene applicata solo parzialmente al Sottoscrittore, il che può quindi causare l'incoerenza dei dati tra il server di pubblicazione e il Sottoscrittore.

Ad esempio:

Si dispone di una transazione in attesa di essere replicata nella tabella del Sottoscrittore denominata T1. Questa transazione include 100 istruzioni insert. Quando si applica al Sottoscrittore, i primi 90 inserimenti elaborano correttamente; tuttavia, l'istruzione insert di 90 primi ha esito negativo e si verifica l'errore di violazione della chiave primaria 2627.

Quando non si usa il -SkipErrors parametro (comportamento predefinito):

Per impostazione predefinita, viene eseguito il rollback dell'intera transazione e nessuno dei 100 nuovi record viene inserito nella tabella di sottoscrizione. In questo caso, è necessario correggere l'errore di replica in modo che la transazione possa essere riapplicata al Sottoscrittore.

Quando si usa il -SkipErrors parametro :

Il agente di distribuzione registra l'errore nella cronologia agente di distribuzione, ignora questo errore e quindi continua il processo di distribuzione. Pertanto, ad eccezione del novantenne nuovo record che ha causato l'errore, gli altri 99 nuovi record vengono inseriti nella tabella di sottoscrizione. Questa transazione non viene riapplicata dal agente di distribuzione, anche dopo aver corretto manualmente l'errore nel Sottoscrittore. Pertanto, in questa situazione, al Sottoscrittore manca il novantenne nuovo record e si verifica un problema di incoerenza dei dati.

È inoltre necessario tenere presente che, in SQL Server 2000 in genere il agente di distribuzione viene condiviso da più pubblicazioni (per impostazione predefinita, esiste una agente di distribuzione per database di pubblicazione e coppia di database di sottoscrizione), quindi se si aggiunge il -SkipErrors parametro a agente di distribuzione processo, influisce su tutte le pubblicazioni che questo agente sta servendo. Nelle versioni di SQL 2005 e SQL 2008 la replica transazionale usa agenti indipendenti per impostazione predefinita per le pubblicazioni create nella Creazione guidata nuova pubblicazione. Per le pubblicazioni create tramite sp_addpublication stored procedure, il comportamento predefinito consiste nell'usare un agente condiviso.

Per usare il -SkipErrors parametro per una pubblicazione specifica, usare un agente indipendente, che serve solo una sottoscrizione. Per usare un agente indipendente, seguire i passaggi per la versione:

SQL Server 2000

  1. In SQL Server Enterprise Manager fare clic con il pulsante destro del mouse sulla pubblicazione, scegliere Properties, quindi nella scheda Opzioni sottoscrizione fare clic sull'opzione Usa un agente di distribuzione indipendente da altre pubblicazioni di questo database.

    Nota

    Non è possibile attivare questa opzione dopo aver aggiunto sottoscrizioni alla pubblicazione.

  2. Aggiungere il -SkipErrors parametro alla agente di distribuzione di una sottoscrizione specifica.

SQL Server 2005 e SQL Server 2008

  1. In SQL Server Management Studio passare a Replica e quindi nella sezione Pubblicazioni locali fare clic con il pulsante destro del mouse sulla pubblicazione, scegliere Proprietà, quindi nella pagina Opzioni sottoscrizione modificare il valore di Independent agente di distribuzione da False a True.

    Nota

    Non è possibile attivare questa opzione dopo aver aggiunto sottoscrizioni alla pubblicazione.

  2. Aggiungere il -SkipErrors parametro alla agente di distribuzione di una sottoscrizione specifica.

Per ulteriori informazioni, vedere gli argomenti seguenti: