Oracle 9i – Conexões de rede - Parte V

Configurando o método de nomeação local (tnsnames.ora)

por Ricardo Rezende

Finalmente chagamos no lado cliente da conexão ao BD Oracle.

Nesta última parte da série sobre conexões de rede, abordarei o método de nomeação local que é feito através de dois arquivos de configuração residentes no lado cliente, são eles o arquivo tnsnames.ora e o arquivo sqlnet.ora

Tenha uma boa leitura.

Vantagens do método de nomeação local

Podemos citar três grandes vantagens na utilização do método de nomeação local:

·         É um método relativamente direto de resolver endereços de serviços;

·  Possibilita resolver nomes de serviços de rede através de diferentes protocolos;

·         Pode ser configurado facilmente através da ferramenta gráfica Net Manager (que não abordarei neste artigo).

Independente da maneira pela qual deseje configurar o método de nomeação local, todas as configurações estarão armazenadas no arquivo tnsnames.ora, que é um arquivo do tipo texto puro que pode ser editado em qualquer editor de texto, tanto em ambiente Windows quanto em ambiente UNIX.

Sendo assim, este artigo abordará a configuração diretamente no arquivo tnsnames.ora, para que o leitor entenda perfeitamente todos os parâmetros de configuração.

A Figura 1 ilustra todo o esquema utilizado pelo Oracle para fazer a conexão

RicardoRezende_Oracle9iConexoesPtVI_Fig01.png

Figura 1. Esquema de conexão Oracle.

O arquivo tnsnames.ora

Como mencionado acima, o arquivo tnsnames.ora é utilizado para armazenar os nomes de serviço de rede para que a estação de trabalho (cliente) consiga conectar-se ao servidor Oracle.

A localização padrão onde este arquivo fica gravado é:

·         Em ambiente Windows: %ORACLE_HOME%\network\admin;

·         Em ambiente UNIX: $ORACLE_HOME/network/admin;

NOTA 1.

ORACLE_HOME é uma variável de ambiente que define a localização base de instalação do Oracle.

 

A Listagem 1 exibe um texto padrão encontrado em um arquivo tnsnames.ora.

SQLMAGAZINE =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS =

(PROTOCOL = TCP)(HOST = 192.168.10.25)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = SQLMAGAZINE)

)

)

)

Listagem 1. Conteúdo do arquivo tnsnames.ora.

Descreverei cada um dos parâmetros utilizados no arquivo tnsnames.ora (Tabela 1).

Parâmetro

Descrição

SQLMAGAZINE

Este é o nome dado para a sua entrada de nomeação local. É ele que deverá ser usado no momento da conexão com o BD.

Poderá ser definido qualquer nome desde que não contenha espaços.

DESCRIPTION

É a palavra chave para definir o descritor de conexão. Todas as descrições serão especificadas sempre desta mesma forma.

ADDRESS_LIST

É a palavra chave que indica a lista de endereços disponíveis.

ADDRESS

Palavra chave para a especificação do endereço. Para múltiplos endereços, basta manter uma entrada ADDRESS para cada endereço e todos dentro do mesmo ADDRESS_LIST.

PROTOCOL

Define qual o protocolo de rede que está sendo usado.

HOST

Informação específica quando da utilização do protocolo TCP/IP. Especifica o endereço IP do servidor ou seu nome, caso deseje.

PORT

Informação específica quando da utilização do protocolo TCP/IP. Especifica o número da porta na qual o listener está “escutando”, no lado servidor.

CONNECT_DATA

Especifica o nome do serviço de banco de dados no qual se deverá conectar.
Habitualmente, utiliza-se o nome da entrada no tnsnames.ora sendo o mesmo nome do serviço, mas isso é apenas uma boa prática, não uma regra.

Tabela 1. Parâmetros do arquivo tnsnames.ora.

O arquivo sqlnet.ora

O arquivo sqlnet.ora controla o comportamento do serviço de rede Oracle.

A localização padrão onde este arquivo fica gravado é:

·         Em ambiente Windows: %ORACLE_HOME%\network\admin;

·         Em ambiente UNIX: $ORACLE_HOME/network/admin;

NOTA 2.

É possível alterar a localização padrão dos arquivos tnsnames.ora e sqlnet.ora apenas definindo uma nova localização atribuindo-a à variável de ambiente TNS_ADMIN.

 

O arquivo sqlnet.ora possui apenas um parâmetro, NAMES.DIRECTORY_PATH, que define como o serviço de rede Oracle irá resolver o nome do serviço definido no descritor de conexão. Você poderá utilizar múltiplos métodos apenas representando-os em uma lista separada por ponto e vírgula (;) e delimitadas por parênteses.

