Tratando Exceções e Conflitos do Banco de Dados em Fluxos de Agregação

Quando utilizar fluxos de agregação, você pode observar que ocorrem exceções ou congelamentos do banco de dados. Este tópico informa como manipulá-las.

Antes de começar:

Para concluir esta tarefa, você deve ter concluído as tarefas a seguir:

Lidando com Exceções

Se for detectado um downstream de um nó AggregateReply, o intermediário emitirá uma exceção. Outro nó no fluxo de mensagens também pode emitir uma exceção utilizando a instrução ESQL THROW. Em qualquer caso, quando uma exceção é emitida, ela é capturada de um de dois locais:

  • O nó de entrada no qual as respostas chegam
  • No nó AggregateReply

A tabela a seguir lista eventos e o que ocorre a uma exceção emitida downstream do nó AggregateReply.

Evento Mensagem Propagada Terminal de Saída Exceção Capturada em
Uma resposta esperada chega no nó de entrada e é transmitida para o terminal In do nó AggregateReply. É a última resposta necessária para concluir uma agregação. Mensagem de resposta agregada contendo todas as respostas Saída Nó Input
Uma resposta inesperada chega no nó de entrada e é transmitida para o nó AggregateReply. Ela não é reconhecida como uma resposta válida e a propriedade Tempo Limite de Mensagem Desconhecido é definida como 0. Mensagem recebida Desc. Nó Input
Um tempo limite ocorre porque todas as respostas de uma agregação ainda não chegaram. Mensagem de resposta agregada contendo todas as respostas que foram recebidas Tempo Limite Nó AggregateReply
Um tempo limite desconhecido ocorre porque uma mensagem retida não foi identificada como sendo uma resposta válida. Mensagem retida Desc. Nó AggregateReply
Descobre-se que uma agregação foi concluída em algum momento diferente de quando a última resposta chegou. Mensagem de resposta agregada contendo todas as respostas Saída Nó AggregateReply

Se desejar tratar erros que ocorrem em fluxos de agregação, é necessário capturar estas exceções em todas as instâncias de cada um destes nós no fluxo de mensagens. Para isso:

  1. Alterne para o .
  2. Abra o fluxo de mensagens com o qual deseja trabalhar.
  3. Se você mesmo desejar tratar essas exceções, conecte o terminal catch de cada nó de entrada e AggregateReply a uma seqüência de nós que tratam o erro ocorrido.

    Se desejar uma abordagem unificada para o manuseio de erros, conecte os terminais catch de todos esses nós com uma única seqüência de nós ou crie um subfluxo que manuseie erros de uma forma única e consistente e que conecte esse subfluxo a cada terminal catch.

  4. Se desejar que o intermediário manuseie essas exceções utilizando técnicas de manuseio de erros padrão, não conecte os terminais catch desses nós.
Se conectar o terminal de captura do nó AggregateReply, e quiser enviar a mensagem propagada através deste terminal a um destino no qual ela possa ser recuperada para um processamento posterior, você deve incluir um nó Compute no fluxo de captura para fornecer qualquer processamento específico para transporte. Por exemplo, você deve incluir um cabeçalho MQMD se quiser colocar a mensagem em uma fila do a partir de um nó MQOutput.

O exemplo ESQL abaixo mostra como incluir um cabeçalho MQMD e como transmitir as respostas recebidas pelo nó AggregateReply:

-- Incluir MQMD
SET OutputRoot.MQMD.Version = 2;
.
-- Incluir respostas consolidadas na mensagem de saída
SET OutputRoot.XML.Data.Parsed = InputRoot.ComIbmAggregateReplyBody;
.

Se deseja propagar a informação sobre a exceção da mensagem de saída, você também deve definir a propriedade do modo Compute do nó Compute para um valor que inclua a Exceção.

Lidando com Conflitos de Banco de Dados

Os nós AggregateRequest e AggregateReply acessam o banco de dados do intermediário para gravar e ler informações relacionadas ao processamento de pedidos agregados na tabela BAGGREGATE. Os congelamentos podem ocorrer quando vários recursos tentam acessar tabelas do banco de dados ao mesmo tempo.

Para prevenir o conflito do banco de dados:

  1. Se estiver criando um banco de dados do intermediário utilizando o Sybase em um sistema distribuído, ou no DB2 no z/OS, a definição de travamento padrão é o travamento de páginas. Essa definição pode resultar em congelamentos em fluxos de agregação. Quando você configura o banco de dados do intermediário para um intermediário que hospedará fluxos de mensagens de agregação, ao criar o banco de dados ou posteriormente, ative o bloqueio de linha para evitar conflitos potenciais.
  2. Se estiver criando um banco de dados do intermediário utilizando o DB2 em um sistema distribuído, o intermediário poderá sofrer conflitos, se o recurso de bloqueio de próxima tecla do DB2 estiver ativado. A situação de conflito é relatada pelo intermediário, que grava a mensagem do log de eventos BIP2322 com o Estado SQL 40001.

    Se esse problema ocorrer, desative o próximo travamento de teclas, digitando o seguinte em uma janela de comandos do DB2:

    db2set DB2_RR_TO_RS=YES

    Quando esse comando for concluído, inicie novamente o gerenciador do banco de dados do DB2. Esse comando não possui nenhum outro efeito sobre a operação desse banco de dados.

Se estiver utilizando outro banco de dados, esses congelamentos não ocorrerão.

Conceitos relacionados
Fluxos de Mensagem
Agregação de Fluxo de Mensagens

Tarefas relacionadas
Configurando Fluxos de Agregação
Criando o Fluxo de Difusão de Agregação
Criando um Fluxo de Recepção de Agregação
Associando Fluxos de Agregação de Difusão e Recepção
Definindo Tempos Limites para Agregação
Utilizando Vários Nós AggregateControl
Tratando Erros em Fluxos de Mensagens
Projetando um Fluxo de Mensagens
Criação de um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens

Referências relacionadas
Nó AggregateControl
Nó AggregateReply
Nó AggregateRequest