FIX: messaggio di errore quando si esegue l'agente di distribuzione per sincronizzare i server di sottoscrizione con server di pubblicazione in Microsoft SQL Server 2005 o SQL Server 2008: "il dati tabulari in ingresso flusso chiamata di procedura remota (TDS) flusso del protocollo (RPC) non è corretta"

Microsoft distribuisce le correzioni Microsoft SQL Server 2005 come un unico file scaricabile. Poiché le correzioni sono cumulative, ogni nuova versione contiene tutte le correzioni rapide e rilascio delle correzioni per tutte le correzioni fornite con la versione precedente di SQL Server 2005.

Sintomi

Si utilizza la replica transazionale in Microsoft SQL Server 2005. Quando si esegue l'agente di distribuzione per sincronizzare i server di sottoscrizione con il server di pubblicazione, l'agente di distribuzione potrebbe non riuscire e viene visualizzato il seguente messaggio di errore nella cronologia dell'agente di distribuzione o nel Registro di output:

42000 i dati tabulari in arrivo il flusso di chiamata di procedura remota (TDS) flusso del protocollo (RPC) non è corretto. Troppi parametri specificati nella richiesta RPC. Il valore massimo è 2100. 8003

Quando questi errori si verificano ripetutamente, le prestazioni possono essere influenzate. Quando si verifica questo errore, l'agente di distribuzione esegue tentativi di elaborazione per provare gli stessi comandi nuovamente. Pertanto, l'agente di distribuzione utilizza più tempo per sincronizzare i server di sottoscrizione con il server di pubblicazione perché ogni lotto difettoso viene tentato due volte.

Causa

Quando l'agente di distribuzione elabora i comandi in sospeso nel database di distribuzione, viene utilizzato il parametro CommitBatchSize e il parametro CommitBatchThreshold per determinare il numero di comandi vengono raggruppate come un'esecuzione quando tali comandi vengono inviati ai server di sottoscrizione.

Il parametro CommitBatchSize è il numero di transazioni da inviare ai server di sottoscrizione prima di un'istruzione COMMIT . Il valore predefinito è 100. Il parametro CommitBatchThreshold è il numero di comandi di replica da inviare ai server di sottoscrizione prima di un'istruzione COMMIT . Il valore predefinito è 1000.

Poiché una singola transazione può contenere un unico comando o può contenere molti comandi, impostando il parametro CommitBatchSize su 100 e il parametro CommitBatchThreshold su 1000 potrebbero consentire di diversi migliaia comandi da consegnare in un singolo batch di comandi.

Quando un articolo viene aggiunto a una pubblicazione, la @ins_cmd, @upd_cmd, e vengono specificati i parametri di @del_cmd del tipo di comando di replica per di sp_addarticle stored procedure per determinare la modalità di inviare comandi al server di sottoscrizione. Oltre ai parametri CommitBatchSize e CommitBatchThreshold , l'agente di distribuzione deve inoltre considerare che non esistono requisiti massime nel provider SQL Native Client OLE DB in cui è possibile associare il numero di parametri in un singolo batch di comandi inviati al server di sottoscrizione.

Non c'è un massimo di 2100 parametri che possono essere utilizzati in un singolo batch di comandi. L'agente di distribuzione pertanto automaticamente divide il batch di grandi dimensioni in appena sufficienti istruzioni per il batch in modo che non venga superato il numero massimo di parametri di 2100. Quindi, eventuali altri comandi nel batch di comando vengono spostati automaticamente nel batch di esecuzione successivo.

Questo problema si verifica quando l'agente di distribuzione calcola erroneamente il numero di parametri che sono necessari per fornire un batch di comandi. Questo accade se l'agente di distribuzione utilizza dinamico stored procedure sp_executesql come wrapper per un batch di molti comandi replicati.

Se il comando replicato contiene più di 2098 parametri nel comando batch e il comando batch viene eseguito il wrapping tramite la stored procedure sp_executesql stored procedure per offrire il batch come un'istruzione Transact-SQL creata in modo dinamico, l'agente di distribuzione non includere nel calcolo che la stored procedure sp_executesql stored procedure esigenze due ulteriori parametri associati in modo da funzionare. Di conseguenza, il numero totale di parametri può superare i parametri di 2100.

