Update: Fehlermeldung beim Ausführen der Verteilungsagent synchronisieren die Abonnenten mit dem Verleger in Microsoft SQL Server 2005 oder SQL Server 2008: "der eingehende tabular Data (TDS)-Remoteprozeduraufruf Stream (RPC)-Protokoll ist nicht richtig"

Microsoft stellt Updates für Microsoft SQL Server 2005 als downloadbare Datei. Da die kumulativ sind, enthält jede neue Version alle Hotfixes und alle Sicherheitsupdates, die in früheren SQL Server 2005 enthalten waren.

Problembeschreibung

Verwenden Sie Transaktionsreplikation in Microsoft SQL Server 2005. Beim Ausführen der Verteilungsagent Abonnenten mit dem Verleger synchronisiert der fehlschlagen und im Verlauf Agents Distribution oder im Ausgabelog, erhalten folgende Fehlermeldung:

42000 der eingehende tabular Data stream (TDS) Remoteprozeduraufruf (RPC) Protokollablauf falsch ist. In dieser RPC-Anforderung wurden zu viele Parameter angegeben. Der Höchstwert beträgt 2100. 8003

Wenn dieser Fehler wiederholt auftreten, kann dies Leistungseinbußen führen. Wenn ein Fehler auftritt, werden der Wiederholung Verarbeitung gehen gleich wieder Befehle. Daher verwendet der Zeit die Abonnenten mit dem Verleger synchronisieren, da jeder problematischen Stapel zweimal versucht.

Ursache

Wenn der ausstehenden Befehle in der Verteilungsdatenbank verarbeitet, verwendet den CommitBatchSize -Parameter und Parameters CommitBatchThreshold feststellen, wie viele Befehle werden zusammen als eine Ausführung zusammengefasst, wenn diese Befehle an den Abonnenten gesendet.

Der Parameter CommitBatchSize ist die Anzahl der Transaktionen, die an die Abonnenten gesendet werden, bevor eine COMMIT -Anweisung ausgegeben wird. Der Standardwert ist 100. Der Parameter CommitBatchThreshold ist die Anzahl der Replikationsbefehle, die an die Abonnenten gesendet werden, bevor eine COMMIT -Anweisung ausgegeben wird. Der Standardwert ist 1000.

Da eine einzelne Transaktion einen Befehl kann oder viele Befehle enthalten, können der Einstellung CommitBatchSize 100 und 1000 CommitBatchThreshold -Parameter für mehrere Tausend Befehle in einem einzigen Batch von Befehlen übermittelt werden.

Wenn ein Artikel einer Publikation @ins_cmd @upd_cmdhinzugefügt und Befehl Replikationstyp @del_cmd Parameter für Sp_addarticle angegebene gespeicherte Prozedur, wie Befehle an den Abonnenten übermittelt werden. Der muss zusätzlich die Parameter CommitBatchSize und CommitBatchThreshold berücksichtigen, dass maximale Anforderungen in SQL Native Client OLE DB-Provider auf wie viele Parameter in einem einzigen Batch von Befehlen gebunden werden können, die an den Abonnenten gesendet wird.

Es gibt bis zu 2100 Parameter in einem einzigen Batch von Befehlen verwendet werden können. Der unterteilt daher automatisch großen Stapel nur genügend Anweisungen pro Batch, der bis zu 2100 Parameter nicht überschritten wird. Dann werden alle verbleibenden Befehle in Befehlsbatch automatisch in die nächste Ausführung Stapel verschoben.

Dieses Problem tritt auf, wenn der falsch Anzahl Parameter berechnet, die zu einem Batch von Befehlen erforderlich sind. Dies geschieht, wenn der dynamische gespeicherten Prozedur Sp_executesql als Wrapper für einen Stapel von replizierten Befehlen verwendet.

Wenn replizierten Befehls mehr als 2098 Parameter in den Batchbefehl enthält Batchbefehl mit der Sp_executesql gespeicherten Prozedur zu Batch als eine dynamisch erstellte Transact-SQL-Anweisung umschlossen, umfasst der nicht bei Sp_executesql gespeicherte Prozedur benötigt zwei zusätzliche gebundene Parameter selbst funktionieren. Daher darf die Gesamtzahl der Parameter 2100 Parameter.

