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....