Como soluciono erros comuns de conexão 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 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:
-
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 for Oracle:
begin rdsadmin.rdsadmin_util.disconnect( sid => example-sid, serial => example-serial_number); end;
-
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?
- Idioma
- Português

Conteúdo relevante
- feita há um mês
- feita há 3 meses
- feita há 3 meses