Como soluciono erros de conexão comuns em minha instância do Amazon RDS para Oracle?
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:
-
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'); -
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; -
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?
- Tópicos
- Database
- Idioma
- Português
Vídeos relacionados


This article was reviewed and updated on 2024-03-07.
Conteúdo relevante
- Resposta aceita
feita há 9 meses
feita há um ano