¿Cómo soluciono los errores de conexión habituales de mi instancia de Amazon RDS para Oracle?

9 minutos de lectura
0

No puedo conectarme a mi instancia de base de datos de Amazon Relational Database Service (Amazon RDS).

Descripción breve

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

  • Compruebe el estado de su instancia de base de datos de Amazon RDS para Oracle. Si la instancia se encuentra en un estado que no sea available, storage optimization o backing-up, no podrá conectarse a la instancia.
  • Compruebe que puede conectarse a la instancia de la base de datos a través del puerto de la base de datos. De forma predeterminada, Oracle usa el puerto 1521.
telnet example-endpoint 1521

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

Resolución

Comprobación de la conexión

Compruebe que la cadena de conexión sea correcta. Un descriptor de conexión típico tiene un aspecto similar 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 es similar a la siguiente:

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

Utilice las siguientes opciones de solución de problemas según el mensaje de error que se muestre:

ORA-01017: invalid username/password; logon denied

Compruebe 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

Utilice el siguiente comando NLSLOOKUP para comprobar que el nombre de host (punto final de RDS) sea correcto:

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

-o-

ERROR: Connection reset by peer

Los motivos más habituales 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 no funciona.
  • El parámetro sqlnet.ora no es válido.

Ejecute el comando TNSPING en el lado del cliente para verificar la sintaxis de la cadena de conexión:

tnsping example-connection-string

Si la sintaxis de la cadena de conexión es correcta, el resultado será 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 será 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 comprobar la sintaxis de la cadena de conexión:

trcroute example-connection-string

Si la sintaxis de la cadena de conexión es correcta, el resultado será 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 será 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 seguir solucionando estos errores, haga lo siguiente:

  • Confirme que el grupo de seguridad de la instancia de base de datos de RDS permita el tráfico entrante adecuado a la base de datos.

  • Si la aplicación se conecta desde una red local, confirme que las reglas del firewall permiten las conexiones hacia la instancia y desde esta.

  • La conexión del controlador JDBC Thin no pasa por la capa Oracle Net. Por lo tanto, si utiliza el controlador Oracle JDBC Thin, lleve a cabo lo equivalente a SQL*Net Client Tracing con el controlador Oracle JDBC Thin. Para obtener más información, 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) en el sitio web de Oracle.

  • Si usa el cliente JDBC Thick u OCI, active el rastreo de sqlnet en el lado del servidor. Para activar el rastreo en el servidor, modifique el grupo de parámetros personalizados adjunto a la instancia. En este caso, no es necesario reiniciar. Si usa el grupo de parámetros predeterminado, cree un grupo de parámetros personalizado y modifique los siguientes parámetros. 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=ON

    Importante: Al activar el seguimiento a nivel de servidor, se puede generar rápidamente una gran cantidad de archivos de seguimiento. En raras ocasiones, es posible que sea necesario reiniciar el agente de escucha o incluso la base de datos para detener el seguimiento una vez finalizada la solución de problemas. El proceso también requiere una estrecha supervisión. Se recomienda activar el rastreo durante las horas no pico de trabajo o en condiciones aisladas cuando ningún otro usuario se conecte a la base de datos. Además, asegúrese de que el servidor disponga de suficiente espacio en disco. Los valores de los parámetros mencionados en este artículo son ejemplos. Puede modificar estos valores según su caso de uso. Para obtener más información, consulte Conexión a la instancia de base de datos de RDS para Oracle.

  • Active el rastreo de sqlnet en el lado del cliente. A continuación, reproduzca el error y capture los detalles de los archivos de rastreo. Cree una copia de seguridad del archivo sqlnet.ora y, a continuación, modifique los siguientes parámetros del 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. El seguimiento de las sesiones ya conectadas en el servidor no se detiene hasta que no se cierre la sesión del cliente.

  • Si se muestra el error debido a una red lenta, configure los siguientes parámetros en los lados del cliente y del servidor. Esto permite disponer de 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

Confirme que el SID proporcionado en la cadena de conexión coincida con el valor de DBNAME que se encuentra en la pestaña Configuración de la consola de Amazon RDS. De forma predeterminada, el SID y el DBNAME de una instancia de RDS para Oracle es ORCL.

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

Asegúrese de usar la cláusula 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 que se encuentra en la pestaña Configuración de la consola de Amazon RDS. De forma predeterminada, el valor SERVICE_NAME de una instancia de RDS para Oracle es ORCL.

ORA-12538: TNS:no such protocol adapter

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

ORA-12560: TNS:protocol adaptor error

Este error indica una conexión al SID incorrecto o a una base de datos que no está activa. Compruebe 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

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

  1. Si se ha conectado a la base de datos, ejecute la siguiente consulta para encontrar el número de sesiones conectadas:

    SELECT COUNT(*) TOTAL FROM v$session;

    Ejecute la siguiente consulta para ver la utilización actual, la utilización máxima y los límites configurados para los parámetros de sesiones y 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 detener:

    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 cláusula WHERE según su caso de uso.

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

    begin
        rdsadmin.rdsadmin_util.disconnect(
            sid => example-sid,
            serial => example-serial_number);
    end;
  3. Para aumentar el valor de los parámetros de las sesiones y procesos, edite el grupo de parámetros personalizado y modifique los parámetros. El parámetro sessions no está definido en el grupo de parámetros y usa los valores predeterminados del 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 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 Grupos de parámetros para Amazon RDS.

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

Información relacionada

¿Por qué no puedo conectarme a mi instancia de base de datos de Amazon RDS para Oracle?