¿Cómo puedo solucionar los errores de conexión comunes de mi instancia de Amazon RDS for Oracle?

Última actualización: 18/11/2021

No puedo establecer una conexión con la instancia de base de datos de Amazon Relational Database Service (Amazon RDS) for Oracle. Quiero solucionar el problema del mensaje de error que recibo.

Descripción corta

Antes de solucionar el error de conexión, haga lo siguiente:

  • Verifique el estado de la instancia de base de datos de Amazon RDS for Oracle. Si el estado de la instancia no es available (disponible), storage optimization (optimización de almacenamiento) o backing-up (creando copia de seguridad), no puede conectarse a la instancia.
  • Verifique que pueda conectarse a la instancia de base de datos a través del puerto de base de datos.
    Nota: De forma predeterminada, Oracle utiliza el puerto 1521.
telnet example-endpoint 1521

Si no puede establecer una conexión mediante telnet, solucione el problema según las instrucciones proporcionadas en ¿Cómo soluciono los problemas de conexión con la instancia de base de datos de Amazon RDS?

Resolución

Verifique que la cadena de conexión sea correcta.

Un descriptor de conexión típico se parece al siguiente:

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

Con Easy Connect, la cadena de conexión se parece a la siguiente:

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

Use las siguientes opciones de solución de problemas en función del mensaje de error que reciba:

ORA-01017: invalid username/password; logon denied (nombre de usuario/contraseña no válidos; conexión denegada)

Verifique las credenciales de usuario proporcionadas en la cadena de conexión. Asegúrese de que estas credenciales sean correctas.

ORA-12545: Connect failed because target host or object does not exist (error de conexión porque el objeto o el host de destino no existe)

Verifique que el nombre del host (punto de enlace de RDS) sea preciso mediante el comando NLSLOOKUP:

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 (TNS: se agotó el tiempo de espera de la conexión)

-o bien-

ERROR: Connection reset by peer (conexión restablecida por el par)

Los motivos más comunes de estos errores son los siguientes:

  • Hay problemas con la red, el establecimiento de la conexión o el firewall.
  • La comunicación con el cliente no se completó dentro del intervalo de tiempo asignado.
  • La base de datos está inactiva.
  • El parámetro sqlnet.ora no es válido.

Para solucionar estos errores, verifique la sintaxis de la cadena de conexión ejecutando el comando TNSPING en el lado del cliente:

$ tnsping example-connection-string

Si la sintaxis de la cadena de conexión es precisa, el resultado es similar al siguiente:

$ 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)

Si hay un error con la sintaxis, el resultado es similar al siguiente:

$ 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

También puede ejecutar el comando TRCROUTE para verificar la sintaxis de la cadena de conexión:

$ trcroute example-connection-string

Si la sintaxis de la cadena de conexión es precisa, el resultado es similar al siguiente:

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

Si hay un error con la sintaxis, el resultado es similar al siguiente:

$ 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 continuar solucionando estos errores, haga lo siguiente:

  • Asegúrese de que el grupo de seguridad de la instancia de base de datos de RDS permita el tráfico de entrada adecuado a la base de datos.
  • Si la aplicación se conecta desde una red en las instalaciones, asegúrese de que las reglas del firewall se actualicen para permitir las conexiones hacia y desde la instancia de RDS.
  • La conexión del controlador JDBC Thin no pasa por la capa Oracle Net. Por lo tanto, si utiliza el controlador Oracle JDBC Thin, use el equivalente del rastreo de cliente de SQL*Net con Oracle JDBC Thin Driver. Para obtener más información, consulte la documentación de Doc ID 793415.1.
  • Si utiliza el cliente JDBC Thick u OCI, active el rastreo de sqlnet en el lado del servidor. Para activar el seguimiento en el lado del servidor, modifique el grupo de parámetros personalizado adjunto a la instancia. En este caso, no es necesario reiniciar. Si utiliza el grupo de parámetros predeterminado, cree un grupo de parámetros personalizado, modifique los siguientes parámetros y, a continuación, modifique la instancia para usar el grupo de parámetros recién creado. En este caso, es necesario reiniciar.
    sqlnetora.trace_level_server=16
    sqlnetora.diag_adr_enabled=OFF
    Importante: Activar el rastreo del servidor puede tener algunas posibles consecuencias. Es posible que se generen rápidamente una gran cantidad de archivos de seguimiento. En casos excepcionales, es posible que sea necesario reiniciar el agente de escucha o incluso la base de datos para detener el rastreo después de que se haya completado la solución de problemas. El proceso también requiere un monitoreo estrecho. Por lo tanto, se recomienda activar el rastreo durante horas de trabajo de menos carga o en condiciones aisladas, cuando ningún otro usuario se conecte a la base de datos. Además, asegúrese de que el servidor tenga suficiente espacio en disco disponible. Los valores de los parámetros mencionados en este artículo son ejemplos. Puede modificar estos valores de acuerdo con su caso de uso. Para obtener más información, consulte Modificación de propiedades de conexión utilizando parámetros sqlnet.ora.
  • Active el rastreo de sqlnet en el lado del cliente. A continuación, reproduzca el error y capture los detalles en los archivos de rastreo. Cree una copia de seguridad del archivo sqlnet.ora y, a continuación, modifique los siguientes parámetros en el archivo:
    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 desactivar el rastreo, elimine los parámetros de rastreo del archivo sqlnet.ora. Incluso después de eliminar los parámetros de rastreo, el rastreo de las sesiones ya conectadas en el lado del servidor se detiene solo después de cerrar la sesión del cliente.
  • Si obtiene el error debido a una red lenta, configure los siguientes parámetros en el lado del cliente y del servidor. Esto permite más tiempo para establecer la conexión:
    Lado del cliente:
    SQLNET.INBOUND_CONNECT_TIMEOUT
    SQLNET.SEND_TIMEOUT
    SQLNET.RECV_TIMEOUT
    Lado del servidor:
    sqlnetora.sqlnet.inbound_connect_timeout
    sqlnetora.sqlnet.send_timeout
    sqlnetora.sqlnet.recv_timeout
    Por ejemplo, si usa el valor 600 para todos los parámetros, el tiempo de conexión se establece en 10 minutos.

ORA-12505: TNS:listener does not currently know of SID given in connect descriptor (TNS: el agente de escucha no conoce actualmente el SID proporcionado en el descriptor de conexión)

Asegúrese de que el SID proporcionado en la cadena de conexión coincida con el valor de DBNAME de la pestaña Configuration (Configuración) de la consola de Amazon RDS. De forma predeterminada, el SID y el DBNAME de una instancia de RDS for Oracle es ORCL.

ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA (TNS: el agente de escucha no recibió SERVICE_NAME en CONNECT_DATA)

Asegúrese de usar la expresión del SID o SERVICE_NAME en la sección CONNECT_DATA de la cadena de conexión. El valor de SERVICE_NAME proporcionado en la cadena de conexión es el mismo que el valor de DBNAME de la pestaña Configuration (Configuración) de la consola de Amazon RDS. De forma predeterminada, el valor de SERVICE_NAME de una instancia de RDS for Oracle es ORCL.

ORA-12538: TNS:no such protocol adapter (TNS: no existe el adaptador de protocolo)

Asegúrese de que la sección PROTOCOL del descriptor de conexión sea correcta. De forma predeterminada, el valor de PROTOCOL es TCP.

ORA-12560: TNS:protocol adaptor error (TNS: error del adaptador de protocolo)

Este error indica que está intentando conectarse a un SID incorrecto o a una base de datos que no se está ejecutando. Verifique el estado de la instancia de base de datos de RDS. Ejecute el comando tnsping para probar la sintaxis y la conectividad de la cadena de conexión:

$ tnsping example-connection-string

ORA-00018: maximum number of sessions exceeded (se superó el número máximo de sesiones)

Este error indica que hay demasiadas sesiones conectadas a la base de datos. Para resolver este error, haga lo siguiente:

1.    Si se conectó a la base de datos, ejecute la siguiente consulta para buscar el número de sesiones conectadas:

SELECT COUNT(*) TOTAL FROM v$session;

Ejecute la siguiente consulta para ver el uso actual, el uso máximo y los límites configurados para los parámetros sessions (sesiones) y processes (procesos) en la instancia de RDS:

SELECT RESOURCE_NAME, CURRENT_UTILIZATION, MAX_UTILIZATION, LIMIT_VALUE
FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME IN ( 'sessions', 'processes');

2.    Finalice las sesiones no deseadas para que las demás sesiones puedan conectarse a la base de datos.

Ejecute la siguiente consulta para ver el SID y el número de serie de las sesiones individuales que se van a terminar:

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';

Nota: Modifique la expresión WHERE de acuerdo con su caso de uso.

Ejecute el siguiente comando para finalizar las sesiones no deseadas en su instancia de RDS for Oracle:

begin
    rdsadmin.rdsadmin_util.disconnect(
        sid => example-sid,
        serial => example-serial_number);
end;

Para obtener más información, consulte Terminación de una sesión.

3.    Para aumentar el valor de los parámetros sessions (sesiones) y processes (procesos), edite el grupo de parámetros personalizado y modifique estos parámetros. El parámetro sessions (sesiones) no se define en el grupo de parámetros y utiliza los valores predeterminados para el motor.

El número predeterminado de sesiones en Oracle 19c se calcula de la siguiente manera:

Número de sesiones = (1,5 * número de procesos) + 22.

El valor predeterminado del parámetro processes (procesos) se define como LEAST({DBInstanceClassMemory/9868951}, 20000). El número de procesos se calcula como la memoria total (MB) en el host/10 o 20 000, lo que sea menor.

Para obtener más información sobre la modificación de un grupo de parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

Como estos parámetros son estáticos, debe reiniciar la instancia después de actualizarlos.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?