L'agente di distribuzione è possibile utilizzare questa opzione di consegna dell'istruzione Transact-SQL creata in modo dinamico incapsulato sp_executesql stored procedure nelle seguenti situazioni:
  • L'articolo contiene le colonne BLOB Binary Large Object (), ad esempio testo o colonne di immagini.
  • Viene utilizzato più di un tipo di comando di replica tra tutti gli articoli. Se, ad esempio un articolo utilizza il tipo di comando SQL consegna la replica, ma un altro articolo utilizza la procedura sp_MSins_procedure memorizzati come tipo di comando di replica.

Risoluzione

SQL Server 2005


La correzione di questo problema è stata rilasciata prima 5 di aggiornamento cumulativo per SQL Server 2005 Service Pack 3. Per ulteriori informazioni su questo pacchetto di aggiornamento cumulativo, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
972511 cumulativo 5 pacchetto di aggiornamento per SQL Server 2005 Service Pack 3
Nota: Poiché le versioni sono cumulative, ogni nuova versione contiene tutte le correzioni rapide e rilascio delle correzioni per tutte le correzioni fornite con la versione precedente di SQL Server 2005. Microsoft consiglia di considerare l'applicazione alla versione più recente di correzione contenente tale hotfix. Per ulteriori informazioni, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
960598 versioni di SQL Server 2005 rilasciate dopo il rilascio di SQL Server 2005 Service Pack 3
Aggiornamenti rapidi di Microsoft SQL Server 2005 vengono creati per service pack specifici di SQL Server. È necessario applicare un hotfix di SQL Server 2005 Service Pack 3 per un'installazione di SQL Server 2005 Service Pack 3. Per impostazione predefinita, qualsiasi hotfix fornito in un service pack di SQL Server è incluso nel prossimo service pack di SQL Server.

SQL Server 2008

SQL Server 2008

Importante Se si esegue la versione di SQL Server 2008, è necessario utilizzare questa correzione.

La correzione di questo problema è stata rilasciata prima nell'aggiornamento cumulativo 7. Per ulteriori informazioni su come ottenere il pacchetto di aggiornamento cumulativo per SQL Server 2008, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
973601 cumulativo aggiornamento 7 per SQL Server 2008
Nota: Poiché le versioni sono cumulative, ogni nuova versione di correzione contiene tutti gli hotfix e rilascio delle correzioni per tutte le correzioni fornite con il precedente 2008 di SQL Server. Si consiglia di considerare l'ipotesi di applicare la versione più recente contenente tale hotfix. Per ulteriori informazioni, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
956909 versioni di SQL Server 2008 rilasciate dopo il rilascio di SQL Server 2008

SQL Server 2008 Service Pack 1 (SP1)

Importante Se si esegue SQL Server 2008 Service Pack 1 (SP1), è necessario utilizzare questa correzione.


La correzione di questo problema è stata rilasciata prima 4 aggiornamento cumulativo per SQL Server 2008 Service Pack 1. Per ulteriori informazioni su questo pacchetto di aggiornamento cumulativo, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
973602 cumulativo update package 4 per SQL Server 2008 Service Pack 1
Nota: Poiché le versioni sono cumulative, ogni nuova versione di correzione contiene tutti gli hotfix e rilascio delle correzioni per tutte le correzioni fornite con il precedente 2008 di SQL Server. Microsoft consiglia di considerare l'applicazione alla versione più recente di correzione contenente tale hotfix. Per ulteriori informazioni, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
970365 versioni di SQL Server 2008 rilasciate dopo il rilascio di SQL Server 2008 Service Pack 1
Aggiornamenti rapidi di Microsoft SQL Server 2008 vengono creati per service pack specifici di SQL Server. È necessario applicare un hotfix di SQL Server 2008 Service Pack 1 a un'installazione di SQL Server 2008 Service Pack 1. Per impostazione predefinita, qualsiasi hotfix fornito in un service pack di SQL Server è incluso nel prossimo service pack di SQL Server.

Soluzione alternativa

Per risolvere questo problema, utilizzare uno dei seguenti metodi:

