Comment puis-je résoudre les problèmes de connexion courants à mon instance Amazon RDS for Oracle ?

Date de la dernière mise à jour : 18/11/2021

Je ne parviens pas à me connecter à mon instance Amazon Relational Database Service (Amazon RDS) for Oracle. Je souhaite résoudre le problème lié au message d'erreur que je reçois.

Brève description

Avant de résoudre le problème de connexion, procédez comme suit :

  • Vérifiez l'état de votre instance de bases de données Amazon RDS for Oracle. Vous ne pouvez pas vous connecter à l'instance si l'instance se trouve dans un état autre que l'état disponible, l'optimisation du stockage ou la sauvegarde.
  • Vérifiez que vous pouvez vous connecter à l'instance de base de données sur le port de base de données.
    Remarque : par défaut, Oracle utilise le port 1521.
telnet example-endpoint 1521

Si vous ne parvenez pas à établir une connexion à l'aide de telnet, résolvez le problème en vous basant sur les instructions fournies dans Comment résoudre les problèmes de connexion à mon instance de bases de données Amazon RDS ?

Résolution

Vérifiez l'exactitude de votre chaîne de connexion.

Un descripteur de connexion typique ressemble à ce qui suit :

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

Avec Easy Connect, la chaîne de connexion ressemble à ce qui suit :

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

Utilisez les options de dépannage suivantes en fonction du message d'erreur qui s'affiche :

ORA-01017 : nom d'utilisateur/mot de passe invalide ; connexion refusée

Vérifiez les informations d'identification de l'utilisateur fournies dans la chaîne de connexion. Vérifiez l'exactitude de ces informations d'identification.

ORA-12545 : connexion impossible en raison de l'absence de l'hôte ou de l'objet cible

Vérifiez l'exactitude du nom d'hôte (point de terminaison RDS) à l'aide de la commande 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 : expiration du délai de connexion

-ou-

ERREUR : réinitialisation de la connexion par le pair

Les raisons les plus fréquentes de ces erreurs sont les suivantes :

  • Des problèmes se posent au niveau du réseau, de la connexion ou du pare-feu.
  • La communication avec le client n'a pas abouti dans l'intervalle de temps imparti.
  • La base de données est en panne.
  • Le paramètre sqlnet.ora est invalide.

Pour résoudre ces problèmes, vérifiez la syntaxe de la chaîne de connexion en exécutant la commande TNSPING côté client :

$ tnsping example-connection-string

Si la syntaxe de la chaîne de connexion est exacte, la sortie ressemble à ce qui suit :

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

S'il y a une erreur de syntaxe, la sortie ressemble à ce qui suit :

$ 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

Vous pouvez également exécuter la commande TRCROUTE pour vérifier la syntaxe de la chaîne de connexion :

$ trcroute example-connection-string

Si la syntaxe de la chaîne de connexion est exacte, la sortie ressemble à ce qui suit :

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

S'il y a une erreur de syntaxe, la sortie ressemble à ce qui suit :

$ 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

Pour continuer à résoudre ces problèmes, procédez comme suit :

  • Assurez-vous que le groupe de sécurité de votre instance de base de données RDS autorise le trafic entrant approprié vers votre base de données.
  • Si l'application se connecte à partir d'un réseau sur site, assurez-vous que les règles de pare-feu sont mises à jour pour autoriser les connexions à l'instance RDS ou à partir de celle-ci.
  • La connexion au pilote JDBC Thin ne passe pas par la couche Oracle Net. Par conséquent, si vous utilisez le pilote Oracle JDBC Thin, exécutez l'équivalent du suivi du client SQL*Net avec le pilote léger Oracle JDBC. Pour plus d'informations, consultez la documentation Oracle relative à Doc ID 793415.1.
  • Si vous utilisez le client JDBC Thick ou OCI, activez le suivi sqlnet côté serveur. Pour activer le suivi côté serveur, modifiez le groupe de paramètres personnalisés attaché à l'instance. Dans ce cas, un redémarrage n'est pas nécessaire. Si vous utilisez le groupe de paramètres par défaut, créez-en un qui soit personnalisé, modifiez les paramètres suivants, puis modifiez l'instance pour utiliser le nouveau groupe de paramètres. Dans ce cas, un redémarrage est nécessaire.
    sqlnetora.trace_level_server=16
    sqlnetora.diag_adr_enabled = DÉSACTIVÉ
    Important : l'activation du suivi au niveau du serveur peut entraîner quelques conséquences. Plusieurs fichiers de suivi peuvent être générés rapidement. Il est rare qu'il faille redémarrer le récepteur ou même la base de données pour arrêter le traçage une fois le dépannage terminé. Le processus nécessite également une surveillance stricte. Par conséquent, une bonne pratique consiste à activer le traçage en dehors des heures de pointe ou dans des conditions isolées, lorsqu'aucun autre utilisateur ne se connecte à la base de données. Assurez-vous également que le serveur dispose de suffisamment d'espace sur le disque. Parmi les exemples figurent les valeurs des paramètres mentionnés dans cet article. Vous pouvez modifier ces valeurs en fonction de votre cas d'utilisation. Pour en savoir plus, consultez la section Modification des propriétés de connexion à l'aide des paramètres sqlnet.ora.
  • Activez le suivi sqlnet côté client. Copiez ensuite le message d'erreur et saisissez les détails dans les fichiers de suivi. Créez une sauvegarde du fichier sqlnet.ora, puis modifiez les paramètres suivants dans le fichier :
    TRACE_LEVEL_CLIENT = 16
    TRACE_FILE_CLIENT = client.trc
    TRACE_DIRECTORY_CLIENT = /var/log/sqlnet
    TRACE_TIMESTAMP_CLIENT = ACTIVÉ
    TRACE_UNIQUE_CLIENT = SUR
    DIAG_ADR_ENABLED= DÉSACTIVÉ
    Pour désactiver le suivi, supprimez les paramètres de suivi du fichier sqlnet.ora. Même après la suppression des paramètres de suivi, le suivi des séances déjà connectées côté serveur est arrêté uniquement après la fermeture de la session client.
  • Si le message d'erreur s'affiche en raison de la lenteur du réseau, configurez les paramètres côté client et côté serveur suivants. Vous disposerez ainsi de plus de temps pour établir la connexion :
    Côté client :
    SQLNET.INBOUND_CONNECT_TIMEOUT
    SQLNET.SEND_TIMEOUT
    SQLNET.RECV_TIMEOUT
    Côté serveur :
    sqlnetora.sqlnet.inbound_connect_timeout
    sqlnetora.sqlnet.send_timeout
    sqlnetora.sqlnet.recv_timeout
    Par exemple, si vous utilisez la valeur 600 pour tous les paramètres, le temps de connexion est de 10 minutes.

