Skip to content

Como soluciono erros comuns de conexão em minha instância do Amazon RDS para Oracle?

9 minuto de leitura
0

Não consigo me conectar à minha instância do Amazon Relational Database Service (Amazon RDS) para Oracle.

Breve descrição

Antes de solucionar o erro de conexão, faça o seguinte:

  • Verifique o estado da sua instância de banco de dados Amazon RDS para Oracle. Se a instância estiver em qualquer estado diferente de disponível, otimização de armazenamento ou backup, você não poderá se conectar à instância.
  • Verifique se é possível se conectar à instância do banco de dados pela porta do banco de dados. Por padrão, o Oracle usa a porta 1521.
telnet example-endpoint 1521

Se você não conseguir estabelecer uma conexão usando telnet, solucione o problema com base nas instruções fornecidas em Como resolvo problemas de conexão com a minha instância de banco de dados do Amazon RDS?

Resolução

Verifique sua conexão

Verifique se a string de conexão está correta. Um descritor de conexão típico é semelhante ao seguinte:

sqlplus admin/xxxx@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myexampledb.xxxx.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))

Com o Easy Connect, a string de conexão é semelhante à seguinte:

sqlplus 'admin@myexampledb.xxxx.us-east-1.rds.amazonaws.com:1521/ORCL'

Use as seguintes opções de solução de problemas com base na mensagem de erro recebida:

ORA-01017: invalid username/password; logon denied

Verifique as credenciais do usuário fornecidas na string de conexão. Certifique-se de que essas credenciais estejam corretas.

ORA-12545: Connect failed because target host or object does not exist

Use o comando NLSLOOKUP a seguir para verificar se o nome do host (endpoint do RDS) está correto:

nslookup example-database.xxxx.us-east-1.rds.amazonaws.com
Server: xx.xx.xx.xx
Address: xx.xx.xx.xx#53

ORA-12170: TNS:Connect timeout occurred

-ou-

ERROR: Connection reset by peer

Os motivos mais comuns para esses erros incluem o seguinte:

  • Há problemas com a rede, o estabelecimento da conexão ou o firewall.
  • A comunicação com o cliente não foi concluída dentro do intervalo de tempo estipulado.
  • O banco de dados está inativo.
  • O parâmetro sqlnet.ora é inválido.

Execute o comando TNSPING no lado do cliente para verificar a sintaxe da string de conexão:

tnsping example-connection-string

Se a sintaxe da string de conexão for precisa, a saída será semelhante à seguinte:

$ cat $ORACLE_HOME/network/admin/tnsnames.ora
Output :
ORCL=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= example-database.xxxx.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))
$ tnsping ORCL
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:16:04
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=example-database.xxxx.us-east-1.rds.amazonaws.com)(PORT=1521))
CONNECT_DATA=(SERVICE_NAME=ORCL)))
OK (20 msec)

Se houver um erro com a sintaxe, a saída será semelhante à seguinte:

tnsping ORCL
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:23:47
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
TNS-03505: Failed to resolve name

Você também pode executar o comando TRCROUTE para verificar a sintaxe da string de conexão:

trcroute example-connection-string

Se a sintaxe da string de conexão for precisa, a saída será semelhante à seguinte:

Trace Route Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:16:25
Copyright (c) 1995, 2014, Oracle. All rights reserved.
Route of TrcRoute:
------------------
Node: Client            Time and address of entry into node:
-------------------------------------------------------------
16-NOV-2021 09:16:25 ADDRESS= PROTOCOL=TCP  HOST=example-database.xxxx.us-east-1.rds.amazonaws.com  PORT=1521
Node: Server            Time and address of entry into node:
-------------------------------------------------------------
16-NOV-2021 14:16:25 ADDRESS= PROTOCOL=TCP  HOST=example-database.xxxx.us-east-1.rds.amazonaws.com PORT=1521

Se houver um erro com a sintaxe, a saída será semelhante à seguinte:

trcroute ORCL
Trace Route Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:25:06
Copyright (c) 1995, 2014, Oracle.  All rights reserved.
TNS-03505: Failed to resolve name

