Inserir linha OrderTracking sem êxito em Stress and Commerce Server eventos 4104 conectado

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: 320781
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Intermitentemente, o seguinte evento é registrado no computador do Commerce Server:
Event Type:      ErrorEvent Source:    Commerce Server 2000Event Category:  NoneEvent ID:        4104Date:            3/13/2002Time:            3:18:53 PMUser:            N/AComputer:        <Machine_Name>Description:Pipeline Error:  Component Execution failed for component[0x8]  hr: 0x80020101ProgID: Commerce.Scriptor.1MscsExecute() failed.Script invocation failed.Violation of PRIMARY KEY constraint 'PK_counters'. Cannot insert duplicate key in object 'counters'.Line: 5.				
o seguinte tipo de erro ocorre no navegador após o check-out:
2002-03-13 20:27:57 157.59.127.25 - 157.59.127.25 443 POST /payment.asp|217|80040e2f|Violation_of_PRIMARY_KEY_constraint_'PK_counters'._Cannot_insert_duplicate_key_in_object_'counters'. 500 702 1520 				
o erro a seguir é registrado no log do pipeline:
PIPELINE:-- component [0x8] returned hr: 0x80020101, IErrorLevel=4 in 36125 millisecondsError Description: Component Execution failed for component[0x8]  hr: 0x80020101ProgID: Commerce.Scriptor.1MscsExecute() failed.Scriptinvocation failed.Violation of PRIMARY KEY constraint 'PK_counters'. Cannot insert duplicate key in object 'counters'.Line: 5.PIPELINE:-- 2002/03/20 13:44:41.0025 Pipeline Execution completed returning hr: 0x80020101              i:  0x9         hrLoop:  0x80020101  *plErrorLevel:  1000(=====MTS ABORTed=====)Sink stopped at 2002/03/20 13:44:41.0025				
as instruções a seguir são registradas em um log de rastreamento do Microsoft SQL Server perto da hora o erro ocorre:
exec sp_cursor 180150000, 4, 0, N'counters', @next = 1, @countername = N'OrderTracking'SELECT next, countername FROM counters WHERE countername = 'OrderTracking'				
Causa
SaveAsOrder está implementando o contador salvando operações. A rotina do SQL Server tem o comando que resulta em um tempo limite e tentar inserir uma linha que já existe. SQL Server retorna o erro como resultado.
Resolução
Para resolver esse problema de contenção, siga um destes procedimentos:
  1. Definir DTCTimeout ser menor que CommandTimeout . Dessa forma um limite de coordenador de transações distribuídas (DTC) da Microsoft pode ocorrer e ser manipulado em vez do silencioso bloqueio tempo-limite em que o processamento do SQL Server falha. Verifique se a seguinte configuração (padrão) está definida:
    1. Abra Ferramentas administrativas.
    2. Para o IIS, clique em Serviços de componentes .
    3. pacotes COM + .
    4. Clique em computador local .
    5. Clique em Propriedades .
    6. Clique na guia Opções .
    7. Especifica 60 (segundos) para o tempo limite do DTC.
  2. Configure o código de site para cada site para usar um contador exclusivo. Para fazer isso, explicitamente defina OrderGroup.OrderTrackingNumber no código de site e use um nome de contador diferente para cada site. Isso irá reduzir a contenção de bloqueio e assim resolver esse problema. Por exemplo, usar o seguinte código de exemplo como base para modificar o código Include\Payment.asp:
    If IsNull(mscsOrderGrp.Value("order_number"))     set objGenID = Server.CreateObject("Commerce.GenID")    mscsOrderGrp.Value("order_number") = objGenID.GetCounterValue("OrderTracking<SiteName/Number>", 0) End IfmscsOrderGrp.SaveAsOrder()					
  3. Use bancos de dados transação dedicado para cada site. Para fazer isso, divida o banco de dados uma transação em vários bancos de dados transação. Você pode criar um banco de dados para cada site. Quando você fizer isso, cada site não compartilha recursos, que ajuda a interromper a contenção da linha OrderTracking SQL Server que é usada para o contador.
Situação
A Microsoft confirmou que este é um problema no Microsoft Commerce Server 2002.
Mais Informações
O objeto GenID é usado para criar e manter contadores globais seqüenciais que são mantidas no banco de dados. O componente OrderGroup usa GenID para gerar uma identificação de ordem exclusivo quando você chamar SaveAsOrder . O componente GenID realiza uma inserção na tabela de contadores no banco de dados transações quando uma linha existente para um determinado nome de contador não for encontrada. Se uma linha para que contador nome ("OrderTracking" por padrão) já existe, ocorrer uma atualização.

Propriedades

ID do Artigo: 320781 - Última Revisão: 12/07/2015 10:28:38 - Revisão: 1.2

Microsoft Commerce Server 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbbug kbcommserv2000presp2fix kbcommserv2000sp2fix kbfix KB320781 KbMtpt
Comentários