CORRECÇÃO: mensagem de erro quando você executar o Distribution Agent para sincronizar os assinantes com o Editor do Microsoft SQL Server 2005 ou SQL Server 2008: "os dados tabulares entrados fluxo (TDS) remote procedure call (RPC) protocolo fluxo está incorreto"

Traduções deste artigo Traduções deste artigo
ID do artigo: 973103 - Exibir os produtos aos quais esse artigo se aplica.
A Microsoft distribui correções do Microsoft SQL Server 2005 como um arquivo para download. Como as correções são cumulativas, cada versão nova contém todos os hotfixes e todos os as correções de segurança que foram incluídas com o anterior SQL Server 2005 corrigir lançamento.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Você usa replicação transacional no Microsoft SQL Server 2005. Ao executar o Distribution Agent para sincronizar os assinantes com o Editor, o agente de distribuição pode falhar e você receber a seguinte mensagem de erro no histórico do agente de distribuição ou no log de saída:

Dados tabulares 42000 de entrada fluxo de (TDS) remote procedure call (RPC) protocolo fluxo está incorreto. Número excessivo de parâmetros foram fornecido esta solicitação de RPC. O máximo é 2100. 8003

Quando esses erros ocorrem repetidamente, o desempenho pode ser afetado. Quando ocorre como uma falha, o agente de distribuição irá fazer tentativas de processamento para tentar o mesmo comandos novamente. Portanto, o Distribution Agent usa mais tempo para sincronizar os assinantes com o editor porque cada lote problemático é tentado duas vezes.

Causa

Quando o Distribution Agent processa os comandos pendentes no banco de dados de distribuição, ele usa o parâmetro CommitBatchSize e no parâmetro CommitBatchThreshold para ajudar a determinar como muitos comandos são lote juntos como uma execução quando envia os comandos para os assinantes.

O parâmetro CommitBatchSize é o número de transações para ser emitida para os assinantes antes de uma instrução COMMIT é emitida. O valor padrão é 100. O parâmetro CommitBatchThreshold é o número de comandos de replicação para ser emitida para os assinantes antes de uma instrução COMMIT é emitida. O padrão é 1000.

Como uma única transação pode conter um comando ou pode conter muitos comandos, configuração do parâmetro CommitBatchSize como 100 e definindo o parâmetro CommitBatchThreshold como 1000 podem permitir vários milhares comandos sejam entregues em um único lote de comandos.

Quando um artigo é adicionado a uma publicação, @ ins_cmd , @ upd_cmd e @ del_cmd parâmetros do tipo de comando de replicação forem especificados para sp_addarticle armazenados procedimento para determinar como enviar comandos para o assinante. Além de parâmetros CommitBatchSize e CommitBatchThreshold , o agente de distribuição tem também considerar que não há requisitos máximo no provedor do OLE DB do SQL Native Client em quantos parâmetros podem ser vinculados em um único lote de comandos enviado para o assinante.

Há um máximo de 2100 parâmetros que podem ser usados em um único lote de comandos. O Distribution Agent portanto automaticamente divide lotes grandes em apenas suficiente instruções por em lotes para que o máximo de parâmetros 2100 não seja excedido. Em seguida, os comandos restantes no lote de comando automaticamente são movidos para o próximo lote de execução.

Esse problema ocorre quando o Distribution Agent calcula incorretamente o número de parâmetros que são necessários para fornecer um lote de comandos. Isso acontece se o Distribution Agent usa o procedimento armazenado dinâmico sp_executesql como um wrapper para um lote de muitos comandos duplicados.

Se o comando replicado contém mais de 2098 parâmetros no comando em lotes e o comando em lotes é encapsulado usando o procedimento sp_executesql armazenados para entregar o lote como uma instrução Transact-SQL criado dinamicamente, o Distribution Agent não está incluída no cálculo sp_executesql armazenados procedimento necessidades dois acoplados parâmetros adicionais para funcionar. Portanto, o número total de parâmetros pode exceder 2100 parâmetros.

O Distribution Agent pode usar esta opção de entrega da instrução Transact-SQL criada dinamicamente empacotada com o procedimento sp_executesql armazenados nas seguintes situações:
  • O artigo contém colunas de Binary Large Object (BLOB, objeto binário EXTENSO) como texto ou colunas de imagem.
  • Mais de um tipo de comando de replicação é usado em todos os artigos. Por exemplo, se um artigo usa o tipo de comando de replicação do SQL entrega, mas outro artigo utiliza o procedimento sp_MSins_procedure armazenados como o tipo de comando de replicação.

Resolução

SQL Server 2005

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 5 para o SQL Server 2005 Service Pack 3. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
972511 Pacote de atualizações cumulativas 5 para o SQL Server 2005 Service Pack 3
Observação Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções de segurança foram incluídas com o anterior SQL Server 2005 corrigir lançamento. A Microsoft recomenda que você considere a aplicação a versão de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
960598Compilações do SQL Server 2005 lançados após o lançamento do SQL Server 2005 Service Pack 3
Microsoft SQL Server 2005 hotfixes são criados para service packs do SQL Server específicos. Você deve aplicar um hotfix do SQL Server 2005 Service Pack 3 para uma instalação do SQL Server 2005 Service Pack 3. Por padrão, qualquer hotfix fornecidas em um SQL Server service pack está incluído no service pack seguinte do SQL Server.

SQL Server 2008

SQL Server 2008

importante Você deve usar essa correção se você estiver executando a versão de lançamento do SQL Server 2008.

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 7. Para obter mais informações sobre como obter esse pacote de atualizações cumulativas para o SQL Server 2008, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
973601Pacote de atualizações cumulativas 7 para SQL Server 2008
Observação Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções segurança que foram incluídas com o SQL Server 2008 anteriores corrigir lançamento. Recomendamos que você considere a aplicação a versão de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
956909O SQL Server 2008 compilações que lançadas foram após o lançamento SQL Server 2008 foi lançado

SQL Server 2008 Service Pack 1 (SP1)

importante Você deve usar essa correção se você estiver executando o SQL Server 2008 Service Pack 1 (SP1).

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 4 para o SQL Server 2008 Service Pack 1. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
973602Pacote de atualizações cumulativas 4 para SQL Server 2008 Service Pack 1
Observação Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções segurança que foram incluídas com o SQL Server 2008 anteriores corrigir lançamento. A Microsoft recomenda que você considere a aplicação a versão de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
970365Compilações do SQL Server 2008 que foram lançadas lançamento após o lançamento do SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 hotfixes são criados para service packs do SQL Server específicos. Você deve aplicar um hotfix do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por padrão, qualquer hotfix fornecidas em um SQL Server service pack está incluído no service pack seguinte do SQL Server.

Como Contornar

Para contornar esse problema, use um dos seguintes métodos:

Método 1

Para ajudar a reduzir ocorrências deste erro para um nível mais tolerable, diminua o valor dos parâmetros CommitBatchSize e CommitBatchThreshold para Distribution Agent. O objetivo é restringir o número máximo de comandos por lote de confirmação, para evitar exceder 2.100 parâmetros por lote de comandos.

Por exemplo, o valor padrão do parâmetro CommitBatchSize é 100. Você pode alterá-lo para 10. O valor padrão do parâmetro CommitBatchThreshold é 1000. Você pode alterá-lo como 100.

Esses valores decrescentes podem afetar o desempenho porque lotes não são entregues em tamanhos originalmente ideais. No entanto, esse método ajuda a evitar as condições de erro descritas na seção causa.

Você pode alterar os parâmetros CommitBatchSize e CommitBatchThreshold usando um dos seguintes métodos:
  • Adicionar os parâmetros CommitBatchSize e CommitBatchThreshold o comando para a etapa de trabalho do Distribution Agent no SQL Server Agent
  • Altere os parâmetros CommitBatchSize e CommitBatchThreshold quando você cria um novo perfil do agente da caixa de diálogo Propriedades de distribuidor ou do Monitor de replicação.
Para obter mais informações sobre como alterar esses parâmetros, visite a seguinte site da Microsoft Developer Network (MSDN):
http://msdn.microsoft.com/en-us/library/ms151326(SQL.90).aspx


Se você desejar evitar totalmente esse erro em repetição posterior do lote, você deve planejar a pior das hipóteses. Para fazer isso, localize o artigo mais largo que possui a maioria dos número de colunas em sua publicação. Por exemplo, se você tiver uma tabela com 100 colunas que é publicada na publicação transacional, um único comando replicado contra a tabela pode conter 100 parâmetros. Você deve reduzir a configuração do parâmetro CommitBatchThreshold para que o número máximo de parâmetros que o agente de distribuição tem que enviar em qualquer único lote no máximo seja 2098. Se todas as colunas são afetadas pelo comando, a configuração do parâmetro CommitBatchThreshold deverá ser 20 ou menor para permitir a um máximo de 2000 parâmetros por lote de 20 comandos contra essa tabela.

Método 2

Use o mesmo tipo de comando de replicação para todos os artigos na publicação quando você configura a publicação. Evite misturar os mecanismos de entrega de comando para artigos da publicação mesmo para reduzir a necessidade para o Distribution Agent selecionar o lote de entrega usando o procedimento sp_executesql armazenado como um wrapper em um lote de comandos.

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Mais Informações

Para obter mais informações sobre replicação Distribution Agent, visite o seguinte site da Web Microsoft Developer Network (MSDN):
http://msdn.microsoft.com/en-us/library/ms147328(SQL.90).aspx

Para obter mais informações sobre perfis de agente de replicação, visite o seguinte site da Web Microsoft Developer Network (MSDN):
http://msdn.microsoft.com/en-us/library/ms151223(SQL.90).aspx

Referências

Para obter mais informações sobre o modelo incremental de serviços para o SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
935897Há um modelo incremental de serviços da equipe do SQL Server para fornecer hotfixes para problemas relatados
Para obter mais informações sobre como obter o SQL Server 2005 Service Pack 3, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
913089Como obter o service pack mais recente para o SQL Server 2005
Para obter mais informações sobre os novos recursos no SQL Server 2005 SP3 e sobre os aperfeiçoamentos no SQL Server 2005 SP3, visite o seguinte site:
http://go.microsoft.com/fwlink/?LinkId=131442
Para obter mais informações sobre o esquema para nomeação para atualizações do SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
822499Novo esquema para nomeação para pacotes de atualização de software do Microsoft SQL Server
Para obter mais informações sobre terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software

Propriedades

ID do artigo: 973103 - Última revisão: segunda-feira, 17 de agosto de 2009 - Revisão: 1.2
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Workgroup
Palavras-chave: 
kbmt kbsurveynew kbhotfixrollup kbfix kbpubtypekc kbqfe kbexpertiseadvanced kbhotfixserver KB973103 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 973103

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com