Resolvendo Transações Indeterminadas

Utilize esta tarefa para resolver transações indeterminadas e as mensagens associadas a elas.

Sobre Esta Tarefa

As transações podem ficar presas no estado indeterminado indefinidamente devido a uma circunstância excepcional, como a remoção de um nó que faz com que os mecanismos do sistema de mensagens sejam destruídos. Quando uma transação torna-se indeterminada, ela deve ser confirmada ou recuperada para que o processamento normal pelo mecanismo do sistema de mensagens afetado possa continuar.

É possível utilizar o console administrativo para exibir as mensagens que causam o problema (consulte Listando Mensagens em um Ponto da Mensagem). Se houver mensagens envolvidas em uma transação indeterminada, a identidade da transação será mostrada em um painel associado à mensagem. Você pode então resolver a transação de duas maneiras:
  1. Usando os painéis de gerenciamento de transações
  2. Usando métodos no mecanismo do sistema de mensagens MBean

Você deve, primeiramente, tentar resolver a transação indeterminada usando as interfaces MBean de gerenciamento de transação do servidor de aplicativos. Elas são documentadas em Gerenciando Transações Ativas e Preparadas Usando o Script wsadmin. Use os scripts para todos os servidores de aplicativos que possam estar coordenando as transações, incluindo as ações do Sistema de Mensagens, para o provedor de sistemas de mensagens padrão. Se a identidade da transação for conhecida pelos scripts do gerenciador de transações, utilize os scripts para resolver as transações. Isto resolverá consistentemente todos os recursos (incluindo Sistema de Mensagens) em uma transação global.

Se a identidade da transação não for conhecida pelos scripts do gerenciador de transações que são executados em qualquer servidor de aplicativos, ou se o servidor de aplicativos que estiver hospedando o gerenciador de transações não puder ser recuperado, será possível utilizar os métodos no MBean SIBMessagingEngine para resolver a parte de uma transação no Sistema de Mensagens independentemente da transação global. A escolha para confirmar ou recuperar a transação deve ser feita manualmente.

Os seguintes métodos no mecanismo do sistema de mensagens MBean podem ser usados para obter uma lista de identidades da transação (xid) e para cometer e retroceder transações:
  • getPreparedTransactions()
  • commitPreparedTransaction(String xid)
  • rollbackPreparedTransaction(String xid)
Para invocar os métodos, você pode usar um comando wsadmin, por exemplo, você pode usar um comando da seguinte forma para obter uma lista de identidades de transações indeterminadas do mecanismo do sistema de mensagens MBean:
wsadmin>AdminControl.invoke(AdminControl.queryNames("type=SIBMessagingEngine,*").
splitlines()[0] , "getPreparedTransactions")
[IBM i]Nota: [IBM i]O cliente de script wsadmin é executado do Qshell. [IBM i]Para obter informações adicionais, consulte Configurando o Qshell para Executar Scripts do WebSphere Usando o Script wsadmin.
Alternativamente, você pode utilizar um script, como o seguinte para chamar os métodos no MBean:
import sys

mebeans=AdminControl.queryNames("type=SIBMessagingEngine,*").splitlines()

para mebean em mebeans:
  input=0
  meName=""
  print "--- Iniciar ME: -------------"
  print mebean
  print "-----------------------------"
  while input>=0:
    xidList=AdminControl.invoke(mebean , "getPreparedTransactions").splitlines()
    print "--- Transações Preparadas ---"
    index=0
    for xid in xidList:
      print "  Index=%s XID=%s" % (index , xid)
      index+=1
    print "------- Fim da Lista --------"
    print "Select index of XID to commit/rollback"
    print "(or enter -1 to skip to next ME):"
    input=int(sys.stdin.readline().strip())

    if input<0:
      print "Nenhum índice selecionado."
    else:
      xid=xidList[input]
      print "Digite c para confirmar ou r para recuperar o XID %s" % xid
      input = sys.stdin.readline().strip()
      if input=="c":
        print "Confirmando o xid=%s" % xid
        AdminControl.invoke(mebean , "commitPreparedTransaction" , xid)
      if input=="r":
        print "Recuperando o xid=%s" % xid
        AdminControl.invoke(mebean , "rollbackPreparedTransaction" , xid)
    imprimir
  print "--- Encerrar ME ---------------"
  imprimir

print "Nenhuma outra definição ME localizada, saindo"

Este script enumera as identidades das transações junto com um índice. Então, você pode selecionar um índice e consolidar ou reverter a transação correspondente àquele índice.

Procedimento

  1. Utilize o console administrativo para localizar a identidade da transação de mensagens que têm em transações indeterminadas.
  2. Opcional: Se uma identidade de transação aparecer no painel de gerenciamento de transações, confirme ou recupere as transações conforme requeridas.
  3. Opcional: Se uma transação de identidade não aparecer no painel de gerenciamento de transações, use os métodos no mecanismo do sistema de mensagens MBean. Por exemplo, utilize um script para exibir uma lista de identidades de transações indeterminadas. Para cada transação:
    1. Digite o índice da identidade da transação.
    2. Opcional: Digite c para confirmar a transação.
    3. Opcional: Digite r para recuperar a transação.
  4. Para verificar se essas transações não são mais indeterminadas, reinicie o servidor e use o painel de gerenciamento de transações ou os métodos no mecanismo do sistema de mensagens MBean para verificação.

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjm0165_
Nome do arquivo: tjm0165_.html