Metodo 1

Per ridurre le occorrenze di questo errore a un livello più tollerabile, diminuire il valore dei parametri CommitBatchSize e CommitBatchThreshold per l'agente di distribuzione. L'obiettivo consiste nel limitare il numero massimo di comandi per il batch di commit, per evitare il superamento di 2.100 parametri per il batch di comandi.

Ad esempio, il valore predefinito del parametro CommitBatchSize è 100. È possibile modificarlo a 10. Il valore predefinito del parametro CommitBatchThreshold è 1000. È possibile modificarlo a 100.

Questi valori decrescenti può influire sulle prestazioni poiché batch non vengono recapitati alle dimensioni di origine ottimali. Tuttavia, questo metodo consente di evitare le condizioni di errore descritti nella sezione causa.

È possibile modificare i parametri CommitBatchSize e CommitBatchThreshold utilizzando uno dei seguenti metodi:
  • Aggiungere i parametri CommitBatchSize e CommitBatchThreshold nel comando per il passaggio di processo dell'agente di distribuzione in SQL Server Agent
  • Modificare i parametri CommitBatchSize e CommitBatchThreshold quando si crea un nuovo profilo di agente nella finestra di dialogo Proprietà server di distribuzione o da Monitoraggio replica.
Per ulteriori informazioni su come modificare questi parametri, visitare il seguente sito Web Microsoft Developer Network (MSDN):


Se si desidera evitare completamente l'errore in tentativi successivi del batch, è necessario considerare il caso peggiore. A tale scopo, individuare l'articolo più ampia con maggior numero di colonne nella pubblicazione. Ad esempio, se si dispone di una tabella che abbia 100 colonne pubblicato in una pubblicazione transazionale, un singolo comando replicato una tabella può contenere parametri di 100. È necessario ridurre l'impostazione del parametro CommitBatchThreshold in modo che il numero massimo di parametri che è l'agente di distribuzione per inviare in un singolo batch è al massimo 2098. Se tutte le colonne sono influenzate dal comando, l'impostazione del parametro CommitBatchThreshold deve essere 20 o più piccole per consentire un massimo di 2000 parametri per ogni batch di 20 comandi su tale tabella.

Metodo 2

Utilizzare lo stesso tipo di comando di replica per tutti gli articoli della pubblicazione quando si imposta la pubblicazione. Evitare di combinare i meccanismi di consegna di comando per gli articoli della pubblicazione stessa in modo da ridurre la necessità di effettuare la consegna del batch utilizzando la stored procedure sp_executesql stored procedure come un wrapper in un batch di comandi dell'agente di distribuzione.

Stato

Microsoft ha confermato che questo è un problema dei prodotti Microsoft elencati nella sezione "Si applica a".

Ulteriori informazioni

Per ulteriori informazioni sulla replica, l'agente di distribuzione, visitare il seguente sito Web Microsoft Developer Network (MSDN):

Per ulteriori informazioni sui profili dell'agente di replica, visitare il seguente sito Web Microsoft Developer Network (MSDN):

Riferimenti


Per ulteriori informazioni sul modello di manutenzione incrementale per SQL Server, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
935897
Modello di manutenzione incrementale è disponibile dal team di SQL Server per offrire gli hotfix per i problemi segnalati

Per ulteriori informazioni su come ottenere SQL Server 2005 Service Pack 3, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
913089
Come ottenere il service pack più recente per SQL Server 2005
Per ulteriori informazioni sulle nuove funzionalità di SQL Server 2005 SP3 e sui miglioramenti apportati in SQL Server 2005 SP3, visitare il seguente sito Web Microsoft:

Per ulteriori informazioni sullo schema di denominazione per gli aggiornamenti di SQL Server, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
822499
Nuovo schema di denominazione per i pacchetti di aggiornamento software di Microsoft SQL Server
Per ulteriori informazioni sulla terminologia degli aggiornamenti software, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
824684
Descrizione della terminologia standard utilizzata per descrivere gli aggiornamenti software Microsoft
Proprietà

ID articolo: 973103 - Ultima revisione: 31 gen 2017 - Revisione: 1

Feedback