Ir para o conteúdo

Como soluciono erros de conexão comuns 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 do Amazon RDS para Oracle. Se a instância estiver em qualquer estado diferente de available, storage optimization ou backing-up, não será possível 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 não for possível estabelecer uma conexão usando telnet, solucione o problema com base nas instruções fornecidas em Como soluciono problemas ao me conectar à minha instância de banco de dados do Amazon RDS?

Resolução

Verifique sua conexão

Verifique se sua 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 opções de solução de problemas a seguir com base na mensagem de erro recebida:

ORA-01017: invalid username/password; logon denied

Verifique as credenciais de 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 estiver correta, 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

Também é possível 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 estiver correta, 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 do RDS permite o tráfego de entrada apropriado para seu banco de dados.

  • Se a aplicação se conectar a partir de uma rede on-premises, 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 rastreamento do cliente SQL*Net com o driver Oracle JDBC Thin. 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) (Como executar o equivalente ao rastreamento do cliente SQL*Net nas versões do driver Oracle JDBC Thin anteriores à 11.2 (ID do Doc 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 receptor 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 estiver 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 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 em 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 Aurora e do RDS. Por padrão, o SID e o DBNAME de uma instância do RDS para 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 string 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 Aurora e do RDS. Por padrão, o valor de SERVICE_NAME em uma instância do RDS para Oracle é ORCL.

ORA-12538: TNS:no such protocol adapter

Certifique-se de que a seção PROTOCOL do seu descritor de conexão está 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 para Oracle:

    begin
        rdsadmin.rdsadmin_util.disconnect(
            sid => example-sid,
            serial => example-serial_number);
    end;
  3. Para aumentar o valor dos parâmetros sessions e processes, 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 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?