04 de fevereiro de 2009 por Rodrigo Almeida Ol, amigos. Muitos profissionais, principalmente iniciantes, tm ou j tiveram bastantes problemas de conexo com o banco de dados Oracle, os conhecidos erros de TNS, sigla para Transparent Network Substrate. Esses erros ocorrem durante uma tentativa de conexo com o banco de dados ou at mesmo quando se est utilizando Database Link (DBLINK) para uma outra base de dados. As origens desses erros podem ser diversas e sempre estaro ligadas com o SQL NET ou a sua infra-estrutura de rede LAN/WAN. Para quem no conhece o SQL NET ou Net8 (Antes do Oracle8i), um produto de middleware da Oracle que oferece suporte para as conexes (Transparent Connection) entre cliente/servidor, entre bancos de dados Oracle ou ambientes no-Oracle (Transparent Gateways). Porm, nossa meta no conhecer as solues e arquitetura de rede do Oracle Server, e sim, solucionar os principais problemas de TNS. Mas antes devemos conhecer trs arquivos que compe uma arquitetura de rede Oracle e importantes para iniciar a nossa jornada, so eles: Listener.ora Arquivo de configurao de ouvinte no lado do servidor. Ele fornece as principais configuraes como: Nome nico do banco de dados (Unique Name); Protocolo de Comunicao e porta de acesso; Servios do Listener e Home Oracle associados verso da base. A origem desse arquivo sempre em $ORACLE_HOME/network/admin em Unix\Linux e%ORACLE_HOME%\network\admin para Windows, onde ORACLE_HOME a origem da sua instalao do Oracle Server. Abaixo segue um modelo simples do Listener.ora.. LISTENER =
) LEMBRETE! Esse arquivo geralmente encontrado no servidor que est instalado o banco de dados e no na mquina cliente. E, resumidamente, ele que fornece o suporte de conexo ao banco de dados. Tnsnames.ora Arquivo de configurao para acesso aos bancos de dados Oracle, configurado tanto no lado cliente ou servidor. Ele fornece as informaes de destino dos banco de dados, como: Nome do banco de dados (SID); Tipo de Protocolo, Nome do servidor e Porta de conexo. Abaixo segue um exemplo do contudo de um arquivo Client: ranet.world =
) Podemos encontrar o arquivo no diretrio $ORACLE_HOME\network\admin em Unix\Linux e %ORACLE_HOME%/network/admin em Windows da mquina cliente ou servidor, onde a instalao do Oracle Home pode ser de um simples Client Oracle ou Oracle Server. LEMBRETE! O arquivo tnsnames.ora deve ser configurado no lado cliente e servidor de banco de dados e aplicao, no lado cliente para permitir o usurio acessar o banco de dados, nos servidores de banco de dados para validar a utilizao de DBLINKs e nos servidores de aplicao para permitir a conectividade. Sqlnet.ora Arquivo de configurao que habilita alguns recursos de rede para o cliente ou banco de dados, como: Tipo de nomeao de metdos; Habilita logs e traces; Recursos avanados de segurana e entre outros. Assim como os outros arquivos, pode ser encontrado em$ORACLE_HOME\network\admin em Unix\Linux e %ORACLE_HOME%/network/adminem Windows da mquina cliente ou servidor. Bom, depois de algumas suaves explicaes dos arquivos de configurao, vamos discutir um check list antes de entrar nos problemas de TNS. Esse check list tem como funcionalidade encontrar os possveis problemas antes de realizar qualquer alterao nos arquivos do SQL*NET mencionados acima. O check list consiste nas seguintes tarefas:. 1) PING Antes de qualquer coisa, faa um ping para o IP do servidor e veja se ele est respondendo na rede, como o exemplo abaixo: C:\>ping 10.72.0.171
Disparando contra 10.72.0.171 com 32 bytes de dados:
Resposta de 10.72.0.171: bytes=32 tempo=81ms TTL=60
Resposta de 10.72.0.171: bytes=32 tempo=70ms TTL=60
Resposta de 10.72.0.171: bytes=32 tempo=137ms TTL=60
Resposta de 10.72.0.171: bytes=32 tempo=96ms TTL=60
Aproximar um nmero redondo de vezes em milissegundos:
Mnimo = 70ms, Mximo = 137ms, Mdia = 96ms Ter a resposta do servidor j um bom comeo, caso no tenha, existem alguns possveis problemas: 1. O servidor est com outro endereo IP; 2. O cabo de rede no est conectado ao servidor; 3. O servidor pode estar bloqueado no Firewall; 4. Verificar as regras de firewall do seu usurio para o servidor especfico; 5. Para ambientes distribudos, verifique se o link entre as unidades est ativo; 6. Verificar se a(s) placa(s) de rede do servidor esto habilitadas; 7. Verificar se o servidor est no domnio desejado ou em uma DMZ, se sim, verificar se possui acesso. Todos os problemas mencionados acima tratam diretamente da infra-estrutura e configurao do servidor em questo, portanto no tem que realizar nenhum tipo de configurao ou manuteno no seu ambiente Oracle. 2) TNSPING O SQL*NET fornece um aplicativo chamado TNSPING, que pode ser executado diretamente no servidor ou da mquina cliente, ele utilizado para determinar se o Listener do banco de dados alvo est ativo ou no. Pois, em alguns momentos, podemos ter uma base com o status OPEN (online), porm, o seu servio de Listener est parado, deste modo no permite acesso dos usurios. Veja um exemplo:. C:\>tnsping ranet
TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 15-JAN-2009 10:42:10
Copyright (c) 1997, 2007, Oracle. All rights reserved.
OK (80 ms) Diferente do PING, o TNSPING j faz um teste do servio de conexo diretamente no banco de dados desejado. No exemplo, utilizei o alias RANET para o banco de dados RANET, que o alias configurado em meu tnsnames.ora, a mensagem final de OK diz que possvel realizar a conexo com o banco de dados.. Mas para ter do sucesso de conexo para seu banco de dados, tudo vai depender do status que a sua instncia se encontra, pois se o banco de dados estiver em NOMOUNT (no montado) ou MOUNT (montado), o teste de conexo com o TNSPING ir funcionar, porm, o acesso no ser possvel, assim sendo, quando acessar a aplicao ou SQL*PLUS, ter um erro como o abaixo: C:\>sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on Qui Jan 15 13:43:16 2009 Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
SQL> conn system@ranet Informe a senha:
ERROR: ORA-01033: ORACLE initialization or shutdown in progress Isso porque o seu banco de dados se encontra em status NOMOUNT ou MOUNT, ou tambm como a mensagem diz, em processo de SHUTDOWN em modo immediate, normal ou transacional. Utilizando ainda o TNSPING, possvel medir o tempo de resposta do servio de Listener, colocando um valor N para o teste, conforme o exemplo: C:\>tnsping ranet 5
TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 15-JAN-2009 10:49:21
Copyright (c) 1997, 2007, Oracle. All rights reserved.
OK (80 ms) Acima, foram realizadas 5 tentativas, ou como alguns preferem, 5 saltos. Com essa opo do TNSPING fornecida para cada salto o tempo de resposta da mquina origem para o banco de dados destino, e com isso tambm podemos entrar problemas de performance. Caso o tempo de resposta esteja alto de um valor tolerado, que de 0 a 200 ms (milisegundos), pode comear a verificar alguns problemas de rede. Atrves do TNSPING, comeamos a receber alguns erros de TNS, que podemos discutir abaixo: TNS-03505 Esse erro acontece geralmente quando se tenta realizar um teste de conexo (TNSPING) para um banco de dados que no est registrado no tnsnames.ora da mquina cliente ou servidor, exemplo: C:\>tnsping ranet99
TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 15-JAN-2009 10:57:52
Copyright (c) 1997, 2007, Oracle. All rights reserved.
TNS-03505: Falha ao determinar o nome Soluo Existem algumas possveis solues simples para esse erro especfico de TNS, que so: Colocar o nome correto do banco de dados; Verifique se o alias que est tentando conectar est cadastrado no seu arquivo tnsnames.ora; Verifique se o alias necessita utilizar o .WORLD ao final do nome, o .WORLD significa que de um domnio global, e sua configurao pode ser feita alterando o nome do alias no tnsnames.ora para RANET.WORLD; Talvez seja necessrio colocar o parmetro NAME.DEFAULT_ZONE = WORLD no arquivo sqlnet.ora; Verifique o tipo de nomeao utilizado pelo parmetro NAMES.DIRECTORY_PATH. TNS-12541 Esse erro retornado quando o servio do Listener no est online, ou est com outro tipo de configurao, exemplo: C:\>tnsping ranet
TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 15-JAN-2009 11:09:24
Copyright (c) 1997, 2007, Oracle. All rights reserved.
Arquivos de parmetros usados: D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
Usado o adaptador TNSNAMES para resolver o apelido Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (Host = 10.72.0.171) (Port = 1521))) (CONNECT_DATA = (SID = ranet)))
TNS-12541: TNS:no h listener Soluo Nos casos mais simples, para resolver esse problema basta ativar novamente o servio do Listener no banco de dados alvo. Para isso, utilize a ferramenta LSNRCTL (Listener Control) fornecida junto com o SQL*NET, atrves de linha de comando para habilitar novamente o servio, exemplo: C:\>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.4.0 - Production on 15-JAN-2009 11:13:41
Copyright (c) 1991, 2007, Oracle. All rights reserved.
Bem vindo ao LSNRCTL, digite "help" para obter informaes.
TNSLSNR for Windows: Version 10.2.0.4.0 - Production System parameter file is D:\oracle\product\10.2.0\db_1\network\admin\listener.ora Log messages written to D:\oracle\product\10.2.0\db_1\network\log\listener.log Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.72.0.171)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.72.0.171)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Windows: Version 10.2.0.4.0 - Production Start Date 15-JAN-2009 11:10:26 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File D:\oracle\product\10.2.0\db_1\network\admin\listener.ora Listener Log File D:\oracle\product\10.2.0\db_1\network\admin\listener.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.72.0.171)(PORT=1521))) Services Summary... Service "ranet" has 1 instance(s). Instance "ranet", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully Perceba que ao acessar o aplicativo LSNRCTL (Listener Control), emiti o comando start LISTENER, para iniciar o servio do Listener, por padro o nome do ouvinte LISTENER, ento eu poderia apenas deixar start que resolveria, porm, se coloquei outro nome ao LISTENER, basta iniciar com start <nome_do_listener>, e para saber se existe outro nome de Listener configurado no seu SQL*NET, basta verificar o seu arquivo listener.ora do servidor de banco de dados. Existem outros checks que devem ser feitos para evitar esse tipo de erro, so: Verificar o hostname e porta do arquivo listener.ora; Verificar o nome do Listener atual no LSNRCTL; ORA-12154 O mesmo que o erro TNS-12154, onde no h um Listener para conexo, porm, ele emitido dentro do banco de dados Oracle, por isso o motivo do ORA no incio, e esse erro quando se est utilizando um DBLINK para um determinado banco de dados e o ALIAS utilizado no DBLINK no corresponde ao banco de dados. Exemplo: SQL> select count(*) from NOTAS_FISCAIS@RANET_SP.WORLD; select count(*) from NOTAS_FISCAIS@RANET_SP.WORLD * ERRO na linha 1:
ORA-12154: TNS:could not resolve service name Soluo A soluo para esse tipo de problema igual ao do TNS-12154, porm necessita de mais detalhes, como: Verificar qual o alias que o DBLINK est utilizando para realizar a comunicao, fazendo o SELECT abaixo: SQL> select owner, db_link, username, host from dba_db_links;
1 linha selecionada A coluna HOST fornece o nome do alias que ser utilizado para realizar a comunicao com outro banco de dados. Esse alias o mesmo encontrado no arquivo tnsnames.ora, ento, para resolver o problema, basta no arquivo de tnsnames colocar um alias chamado RANET_RO para o hostname, porta e SID corretos, deste modo o DBLINK volta a funcionar. Existem outras coisas que devemos prestar ateno como mencionado nos erros TNS acima, como:. 1. Verificar se necessrio utilizar o .WORLD para o domnio global; 2. Verificar o NAMES.DIRECTORY_PATH e NAME.DEFAULT_DOMAIN do sqlnet.ora do servidor de banco de dados; 3. Executar os testes de PING e TNSPING. PRONTO! Com essa introduo aos erros de TNS e um pequeno overview dos principais arquivos do SQL*NET, j conseguimos realizar alguns testes simples e que podem nos ajudar e nosso dia-a-dia de trabalho. Lembrando que essa foi somente a primeira parte, ter a segunda parte com mais alguns tipos de erros TNS e suas respectivas solues. Abraos,
Artigos relacionados Utilizando o Google Maps no Oracle APEX OracleComente! Utilizando itens no Oracle APEX OracleComente! Utilizando collections para criao de formulrios tabulares no Oracle APEX Parte 03 OracleComente!
Rodrigo Almeida Rodrigo Almeida, DBA Oracle h mais de 10 anos um dos DBAs mais influentes do pais e mantm seu prprio Portal e Frum (www.rodrigoalmeida.net), eleito ORACLE ACE em 2009 pela Oracle Corporation, cursou Eng. da Computao pela UNISANTA, graduado em Analise de banco de dados e ps-graduando em BI pela Veris Faculdades, especialista em Micro-eletrnica pelo INSA em Toulouse/Frana. Possui certificaes OCP 9i/10g/11g, OCE SQL Expert, OCS 11g Implementations e Exadata e mais de 14 certificaes Oracle. vice-presidente do grupo de usurios Oracle do Brasil (GUOB), colunista Oracle do portal iMasters e colaborador tcnico para os principais portais e revistas Brasileiras e internacionais. participante dos Beta Program da Oracle Coporation para solues de banco de dados e instrutor oficial da Oracle University Brasil para os treinamentos de BD e Exadata e atualmente DBA Oracle e DMA Exadata na CDS e consultor tcnico da Oracle do Brasil focado no gerenciamento e implementao de Oracle Exadata, Exalogic e tecnologias de banco de dados e aplicaes Oracle. Tambm proprietrio da empresa UNIDBA Treinamento & Consultoria em TI (www.unidba.net). Pgina do autor Email Leia os ltimos artigos publicados por Rodrigo Almeida Introduo ao Oracle Berkeley DB XML Torne-se um OCA com 2 certificaes Criando uma VM Windows Server 2008 no Virtualbox Parte 2 Criando uma VM Windows Server 2008 no Virtualbox Parte 1 Instalao do Oracle Virtualbox 4. 0. 2. COMENTE TAMBM 6 COMENTRIOS
Avelino Ferreira Muito boa essa matria! Estava procurando alguma matria sobre SP e acabei encontrando essa sobre TNS! Ontem desistalei minha o Oracle em casa por causa de alguns erros que estava tendo! A maioria deles, depois de ler esse seu texto, era justamente sobre TNS. Muito obrigado pela matria!!!! H 5 anos Responder
Oclides Jnior Parabns Rodrigo por esta matria! estou comeando agora nesta rea e j consegui me orientar atrvs de suas informaes. Muito Obrigado. H 4 anos Responder
Prezado Rodrigo, tudo bem? Quanto ao trecho Arquivo de configurao para acesso aos bancos de dados Oracle, (configurado tanto no lado cliente ou servidor). eu discordo, porque a configurao do TNSNAMES.ORA necessria apenas por PARTE DE CLIENTE. Na verdade, a STRING de conexo descrita nesse arquivo vai indicar o endereo de rede onde reside o listener. uma espcie de DNS do Oracle. H 4 anos Responder
Giovanni Souza Bom dia, matria excelente esta, meu problema diferente dos descritos acima, irei explicar. Possuo um windows server 2008 r1, instalei o oracle 10g client para esta plataforma, configurei o tnsnames, at a td ok, s que quando vou mi conectar ao banco, o sqlplus ou outro aplicativo como o plsql ou toad travam, o servidor est pingando no oracle server, consigo dar telnet no ip e porta do banco, o tnsping retorna ok, porm a conexo trava quando tento mi conectar. Alguem j viu esse erro ?, estou com esse problema a 2 semanas, se algum puder mi ajudar agradecerei muito. Abrao H 3 anos Responder
Reiner Silva Rodrigo, estou com uma dvida. Foi feito uma troca de servidor de banco de dados de uma filial do meu trabalho. A requisio ao BD feita via dblink, porm est gerando um erro que os dois servidores x1 e x2 esto fazendo requisies para um dblink. O host foi alterado no tnsnames do servidor novo no caso x2. O que pode est acontecendo para gerar esse erro?. Obrigado. H 9 meses Responder
joel Me ajudou pra caramba. Muito Obrigado! H 5 meses Responder