Para solucionar esses erros mais aprofundadamente, faça o seguinte:

  • Confirme se o grupo de segurança da sua instância de banco de dados RDS permite o tráfego de entrada apropriado para seu banco de dados.

  • Se o aplicativo se conectar a partir de uma rede local, confirme se as regras de firewall permitem conexões de e para a instância.

  • A conexão do driver JDBC Thin não passa pela camada Oracle Net. Portanto, se você usar o driver Oracle JDBC Thin, execute o equivalente ao SQL*Net Client Tracing com o Oracle JDBC Thin Driver. Para obter mais informações, consulte How to perform the equivalent of SQL*Net client tracing with Oracle JDBC thin driver releases prior to 11.2 (Doc ID 793415.1) no site da Oracle.

  • Se você usa o cliente JDBC Thick ou OCI, ative o rastreamento sqlnet no lado do servidor. Para ativar o rastreamento no lado do servidor, modifique o grupo de parâmetros personalizados anexado à instância. Nesse caso, não é necessário reinicializar. Se você usar o grupo de parâmetros padrão, crie um grupo de parâmetros personalizado e modifique os parâmetros a seguir. Em seguida, modifique a instância para usar o grupo de parâmetros recém-criado. Nesse caso, é necessária uma reinicialização.

    sqlnetora.trace_level_server=16

    sqlnetora.diag_adr_enabled=ON

    Importante: Quando você ativa o rastreamento no nível do servidor, um grande número de arquivos de rastreamento pode ser gerado rapidamente. Em casos raros, talvez seja necessário reiniciar o ouvinte ou até mesmo o banco de dados para interromper o rastreamento após a conclusão da solução de problemas. O processo também exige um monitoramento rigoroso. É uma prática recomendada ativar o rastreamento fora do horário comercial ou em condições isoladas, quando nenhum outro usuário está se conectando ao banco de dados. Além disso, certifique-se de que o servidor tenha espaço em disco suficiente disponível. Os valores dos parâmetros mencionados neste artigo são exemplos. É possível modificar esses valores de acordo com seu caso de uso. Para obter mais informações, consulte Conectar-se a uma instância de banco de dados do RDS para Oracle.

  • Ative o rastreamento sqlnet no lado do cliente. Em seguida, reproduza o erro e capture os detalhes nos arquivos de rastreamento. Crie um backup do arquivo sqlnet.ora e modifique os seguintes parâmetros no arquivo:

    TRACE_LEVEL_CLIENT = 16

    TRACE_FILE_CLIENT = client.trc

    TRACE_DIRECTORY_CLIENT = /var/log/sqlnet

    TRACE_TIMESTAMP_CLIENT = ON

    TRACE_UNIQUE_CLIENT = ON

    DIAG_ADR_ENABLED= OFF

    Para desativar o rastreamento, remova os parâmetros de rastreamento do arquivo sqlnet.ora. O rastreamento das sessões já conectadas no lado do servidor é interrompido somente após o encerramento da sessão do cliente.

  • Se você receber o erro devido a uma rede lenta, configure os seguintes parâmetros no lado do cliente e no lado do servidor. Isso permite mais tempo para estabelecer a conexão:

    Lado do cliente:

    SQLNET.INBOUND_CONNECT_TIMEOUT

    SQLNET.SEND_TIMEOUT

    SQLNET.RECV_TIMEOUT

    Lado do servidor:

    sqlnetora.sqlnet.inbound_connect_timeout

    sqlnetora.sqlnet.send_timeout

    sqlnetora.sqlnet.recv_timeout

    Por exemplo, se você usar o valor 600 para todos os parâmetros, o tempo de conexão será definido como 10 minutos.

ORA-12505: TNS:listener does not currently know of SID given in connect descriptor

Confirme se o SID fornecido na string de conexão corresponde ao valor de DBNAME que está na guia Configuração no console do Amazon RDS. Por padrão, o SID e o DBNAME de uma instância do RDS for Oracle são ORCL.

ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

Certifique-se de usar a cláusula SID ou SERVICE_NAME na seção CONNECT_DATA na cadeia de conexão. O valor de SERVICE_NAME fornecido na string de conexão é o mesmo que o valor de DBNAME que está na guia Configuração no console do Amazon RDS. Por padrão, o valor SERVICE\ _NAME para uma instância do RDS for Oracle é ORCL.

ORA-12538: TNS:no such protocol adapter

Certifique-se de que a seção PROTOCOL do seu descritor de conexão esteja correta. Por padrão, o valor de PROTOCOL é TCP.

ORA-12560: TNS:protocol adaptor error

Esse erro indica uma conexão com o SID errado ou um banco de dados que não está ativo. Verifique o status da instância de banco de dados do RDS. Execute o comando tnsping para testar a sintaxe e a conectividade da cadeia de conexão:

tnsping example-connection-string

ORA-00018: maximum number of sessions exceeded

Esse erro indica que muitas sessões estão conectadas ao banco de dados. Para solucionar esse erro, faça o seguinte:

  1. Se você estiver conectado ao banco de dados, execute a seguinte consulta para encontrar o número de sessões conectadas:

    SELECT COUNT(*) TOTAL FROM v$session;

    Execute a consulta a seguir para visualizar a utilização atual, a utilização máxima e os limites configurados para os parâmetros de sessões e processos na instância do RDS:

    SELECT RESOURCE_NAME, CURRENT_UTILIZATION, MAX_UTILIZATION, LIMIT_VALUE
    FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME IN ( 'sessions', 'processes');
  2. Encerre as sessões indesejadas para que as outras sessões possam se conectar ao banco de dados.

    Execute a consulta a seguir para visualizar o SID e o número de série das sessões individuais a serem interrompidas:

    col username format a15
    col osuser format a15
    col program format a40
    col machine format a40
    SELECT s.osuser,
    s.sid,
    s.serial#,
    p.spid "RDS OS PID",
    s.program,
    s.machine,
    s.process "CLIENT OS PID",
    s.STATUS,
    s.SQL_ID,
    s.CURRENT_QUEUE_DURATION
    FROM v$session s, v$process p
    WHERE s.paddr = p.addr AND s.machine LIKE '%<client machine>%'
    AND s.STATUS='ACTIVE';

    Observação: modifique a cláusula WHERE de acordo com seu caso de uso.

    Execute o comando a seguir para encerrar sessões indesejadas em sua instância do RDS for Oracle:

    begin
        rdsadmin.rdsadmin_util.disconnect(
            sid => example-sid,
            serial => example-serial_number);
    end;
  3. Para aumentar o valor dos parâmetros de sessões e processos, edite o grupo de parâmetros personalizados e modifique os parâmetros. O parâmetro sessions não está definido no grupo de parâmetros e usa os valores padrão para o mecanismo.

    O número padrão de sessões no Oracle 19c é calculado da seguinte forma:

    Número de sessões = (1,5 * número de processos) + 22.

    O valor padrão para o parâmetro processes é definido como LEAST({DBInstanceClassMemory/9868951}, 20000). O número de processos é calculado como a memória total (MB) no host /10 ou 20.000, o que for menor.

    Para obter mais informações sobre como modificar um grupo de parâmetros, consulte Grupos de parâmetros para o Amazon RDS.

    Como esses parâmetros são estáticos, você deve reinicializar sua instância depois de atualizá-los.

Informações relacionadas

Por que não consigo me conectar à minha instância de banco de dados Amazon RDS para Oracle?