Caso múltiplos métodos sejam definidos, o serviço de rede irá resolver os nomes de serviço utilizando a ordem da esquerda para a direita de definições dos métodos.

A Listagem 2 exibe um conteúdo típico do arquivo sqlnet.ora.

NAMES.DIRECTORY_PATH = (TNSNAMES)

Listagem 2. Conteúdo do arquivo sqlnet.ora.

Pronto. Após a configuração do método de nomeação e nomes de serviço de rede, você poderá conectar-se a um servidor de banco de dados Oracle através de qualquer ferramenta cliente, como por exemplo o SQL*Plus.

Solucionando problemas no lado cliente

Após todas as configurações executadas, é possível que algum ponto tenha passado despercebido e uma mensagem de erro seja apresentada no momento da conexão.

A Listagem 3 mostra códigos e mensagens de erro relacionadas a problemas no lado cliente.

ORA-12154 “TNS: could not resolve service name”

ORA-12198 “TNS: could not find path to destination”

ORA-12203 “TNS: unable to connect to destination”

ORA-12533 “TNS: illegal ADDRESS parameters”

ORA-12541 “TNS: no listener”

Listagem 3. Erros comuns, relacionados à conexão no lado cliente.

Listarei as possíveis causas e as ações que poderão ser tomadas para solucionar os problemas:

 

ORA-12154 “TNS: could not resolve service name”

Causa:

O serviço de rede Oracle não pode localizar o descritor de conexão que está especificado no arquivo tnsnames.ora.

Ações:

1.      Verifique se o arquivo tnsnames.ora realmente existe e está acessível;

2.      Tenha certeza que o arquivo tnsnames.ora está no mesmo local definido na variável de ambiente TNS_ADMIN;

3.      Verifique se o nome do serviço especificado na sua string de conexão está mapeado em um descritor de conexão no arquivo tnsnames.ora;

4.      Verifique se não existe uma cópia duplicada do arquivo sqlnet.ora;

5.      Caso esteja tentando conectar-se através de uma caixa de diálogo de login, tenha certeza de não estar usando o símbolo de arroba (@) antes do nome do serviço.

 

ORA-12198 “TNS: could not find path to destination”

ORA-12203 “TNS: unable to connect to destination”

Causa:

O cliente não pode encontrar o banco de dados desejado.

Ações:

1.      Verifique se foi definido corretamente o nome do serviço de banco de dados que deseja conectar;

2.      Verifique se o parâmetro ADDRESS no descritor de conexão está correto;

3.      Tenha certeza que o arquivo tnsnames.ora está no mesmo local definido na variável de ambiente TNS_ADMINV;

4.      Verifique se o listenter está inicializado e em execução. Caso não esteja, inicialize-o;

5.      Caso esteja tentando conectar-se através de uma caixa de diálogo de login, tenha certeza de não estar usando o símbolo de arroba (@) antes do nome do serviço.

 

ORA-12533 “TNS: illegal ADDRESS parameters”

Causa:

O protocolo especificado no parâmetro ADDRESS do seu descritor de conexão está incorreto.

Ação:

Verifique qual o protocolo de conexão correto e altere em seu descritor de conexão;

 

ORA-12541 “TNS: no listener”

Causa:

Não é possível contatar o listener no lado servidor.

Ação:

Verifique se o listenter está inicializado e em execução. Caso não esteja, inicialize-o.

Conclusões

Finalizamos aqui a série de artigos sobre conexão ao banco de dados Oracle.

Este assunto é de suma importância para o bom andamento das atividades de sua empresa relacionadas com acesso ao banco de dados.

Muitas vezes, problemas triviais tornam-se grandes problemas pela falta de conhecimento na maneira pela qual o Oracle trata as conexões entre as estações cliente e o servidor.

A velha prática de configuração através de ferramentas gráficas é bastante tranqüila e fácil, porém limita os conhecimentos de cada parâmetro e cada conceito.

Espero tê-lo ajudado a entender um pouco melhor toda esta sistemática que envolve uma conexão da sua aplicação com o banco de dados.

Um grande abraço e até a próxima.

 

Noticia_RicardoRezende.gif

Ricardo Rezende (ricardo@sqlmagazine.com.br) é DBA Oracle na IBM do Brasil em projeto internacional, possui cursos oficiais pela Oracle University, consultor independente de Bancos de Dados, editor técnico da revista SQL Magazine, editor do Website da SQL Magazine e professor licenciado pelo Centro Estadual de Educação Tecnológica “Paula Souza” na unidade de Taubaté-SP.

Leia também