ORA-12505 : TNS:listener ne reconnaît pas le SID donné dans le descripteur de connexion

Assurez-vous que le SID fourni dans la chaîne de connexion correspond à la valeur de DBNAME qui se trouve sous l'onglet Configuration de la console Amazon RDS. Par défaut, le SID et le DBNAME d'une instance RDS pour Oracle sont ORCL.

ORA-12504 : TNS : l'écouteur n'a pas reçu le SERVICE_NAME dans CONNECT_DATA

Veillez à utiliser la clause SID ou SERVICE_NAME dans la section CONNECT_DATA de la chaîne de connexion. La valeur de SERVICE_NAME fournie dans la chaîne de connexion est identique à la valeur de DBNAME qui se trouve sous l'onglet Configuration de la console Amazon RDS. Par défaut, la valeur SERVICE_NAME d'une instance RDS for Oracle est ORCL.

ORA-12538 : TNS : aucun adaptateur de protocole de ce type

Assurez-vous que la section PROTOCOLE de votre descripteur de connexion est exacte. Par défaut, la valeur de PROTOCOL est TCP.

ORA-12560 : TNT : erreur de l'adaptateur de protocole

Ce message d'erreur indique que vous essayez de vous connecter au mauvais SID ou à une base de données qui n'est pas en cours d'exécution. Vérifiez l'état de l'instance de base de données RDS. Exécutez la commande tnsping pour tester la syntaxe et la connectivité de la chaîne de connexion :

$ tnsping example-connection-string

ORA-00018 : nombre maximal de séances dépassé

Ce message d'erreur indique qu'un trop grand nombre de séances sont connectées à la base de données. Pour résoudre cette erreur, procédez comme suit :

1.    Si vous êtes connecté à la base de données, exécutez la requête suivante pour trouver le nombre de séances connectées :

SELECT COUNT(*) TOTAL FROM v$session;

Exécutez la requête suivante pour afficher l'utilisation actuelle, l'utilisation maximale et les limites configurées pour les paramètres de séances et de processus dans l'instance RDS :

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

2.    Terminez les séances indésirables afin que les autres puissent se connecter à la base de données.

Exécutez la requête suivante pour afficher le SID et le numéro de série des séances individuelles à résilier :

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

Remarque : modifiez la clause WHERE en fonction de votre cas d'utilisation.

Exécutez la commande suivante pour mettre fin aux séances indésirables dans votre instance RDS for Oracle :

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

Pour plus d'informations, consultez la section Arrêter une séance.

3.    Pour augmenter la valeur des paramètres des séances et des processus, modifiez le groupe de paramètres personnalisés et modifiez ces paramètres. Le paramètre séances n'est pas défini dans le groupe de paramètres et utilise les valeurs par défaut du moteur.

Le nombre de séances par défaut dans Oracle 19c est calculé comme suit :

Nombre de séances = (1,5 * nombre de processus) + 22.

La valeur par défaut du paramètre de processus est définie comme LEAST({DBInstanceClassMemory/9868951}, 20000). Le nombre de processus est calculé à partir de la mémoire totale (Mo) dans l'hôte/10 ou 20 000, selon la valeur la plus faible.

Pour en savoir plus sur la modification d'un groupe de paramètres, consultez la section Modification de paramètres dans un groupe de paramètres de base de données.

Étant donné que ces paramètres sont permanents, vous devez redémarrer votre instance après les avoir mis à jour.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?