Limitações de Depuração de Procedimento Armazenado SQL

Geral

Limitação do Linux

Quando estiver depurando um Procedimento Armazenado SQL em um banco de dados local, é possível receber o número de erro SQL1224N:

COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1224N Um agente do banco de dados não pôde ser iniciado para atender um pedido ou foi encerrado devido a um encerramento do sistema de banco de dados ou a um comando force. SQLSTATE=55032

Isto ocorre devido a um problema no kernel do Linux (kernel do Linux Bugzilla erro 351). As instruções a seguir são uma solução alternativa que utiliza o método de conexão TCPIP do DB2 (como um auto-retorno) em vez de CLI (Interface de Nível de Chamada). Este procedimento permitirá que o depurador utilize o mesmo alias de banco de dados utilizado anteriormente:

  1. Se uma porta para clientes DB2 remotos não tiver sido configurada, efetue logon como root e crie uma porta TCP/IP em /etc/services, (por exemplo, db2c_db2inst1 50000/tcp). Como alternativa, você pode utilizar o Centro de Controle para criar uma porta TCP/IP (configurando as propriedades de comunicações para a instância de banco de dados). Pode ser utilizada uma porta para clientes DB2 remotos.

    As etapas 2 a 7 abaixo requerem que você efetue login como o proprietário da instância do DB2.

  2. Configure o gerenciador de banco de dados para iniciar o gerenciador de conexão para o protocolo de comunicação TCP/IP. Se você não tiver certeza de que isto já foi feito, emita o seguinte comando:
    db2set db2comm

    Se a saída não contiver a palavra-chave tcpip, será necessário digitar o seguinte comando para atualizar a variável de registro db2comm para incluir tcpip:

    db2set db2comm=<nomes de protocolos existentes>,tcpip

    A variável de registro db2comm determina qual gerenciador de conexão do protocolo será ativado quando o gerenciador de banco de dados for iniciado. Você pode configurar esta variável para vários protocolos de comunicação, separando as palavras-chave com vírgulas, por exemplo, db2set db2comm=tcpip,appc.

    É necessário emitir novamente o comando db2start para iniciar os gerenciadores de conexão para os protocolos especificados pelo parâmetro de registro db2comm. Como iniciaremos o DB2 na etapa 7 abaixo, isso não é necessário agora.

    .
  3. Atualize o parâmetro de configuração do gerenciador de banco de dados SVCENAME com o nome do serviço de conexão definido em /etc/services (etapa 1).

    Para verificar a configuração atual de SVCENAME, digite o seguinte comando:

    db2 get dbm cfg | grep -i svcename

    Se precisar atualizar a configuração de SVCENAME, digite o seguinte comando:

    db2 update dbm cfg using svcename <nome do serviço de conexão>

    em que <nome do serviço de conexão> faz distinção entre maiúsculas e minúsculas e deve corresponder ao nome da porta de serviço colocada em /etc/services (por exemplo, db2 update dbm cfg using svcename db2c_db2inst1).

    A atualização da configuração do gerenciador de banco de dados não será efetivada até que o próximo comando db2start seja emitido. Isso será feito na etapa 7 abaixo.

  4. Catalogue o nó de auto-retorno digitando o seguinte comando:
    db2 catalog tcpip node <nome_do_nó> remote <nome_do_host> server <nome do serviço de conexão>

    em que,

    • <nome_do_nó> é um alias local para o nó a ser catalogado. Este é um nome arbitrário na estação de trabalho, utilizado para identificar o nó (por exemplo, db2 catalog tcpip node mynode remote 127.0.0.1 server db2c_db2inst1).
    • <nome_do_host> é o nome da máquina na qual o DB2 está instalado. O nome do host especificado deve ter correspondência exata de maiúsculas e minúsculas e o nome da máquina. Se você não tiver certeza do nome da máquina, verifique o Centro de Controle.

    Para verificar se o comando catalog funcionou corretamente, emita o seguinte comando:

    db2 list node directory

    Uma saída de amostra deste comando é (as linhas em branco foram removidas para legibilidade):

    Diretório do Nó
    Número de entradas no diretório = 1
    Entrada 1 do nó:
    Nome do nó = MYNODE
    Comentário =
    Protocolo = TCPIP
    Nome do host = 127.0.0.1
    Nome do serviço = db2c_db2inst1
  5. Catalogue o banco de dados da seguinte forma. Consulte os comandos especificados abaixo para gerar saída de amostra, se desejar rastrear os efeitos de cada comando:
    1. db2 catalog db <nome do banco de dados> como <alias do banco de dados>
    2. db2 uncatalog db <nome do banco de dados>
    3. db2 catalog db <alias do banco de dados> como <nome do banco de dados> at node <nome do nó>
    por exemplo,
    db2 catalog db WAS as WASLOOP
    db2 uncatalog db WAS
    db2 catalog db WASLOOP as WAS at node MYNODE

    Notas:

    • O alias de banco de dados pode ser qualquer nome desejado, mas não pode ser igual ao nome do banco de dados. O alias deve ter 8 caracteres ou menos.
    • Você receberá um número de erro SQL1334N se não catalogar o banco de dados corretamente.
    • É necessário repetir as etapas 5a a 5c para cada banco de dados no qual deseja depurar um procedimento armazenado.

    Saída de amostra para as etapas 5a a 5c

    Antes da etapa 5a, já foi criado um banco de dados local denominado WAS. O comando db2 list db directory tem uma saída semelhante à seguinte:

    Diretório de Banco de Dados do Sistema
    Número de entradas no diretório = 1
    
    Entrada 1 do banco de dados:
    
    Alias de banco de dados = WAS
    Nome do banco de dados = WAS
    Diretório do banco de dados local = /home/ctsui
    Nível de release do banco de dados = 9.00
    Comentário =
    Tipo de entrada de diretório = Indireto
    Número do nó do catálogo = 0

    Após a etapa 5a, db2 list db directory terá uma saída semelhante à seguinte:

    Diretório de Banco de Dados do Sistema
    Número de entradas no diretório = 2
    
    Entrada 1 do banco de dados:
    
    Alias de banco de dados = WAS
    Nome do banco de dados = WAS
    Diretório do banco de dados local = /home/ctsui
    Nível de release do banco de dados = 9.00
    Comentário =
    Tipo de entrada de diretório = Indireto
    Número do nó do catálogo = 0
    Entrada 2 do banco de dados:
    
    Alias de banco de dados = WASLOOP
    Nome do banco de dados = WAS
    Diretório do banco de dados local = /home/ctsui
    Nível de release do banco de dados = 9.00
    Comentário =
    Tipo de entrada de diretório = Indireto
    Número do nó do catálogo = 0

    Após a etapa 5b, db2 list db directory terá uma saída semelhante à seguinte:

    Diretório de Banco de Dados do Sistema
    Número de entradas no diretório = 1
    
    Entrada 1 do banco de dados:
    
    Alias de banco de dados = WASLOOP
    Nome do banco de dados = WAS
    Diretório do banco de dados local = /home/ctsui
    Nível de release do banco de dados = 9.00
    Comentário =
    Tipo de entrada de diretório = Indireto
    Número do nó do catálogo = 0

    Após a etapa 5c, db2 list db directory terá uma saída semelhante à seguinte:

    Diretório de Banco de Dados do Sistema
    Número de entradas no diretório = 2
    
    Entrada 1 do banco de dados:
    
    Alias de banco de dados = WAS
    Nome do banco de dados = WASLOOP
    Nome do nó = MYNODE
    Nível de release do banco de dados = 9.00
    Comentário =
    Tipo de entrada de diretório = Remoto
    Número do nó do catálogo = -1 
    Entrada 2 do banco de dados:
    
    Alias de banco de dados = WASLOOP
    Nome do banco de dados = WAS
    Diretório do banco de dados local = /home/ctsui
    Nível de release do banco de dados = 9.00
    Comentário =
    Tipo de entrada de diretório = Indireto
    Número do nó do catálogo = 0

    Para verificar se o comando catalog db funcionou corretamente, emita os dois seguintes comandos (e veja a saída de amostra abaixo):

    db2 connect to wasloop
    db2 connect to was

    em que db2 connect to wasloop deve imprimir as informações de conexão e db2 connect to was deve fornecer SQL1403N.

    Saída de amostra de db2 connect to wasloop:

    Informações de Conexão com o Banco de Dados
    Diretório de Banco de Dados do Sistema
    
    Servidor de banco de dados = DB2/6000 6.1.0
    ID de autorização SQL = CTSUI
    Alias de banco de dados local = WASLOOP

    Saída de amostra de db2 connect to was:

    Informações de Conexão com o Banco de Dados
    Diretório de Banco de Dados do Sistema
    
    Servidor de banco de dados = DB2/6000 6.1.0
    ID de autorização SQL = CTSUI
    Alias de banco de dados local = WAS
  6. Atualize o mecanismo de autenticação para Autenticação de Cliente. Digite o comando:
    db2 update dbm cfg using authentication client

    Para verificar se o comando funcionou corretamente, exiba a nova configuração com o seguinte comando:

    db2 get dbm cfg

    Saída de amostra:

    ....
    Autenticação do gerenciador de banco de dados     (AUTHENTICATION) = CLIENT
    ....
  7. Reinicie o DB2 para atualizar o cache do diretório. Por exemplo,
    db2stop
    db2start

    Nota: Pode ser necessário utilizar db2stop force para fechar todas as conexões com o banco de dados ativas.

  8. Para o WAS, não é necessário atualizar o arquivo admin.config. Para um aplicativo do WebSphere, não é necessário alterar a configuração da origem de dados existente.
  9. Se desejar eliminar o banco de dados, faça o seguinte:
    1. db2 attach to <nome_do_nó> user <ID_do_usuário> using <senha>
    2. db2 drop db <nome do banco de dados>
      por exemplo,
      db2 attach to MYNODE user myid using mypasswd
      db2 drop db WAS


Feedback

(C) Direitos Autorais IBM Corporation 2006. Todos os Direitos Reservados.