Der kann dadurch Übermittlung der dynamisch erstellten Transact-SQL-Anweisung zusammen mit der Sp_executesql gespeicherten Prozedur in folgenden Situationen verwenden:
  • Der Artikel enthält Binary Large Object (BLOB) wie Text oder Image-Spalten.
  • Mehrere Replikations-Befehlstyp wird für alle Artikel verwendet. Wenn beispielsweise ein Artikel verwendet SQL Lieferung Replikations-Befehlstyp, aber einem anderen Artikel Sp_MSins_procedure gespeicherte Prozedur als Befehl Replikationstyp.

Problemlösung

SQLServer 2005


Die Fehlerbehebung für dieses Problem wurde zuerst im kumulativen Update 5 für SQL Server 2005 Service Pack 3 veröffentlicht. Für weitere Informationen zu diesem kumulativen Update-Paket, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
972511 kumulative Updatepaket 5 für SQL Server 2005 Service Pack 3
Hinweis Da diese Builds kumulativ sind, enthält jede neue Version alle Hotfixes und alle Sicherheitsupdates, die in früheren SQL Server 2005 enthalten waren. Microsoft empfiehlt, dass Sie prüfen die neueste Update-Version, die diesen Hotfix enthält. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
960598 der SQL Server 2005 builds, die nach der Freigabe von SQL Server 2005 Service Pack 3
Microsoft SQL Server 2005-Hotfixes sind für bestimmte SQL Server Servicepacks erstellt. Sie müssen SQL Server 2005 Service Pack 3-Hotfix eine Installation von SQL Server 2005 Service Pack 3 anwenden. Standardmäßig ist jeder Hotfix, der in einem SQL Server Servicepack bereitgestellt wird, in einem nächsten Servicepack für SQL Server enthalten.

SQL Server 2008

SQL Server 2008

Wichtig Verwenden Sie dieses Update, wenn Sie die Version von SQL Server 2008 ausführen.

Die Fehlerbehebung für dieses Problem wurde erstmals im kumulativen Update 7 veröffentlicht. Weitere Informationen zu diesem kumulativen Updatepaket für SQL Server 2008 finden Sie im folgenden Artikel der Microsoft Knowledge Base:
973601 kumulative Updatepaket 7 für SQL Server 2008
Hinweis Da diese Builds kumulativ sind, enthält jede neue Veröffentlichung alle Hotfixes und alle die Sicherheitsupdates, die in den vorherigen SQL Server 2008 Fix-Veröffentlichung enthalten waren. Wir empfehlen Sie prüfen die neueste Update-Version, die diesen Hotfix enthält. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
956909 die SQL Server 2008 builds, die nach der Freigabe von SQL Server 2008

SQL Server 2008 Servicepack 1 (SP1)

Wichtig Verwenden Sie dieses Update, wenn Sie SQL Server 2008 Service Pack 1 (SP1) ausführen.


Die Fehlerbehebung für dieses Problem wurde erstmals im kumulativen Update 4 für SQL Server 2008 Service Pack 1 veröffentlicht. Für weitere Informationen zu diesem kumulativen Update-Paket, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
973602 kumulative Updatepaket 4 für SQL Server 2008 Service Pack 1
Hinweis Da diese Builds kumulativ sind, enthält jede neue Veröffentlichung alle Hotfixes und alle die Sicherheitsupdates, die in den vorherigen SQL Server 2008 Fix-Veröffentlichung enthalten waren. Microsoft empfiehlt, dass Sie prüfen die neueste Update-Version, die diesen Hotfix enthält. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
970365 die SQL Server 2008 builds, die nach der Freigabe von SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008-Hotfixes sind für bestimmte SQL Server Servicepacks erstellt. Sie müssen SQL Server 2008 Service Pack 1-Hotfix eine Installation von SQL Server 2008 Service Pack 1 anwenden. Standardmäßig ist jeder Hotfix, der in einem SQL Server Servicepack bereitgestellt wird, in einem nächsten Servicepack für SQL Server enthalten.

PROBLEMUMGEHUNG

