Como não dá para falar de Listener sem falar do Oracle Client, nesta segunda parte também vou falar um pouco sobre o Oracle Client, que deve ser instalado em máquinas onde rodam aplicações Cliente/Servidor e que acessam o banco de dados Oracle.
Para entendermos tanto o Listener, quanto o Oracle Client, é preciso uma introdução mínima aos fundamentos de conexão em rede da Oracle.
A Arquitetura de Redes da Oracle: Oracle Net Connections
Oracle Net Connections é a camada de software que reside tanto no lado do cliente quanto no lado do servidor de banco de dados oracle (servidor). É responsável por estabelecer e manter a conexão entre a aplicação cliente e o servidor, bem como o intercâmbio de mensagens entre eles, usando protocolos padrão da indústria. A Oracle Net é compreendida de dois componentes de software:
- Oracle Net foundation layer
- Oracle protocol suport
Oracle Net Foundation Layer (ONF)
Do lado do cliente, as aplicações se comunicam com a ONF para estabelecer e manter conexões. A ONF usa uma camada de suporte a protocolos da Oracle, que roda em cima de protocolos padrão de rede, como o TCP/IP, para se comunicar com o servidor.
Do lado do servidor, o funcionamento é similar ao do lado do cliente. O protocolo de rede envia as requisições do cliente para uma camada de suporte a protocolos da Oracle, que envia a informação para a ONF. A ONF então se comunica com o servidor, para processar as solicitações do cliente.
Oracle protocol suport
A Oracle Net foundation layer (ONF) usa a camada de suporte a protocolos da Oracle para se comunicar com os seguintes protocolos de rede padrão da indústria:
- TCP/IP
- TCP/IP with SSL
- Named Pipes
- SDP
Oracle Net Listener
A única, porém importante função do Oracle Net Listener ou simplesmente Listener, é receber requisições de acesso ao servidor de banco de dados oracle. O Listener é configurado com um endereço e um protocolo. Clientes configurados com o mesmo protocolo podem enviar requisições de conexão para o Listener, no endereço em que ele se encontra (sempre do lado do servidor). Uma vez recebida a requisição, ela é passada para o servidor, quando então é estabelecida uma conexão direta entre o banco de dados e a aplicação cliente. Após estabelecida uma conexão entre o cliente e o servidor, o Listener “sai de campo”, pois já terá cumprido seu papel.
Oracle Net Client
Em uma estrutura cliente/servidor (tipicamente uma rede local), é necessário instalar o Oracle Net Client ou o que chamamos aqui no Brasil de Cliente Oracle. Consiste em instalar os componentes necessários para a Oracle Net foundation layer (ONF), que devem estar presentes na máquina cliente.
Using Easy Connect Naming on the Client
A partir da versão 10g, a Oracle introduziu o conceito de Easy Connect ou conexão fácil. Neste modo, não é preciso configurar coisa alguma no cliente. Basta instalar e pronto! Entretanto, os softwares precisam usar uma sintaxe de conexão da seguinte forma:
username/password@[//]host[:port][/service_name]
Se, por exemplo, o Oracle XE Server estiver rodando numa rede local em uma máquina cujo IP é 172.16.148.2, e você estiver numa máquina cliente querendo conectar-se ao servidor via SQL*Plus, basta fazer o seguinte:
sqlplus /nolog
SQL> CONNECT usuario/senha@172.16.148.2
SQL> CONNECT usuario/senha@172.16.148.2
Note que no exemplo acima só foi informado o que é obrigatório. Todos os defaults não foram informados (a // | a porta: 1521 | e o service_name:XE).
DICA: para conexões via URL ou JDBC, o uso das barras (//) é obrigatório antes do host:
usuario/senha@//172.16.148.2
Compatibilidade “para trás”: Oracle Names
O Oracle 10g e versões posteriores não suportam mais Oracle Names. Se você tiver aplicações em tua rede que foram desenvolvidas usando Oracle Names, basta você instalar versões anteriores do Oracle Client. Geralmente a versão Cliente do Oracle 9i resolve.
Como o público alvo deste Blog é o pessoal que usa o Oracle 10g e posteriores, não vou entrar em detalhes neste assunto. Mas a instalação de clientes de versões anteriores ao 10g consiste em duas etapas: a instalação do software cliente e sua configuração. A instalação é simples, via famoso avançar; e a configuração também é fácil: basta rodar o Oracle Net Configuration Assistant (ou netca, em linha de comando).
A configuração nada mais é que informar um Nome de Serviço e o IP ou nome do Host onde o Oracle Server está rodando. Através do Nome de Serviço é que tanto as aplicações quanto os utilitários, a exemplo do SQL*Plus, podem se conectar ao servidor.
Resumindo:
O Listener é um processo que reside num servidor de banco de dados Oracle, cuja responsabilidade é “ouvir” requisições de conexão que chegam dos clientes, além de gerenciar o tráfego para o servidor.
Quando um cliente solicita uma seção de rede com o servidor, um listener recebe a solicitação. Se as informações do cliente combinam com as informações do listener, é permitida uma conexão com o servidor de banco de dados.
Do lado da máquina cliente, é preciso instalar o Cliente Oracle. A partir da versão 10g, não há mais suporte ao Oracle Names e a conexão é feita no modo Easy Connect.
Enfim, O Listener
Na primeira parte desta séria, vimos como iniciar e parar o Listener. Vimos também como checar seu status. A partir de agora vamos estudar seu funcionamento, a fim de poder sanar eventuais problemas. Começaremos pela configuração do Listener e o arquivo listener.ora.
Configurando o Listener
Quando você instala o Oracle 10g XE, ele deixa o Listener configurado. Não há o que fazer neste aspecto. Além disto, é muito raro problemas com o Oracle XE, uma vez instalado e mantido em condições normais de temperatura e pressão :-). Se não ocorrer nenhuma pane no HD onde o XE foi instalado, você nunca terá que se preocupar com o Listener, nem com qualquer outra coisa mais séria.
Mas como o XE é usado por estudantes e até mesmo por desenvolvedores que instalam o XE em seus Desktops ou Notebooks, algumas coisas “inusitadas” podem acontecer e o XE parar de funcionar. Uma delas é o banco de dados rodar perfeitamente, mas o Listener não! O que impede, por exemplo, o SQL Developer ou a interface HTML de conectar ao banco de dados.
O arquivo listener.ora
Para que a gente possa entender o funcionamento do Listener, vamos “espionar” o arquivo listener.ora.
O arquivo listener.ora fica, tipicamente, em $ORACLE_HOME/network/admin, na plataforma Unix/Linux e ORACLE_HOME\network\admin na plataforma Windows. ORACLE_HOME é uma variável de ambiente.
Um arquivo listener.ora típico apresenta a seguinte configuração:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /usr/lib/oracle/xe/app/oracle/product/10.2.0/server)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
(ADDRESS = (PROTOCOL = TCP)(HOST = SuSE111)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /usr/lib/oracle/xe/app/oracle/product/10.2.0/server)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
(ADDRESS = (PROTOCOL = TCP)(HOST = SuSE111)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
A parte que nos interessa é a que está em negrito. E as linhas relevantes são as que estão na cor vermelha. As demais informações se devem ao fato que em um mesmo arquivo listener.ora pode existir configurações para mais de um Listener e para mais de uma instância Oracle (mais de um servidor na mesma máquina, rodando em paralelo). Na versão XE isto é irrelevante, pois só pode haver uma instância. Então nos concentremos nas linhas em vermelho.
A linha (ADDRESS = (PROTOCOL = TCP)(HOST = SuSE111)(PORT = 1521)) informa o protocolo padrão (PROTOCOL) sobre o qual a Oracle Net Foundation Layer está trabalhando, o nome da máquina (HOST) e a porta (PORT) através da qual o Listener estará “escutando”.
Esta informação deve ser passada para a equipe de desenvolvimento das aplicações, uma vez que é com base nestas informações que eles irão configurar o “string de conexão” para o Easy Connect Naming. Com base nas informações acima, uma conexão típica seria:
sqlplus /nolog
SQL> CONNECT usuario/senha@SuSE111:1521/XE
SQL> CONNECT usuario/senha@SuSE111:1521/XE
Como a porta 1521 é a porta padrão e o DEFAULT_SERVICE_LISTENER = (XE), a conexão poderia ser feita mais resumidamente assim:
sqlplus /nolog
SQL> CONNECT usuario/senha@SuSE111
SQL> CONNECT usuario/senha@SuSE111
O que pode dar errado no Listener?
Sinceramente? Pouquíssima coisa! Numa situação de produção, depois de instalado e configurado, só uma pane geral no HD da máquina servidora para causar algum problema, caso o HD danificado contenha o XE instalado nele. Neste caso, depois de sanado o problema, somente o Restore de um Backup que você, pessoa prevenida, deverá ter feito, irá resolver o problema.
Mas, e se eu tiver o XE instalado no meu Notebook ou numa estação de trabalho e apesar de aparentemente estar tudo Ok., mesmo assim o Listener não funcionar?
Bem, somente uma de duas coisas poderá ter acontecido:
- ou o arquivo listener.ora “sumiu”
- ou as informações contidas nele não estão mais “batendo” com a máquina!
A segunda “alternativa” é a mais provável! E a causa mais provável é uma mudança no nome do Host! Se você usar DHCP ou se tua máquina ingressar num domínio Windows, por exemplo, o nome do Host pode mudar sem você se dar conta, e isto é um problema para o Listener!
O Nome do Host mudou!
Por isto que é bom saber como iniciar, parar e verificar o status do Listener “manualmente”. Uma saída típica do Listener com mensagem de erro, por causa de troca de nome de host, é listada abaixo:
oracle@SuSE111:~> lsnrctl start
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 14-JUN-2009 23:29:33
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Iniciando /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/tnslsnr: aguarde...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
O arquivo de parâmetros do sistema é /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/admin/listener.ora
Mensagem de log gravada para /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/log/listener.log
Atendendo em: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
Erro ao atender em: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SuSE)(PORT=1521)))
TNS-12545: A conexão falhou porque o objeto ou host de destino não existe
TNS-12560: TNS:erro de adaptador de protocolo
TNS-00515: A conexão falhou porque o objeto ou host de destino não existe
Falha ao iniciar o listener. Consulte a(s) mensagem(ns) de erro acima...
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 14-JUN-2009 23:29:33
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Iniciando /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/tnslsnr: aguarde...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
O arquivo de parâmetros do sistema é /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/admin/listener.ora
Mensagem de log gravada para /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/log/listener.log
Atendendo em: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
Erro ao atender em: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SuSE)(PORT=1521)))
TNS-12545: A conexão falhou porque o objeto ou host de destino não existe
TNS-12560: TNS:erro de adaptador de protocolo
TNS-00515: A conexão falhou porque o objeto ou host de destino não existe
Falha ao iniciar o listener. Consulte a(s) mensagem(ns) de erro acima...
Assim fica fácil, não é? :-)
No linux, basta o comando uname -n para saber o nome do host. Então é só abrir o arquivo listener.ora e corrigir.
No windows, você precisa descobrir o nome do computador clicando com o botão direito em “Meu Computador” e selecionar Propriedades. Depois é clicar na aba [Nome do computador] e ver o que está escrito no campo “Nome completo do computador”.
Não é que eu implique com a Microsoft, mas isto acontece muito frequentemente no Windows e muito raramente no Linux!
Full Backup!
Uma outra situação não muito rara é que, pelo fato do XE ser pequeno em termos de ocupação de espaço em disco, algumas pessoas fazem um backup inteiro do XE, copiando toda a pasta para outro disco. Não deixa de ser uma solução!
Alguns até se aproveitam deste fato para copiar o XE de uma máquina para outra, simplesmente instalando o XE na outra máquina e depois "jogando" a cópia feita "por cima" da nova instalação. É também uma solução simples!
Mas ambas esbarram no pequeno detalhe que o nome do host provavelmente não será o mesmo. E por este pequeno detalhe muitos terminam descartando estas possiblidades, quando bastaria editar o arquivo listener.ora!
Nenhum comentário:
Postar um comentário