AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 110819
Accepted
Vlad Mihalcea
Vlad Mihalcea
Asked: 2015-08-13 09:03:19 +0800 CST2015-08-13 09:03:19 +0800 CST 2015-08-13 09:03:19 +0800 CST

O Oracle lança intermitentemente "ORA-12516, TNS: o ouvinte não pôde encontrar o manipulador disponível com a pilha de protocolo correspondente"

  • 772

Ao testar o mecanismo de estabelecimento de conexão do Oracle XE, me deparei com o seguinte problema. Embora as conexões sejam fechadas em cada iteração, após 50 a 100 conexões, o Oracle começa a lançar intermitentemente a seguinte exceção:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12516, TNS:listener could not find available handler with matching protocol stack
 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:489) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]
    at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:280) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]
    at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:207) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]
    at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:157) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]
    at com.vladmihalcea.book.high_performance_java_persistence.jdbc.connection.OracleConnectionCallTest.test(OracleConnectionCallTest.java:57) [test-classes/:na]

O teste pode ser encontrado no GitHub :

for (int i = 0; i < callCount; i++) {
    try {
        long startNanos = System.nanoTime();
        try (Connection connection = dataSource.getConnection()) {
        }
        timer.update(System.nanoTime() - startNanos, TimeUnit.NANOSECONDS);
        sleep(waitMillis);
    } catch (SQLException e) {
        LOGGER.info("Exception on iteration " + i, e);
    }
}

Se eu tentar abrir/fechar conexões com um passo de espera de 35 ms, tudo funciona bem. Se eu diminuir a espera para 10 ms a exceção começa a ser lançada de vez em quando.

Um possível motivo pode ser explicado por este artigo: http://www-01.ibm.com/support/docview.wss?uid=swg21603472

Um dos motivos mais comuns para os erros TNS-12516 e/ou TNS-12519 serem relatados é o número máximo configurado de limitação de PROCESSES e/ou SESSIONS sendo atingido. Quando isso ocorre, os manipuladores de serviço para o ouvinte TNS ficam "Bloqueados" e nenhuma nova conexão pode ser feita. Uma vez que o TNS Listener recebe uma atualização do processo PMON associado à instância do banco de dados informando ao TNS Listener que os limites estão abaixo do limite configurado e o banco de dados agora está aceitando retomadas de conectividade de conexões.

  • O PMON é responsável por atualizar o listener com informações sobre uma determinada instância, como informações de carga e despachante. A carga máxima para conexões dedicadas é determinada pelo parâmetro PROCESSES. A frequência com que o PMON fornece informações SERVICE_UPDATE varia de acordo com a carga de trabalho da instância. O intervalo máximo entre essas atualizações de serviço é de 10 minutos.
  • O ouvinte conta o número de conexões que estabeleceu com a instância, mas não obtém imediatamente informações sobre as conexões que foram encerradas. Somente quando o PMON atualiza o listener via SERVICE_UPDATE o listener é informado da carga atual. Como isso pode levar até 10 minutos, pode haver uma diferença entre o carregamento da instância atual de acordo com o ouvinte e o carregamento real da instância.

Quando o ouvinte acredita que o número atual de conexões atingiu a carga máxima, ele pode definir o estado do manipulador de serviço para uma instância como "bloqueado" e começar a recusar conexões de cliente de entrada com um dos seguintes erros: ora-12519 ou ora-1251 "

Eu queria saber se isso é algum tipo de bug ou é simplesmente como o Oracle foi projetado para funcionar.

Atualizar

No Oracle 11g Enterprise Edition, ele funciona bem, então é uma limitação do XE.

Fixar

Usar o pool de conexões é provavelmente a melhor maneira de corrigir esse problema, o que também reduz o tempo de aquisição da conexão e aumenta os picos de tráfego.

oracle connections
  • 1 1 respostas
  • 75790 Views

1 respostas

  • Voted
  1. Best Answer
    GuilhermeMesquitaX
    2015-08-13T09:17:35+08:002015-08-13T09:17:35+08:00

    Não é um bug. Esse comportamento é esperado. Se precisar aumentar as conexões, basta alterar o limite de processos:

    SQL> show parameter processes
    processes                            integer     150
    
    SQL> alter system set processes = <integer> scope=[...];
    SQL> shutdown immediate;
    SQL> startup;
    

    -- Usando pfile ou spfile, você precisará devolver o db, porque o parâmetro de processos é estático.

    E para completar, vale dizer que quando em um ambiente de produção e você precisa aumentar o limite de processos, você também pode precisar aumentar parâmetros correlacionados, como transações e sessões (derivadas de processos). Você pode consultar v$resource_limit para determinar os limites e valores atuais em uso:

    SQL> select * from v$resource_limit where resource_name in ('processes', 'sessions', 'transactions');
    
    • 8

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve