Tudo jóia ? Então, a msg de erro (TNS:Connect timeout occurred) é bem clara : o 
listener não conseguiu criar uma conexão no intervalo de timeout 
especificado... As causas porém podem ser AS MAIS DIVERSAS : pode ser 
capacidade do hardware se esgotando, pode ser que a procedure tente consumir 
muitos recursos (abrindo muitas parallel slaves, fazendo bulk collect em grande 
volume, etc), pode ser config de rede inapropriada.....
 Não tem jeito : seja quem for que criou o banco isso TEM QUE ser debugado, vc 
DIFICILMENTE vai conseguir dizer seja o que for sem isso... Pra isso vc (ou o 
DBA desse banco, que seja) VAI TER QUE :
 
 a) testar a chamada da procedure diretamente por uma tool cliente (sqlplus, 
SQL DEVELOPER, não importa) : SE não der erro tá meio provado que é algo na 
aplicação, provavelmente drivers/middleware...
 
 b) DEBUGAR a procedure, seja via debugger do Oracle SQL DEVELOPER seja 
instrumentando-a com UTL_FILE, DBMS_OUTPUT e/ou SET_CLIENT_INFO para descobrir 
exatamente QUAL LINHA / QUAL COMANDO / QUAL CÓDIGO da procedure ocasiona o erro 
.... Idealmente, vc faria um BREAKPOINT na linha/instrução imediatamente antes 
de dar o erro e nesse instante consultaria o consumo de recursos do hardware 
(como RAM, capacidade de cpu, número de processos permitidos, file handle 
abertos, etc) e do banco (como número de sessões, número de dblinks, etc), E 
também analisaria a possibilidade de diminuir os recursos usados pelo PL/SQL 
nesse ponto (como menos variáveis pra baixar PGA, diminuir o LIMIT / número de 
linhas em array processing, etc...
 
 c) fazer um TRACE (de banco E de rede) na sessão executando a procedure, bem 
como um trace de rede no servidor Oracle 
 
 d) aumentar o nível de LOG do Listener
 
 ===>> Essas ações TODAS é que vão te dar subsídio pra analisar e descobrir 
qual recurso está se esgotando : se for um recurso sendo esgotado vc tem que 
baixar o nível de uso, não tem jeito, MAS se a limitação for aplicada por 
software (por exemplo, o tempo de timeout de rede no banco, o máximo de 
processos ou de memória que o SO permite, etc) vc pode aumentar esses limites 
no software : veja no metalink a nota 'Connecting Using: sqlplus "/ as sysdba" 
Fails with ORA-12547 with Lower Ulimit Setting' (Doc ID 878375.1) pra um caso 
de recurso do SO gerenciado via ulimits, as notas 'ORA-12518 / TNS-12518 
Troubleshooting' (Doc ID 556428.1) e '11g and Newer: ORA-609 TNS-12537 and 
TNS-12547 or TNS-12170 in DB Alert.log' (Doc ID 1116960.1) pra exemplos onde o 
ajuste necessário era no timeout de rede dentro do listener via 
SQLNET.INBOUND_CONNECT_TIMEOUT
 
 
 []s
 
   Chiappa
   
 OBS :

 1. evidentemente se vc usa RAC há ** boas chances ** da camada do GRID estar 
envolvida, veja  
http://oracleprof.blogspot.com/2009/12/oracle-rac-one-node-part-2.html para um 
exemplo desses
 
 2. em alguns casos pode ser necessário tuning nos controles de rede, veja a 
nota 'Oracle Net Performance Tuning' (Doc ID 67983.1) para um overview do que 
se pode fazer nesse sentido : OBSERVO que na maioria dos casos os defaults de 
performance são razoáveis, é RARO vc precisar os alterar... Muito provavelmente 
os itens anteriores é que vão te dar Retorno maior/melhor....

Responder a