Um dieses Problem zu umgehen, verwenden Sie eine der folgenden Methoden:

Methode 1

Verringern Sie den Wert der Parameter CommitBatchSize und CommitBatchThreshold für Snapshot-Agent, Auftreten dieses Problems eher tolerierbar auf reduzieren. Ziel ist die maximale Anzahl der Befehle pro Commit Batch überschreiten 2.100 Parameter pro Batch von Befehlen einschränken.

Beispielsweise wird der Standardwert des Parameters CommitBatchSize 100. Sie können es in 10 ändern. Der Standardwert des Parameters CommitBatchThreshold ist 1000. Sie können das 100 ändern.

Reduzierung der Werte kann die Leistung beeinträchtigen, da Batches ursprünglich optimale Größe nicht übermittelt werden. Diese Methode hilft jedoch Fehler zu verhindern, die im Abschnitt Ursache beschrieben werden.

Sie können die Parameter CommitBatchSize und CommitBatchThreshold mit einer der folgenden Methoden ändern:
  • Die Parameter CommitBatchSize und CommitBatchThreshold in den Befehl für den Auftragsschritt Verteilungsagent im SQL Server-Agent hinzufügen
  • Ändern Sie die Parameter CommitBatchSize und CommitBatchThreshold beim Erstellen eines neuen Agentprofil im Dialogfeld Eigenschaften eines Verteilers oder Replikationsmonitor.
Weitere Informationen über das Ändern dieser Parameter finden Sie auf folgender Website von Microsoft Developer Network (MSDN):


Wenn Sie diesen Fehler in späteren Wiederholen der Charge vollständig vermeiden möchten, müssen Sie für den schlimmsten Fall planen. Suchen Sie dazu breitesten Artikel, die höchste Anzahl von Spalten in der Publikation. Haben Sie eine Tabelle mit 100 Spalten die Transaktionspublikation veröffentlicht wird, kann ein replizierter Befehl anhand dieser Tabelle beispielsweise 100 Parameter enthalten. Sie müssen CommitBatchThreshold Einstellung reduzieren, so dass die maximale Anzahl von Parametern, die der einzelnen Batch senden höchstens 2098. Alle Spalten von dem Befehl betroffen sind, ist die Einstellung CommitBatchThreshold 20 oder kleiner maximal 2000 Parameter pro Batch 20 Befehle für diese Tabelle zu.

Methode 2

Verwenden Sie den gleichen Befehl Replikationstyp für alle Artikel in der Publikation beim Einrichten der Publikation. Vermeiden Sie mischen Befehl Mechanismen für Artikel in derselben Publikation Verteilungsagent auf Bereitstellung Batch mit der Sp_executesql gespeicherten Prozedur als Wrapper für einen Batch von Befehlen zu reduzieren.

Status

Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.

Weitere Informationen

Weitere Informationen zur Replikation Verteilungsagent finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:

Weitere Informationen über Profile der Replikations-Agent finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:

Referenzen


Weitere Informationen zum inkrementellen Dienstmodell für SQL Server klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:
935897 erläutert wird
Steht ein inkrementelles Dienstmodell vom SQL Server-Team zu Hotfixes für gemeldete Probleme

Weitere Informationen zu SQL Server 2005 Service Pack 3 finden Sie im folgenden Artikel der Microsoft Knowledge Base:
913089
So erhalten Sie das neueste Servicepack für SQL Server 2005
Weitere Informationen zu den neuen Features in SQL Server 2005 SP3 und die Verbesserung der SQL Server 2005 SP3 finden Sie auf der folgenden Microsoft-Website:

Weitere Informationen zum Benennungsschema für SQL Server-Updates klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:
822499
Neues Benennungsschema für Softwareupdatepakete für Microsoft SQL Server
Um weitere Informationen zur Terminologie für Softwareupdates zu erhalten, klicken Sie auf die folgende Artikelnummer, um den Artikel der Microsoft Knowledge Base anzuzeigen:
824684
Beschreibung der Standardterminologie, die zum Beschreiben von Microsoft-Softwareupdates verwendet wird.
Eigenschaften

Artikelnummer: 973103 – Letzte Überarbeitung: 13.01.2017 – Revision: 1

Feedback