Que dois-je faire en cas d'erreur ORA-00018 ou ORA-00020 sur une instance de base de données Oracle Amazon RDS ?

Date de la dernière mise à jour : 04/02/2020

Lorsque je tente de me connecter en tant qu'utilisateur principal ou utilisateur DBA sur une instance de base de données Oracle Amazon Relational Database Service (Amazon RDS), l'un des messages d'erreur suivants s'affichent :

  • Nombre maximal de séances ORA-00018 dépassé
  • Nombre maximal de processus ORA-00020 dépassé

Comment puis-je résoudre ce problème ?

Brève description

Ces erreurs peuvent être provoquées par un exercice de mise à l'échelle planifié ou par un événement non planifié qui entraîne un nombre important de connexions à la base de données. Dans ces situations, de nombreuses sessions clientes sont lancées sur une instance de base de données et l'une des limites suivantes est atteinte :

  • PROCESSES : nombre maximal de processus utilisateur autorisés.
  • SESSIONS : nombre maximal de sessions utilisateur autorisées.

Si le nombre maximal de connexions est atteint en raison d'une tâche de dimensionnement planifiée, il peut être nécessaire d'augmenter la valeur associée au paramètre SESSIONS ou PROCESSES, voire les deux. Ces deux paramètres n'étant pas dynamiques, vous devez modifier les paramètres, puisredémarrer l'instance.

Si le nombre maximal de connexions est atteint suite à un événement non planifié, identifiez la cause de cet événement et prenez les mesures appropriées. Par exemple, il se peut que votre application surcharge la base de données lorsque les temps de réponse augmentent en raison de conflits de verrouillage ou de blocs. Dans ce cas, l'augmentation de la valeur associée au paramètre SESSIONS ou PROCESSES entraîne uniquement une hausse du nombre de connexions avant que la limite ne soit à nouveau atteinte, ce qui peut aggraver les problèmes causés par de tels conflits. Le système de surveillance Amazon RDS peut alors être dans l'impossibilité de se connecter, d'effectuer des vérifications d'état ou de prendre des mesures correctives, comme un redémarrage.

Résolution

Utilisation du paramètre LICENSE_MAX_SESSIONS

Le paramètre LICENSE_MAX_SESSIONS permet de spécifier le nombre maximal de séances utilisateur simultanées autorisées. Cette opération ne s'applique pas aux processus en arrière-plan d'Oracle ni aux utilisateurs disposant de privilèges RESTRICTED SESSION comme les utilisateurs ayant le rôle DBA (utilisateur principal ou RDSADMIN) .En définissant la limite LICENSE_MAX_SESSIONS sur une valeur inférieure à SESSIONS et PROCESSES, vous pouvez forcer les connexions client à recevoir un Erreur 00019 (nombre maximum de licences dépassé) au lieu d'une erreur ORA-18 ou ORA-20. Dans la mesure où une erreur ORA-00019 ne s'applique pas aux utilisateurs profitant de privilèges de type RESTRICTED SESSION (SESSION LIMITÉE), les utilisateurs principaux et RDSADMIN peuvent se connecter à l'instance de base de données et effectuer des opérations de dépannage et des actions correctives. De plus, les fonctionnalités de surveillance Amazon RDS peuvent continuer à interagir avec la base de données (via le paramètre RDSADMIN) afin que des vérifications d'état puissent être effectuées.

Important : le paramètre LICENSE_MAX_SESSIONS était initialement destiné à limiter l'utilisation en fonction du nombre de sessions simultanées. Oracle ne propose plus de licences en fonction du nombre de sessions simultanées et le paramètre LICENSE_MAX_SESSIONS n'est plus pris en charge. Cependant, vous pouvez toujours l'employer si vous disposez de la version 19c ou antérieure du système Oracle. En outre, le rôle DBA ou des privilèges RESTRICTED SESSION ne doivent pas être attribués aux utilisateurs de l'application. Pour obtenir des informations supplémentaires, consultez la documentation Oracle relative au paramètre LICENSE_MAX_SESSIONS.

LICENSE_MAX_SESSIONS est un paramètre dynamique. Il peut donc être défini sans avoir à redémarrer l'instance RDS. Pour plus d'informations, consultez Utilisation des groupes de paramètres de base de données. Consultez les étapes suivantes selon que vous utilisez des sessions SHARED (PARTAGÉES) ou DEDICATED (DÉDIÉES).

Utilisation de sessions DEDICATED

Avec les sessions DEDICATED, vos connexions clientes sont susceptibles de dépasser la limite associée au paramètre PROCESSES (ORA-20). Si vos connexions client dépassent cette limite, définissez une valeur LICENSE_MAX_SESSIONS inférieure à PROCESSES, comme suit :

  • LICENSE_MAX_SESSIONS = nombre maximal de connexions client uniquement.
  • PROCESSES = LICENSE_MAX_SESSIONS + tous les processus en arrière-plan y compris les requêtes parallèles, les utilisateurs DBA dont les utilisateurs principaux, plus une valeur tampon. Une valeur tampon permet de prendre en compte les processus en arrière-plan susceptibles de s'exécuter ultérieurement. Pour voir le nombre actuel de processus en arrière-plan, veuillez exécuter une requête similaire à la suivante :
SQL> select count(*) from v$session where type= 'BACKGROUND';

Remarque : SESSIONS, dont la valeur par défaut est (1.5 * PROCESSES) + 22, devrait être suffisant. Pour obtenir des informations supplémentaires, consultez la documentation Oracle relative au paramètre SESSIONS.

Pour vous connecter manuellement à votre instance et vérifier SESSIONS, exécutez une commande similaire à la suivante :

SQL> select name, value from v$parameter where upper(name) in ('SESSIONS','PROCESSES','LICENSE_MAX_SESSIONS');
NAME   VALUE
------------------------------ ------------------------------
processes   84
sessions   148
license_max_sessions   0

Utilisation de sessions SHARED

Avec les sessions SHARED, vos connexions clientes sont susceptibles de dépasser la limite associée au paramètre SESSIONS (ORA-0018). Si les connexions client dépassent la limite, utilisez une valeur supérieure pour le paramètre PROCESSES.

  • LICENSE_MAX_SESSIONS = nombre maximal de connexions client uniquement.
  • PROCESSES = tous les processus en arrière-plan, y compris les requêtes parallèles, les utilisateurs DBA dont les utilisateurs principaux, plus une valeur tampon. Veillez à inclure les paramètres SHARED_SERVERS et DISPATCHERS dans le nombre de processus en arrière-plan.
  • SESSIONS = (1,5 * PROCESSES) + 22

Si vous utilisez des serveurs partagés (SHARED) et que vous recevez une erreur relative au nombre maximal de processus (ORA-20) au lieu du nombre maximal de sessions (ORA-18), il est probable que les transmetteurs soient surchargés. Lorsque les transmetteurs sont surchargés, les connexions sont obligatoirement de type DEDICATED. Dans ce cas, augmentez la valeur DISPATCHERS pour permettre à plus de sessions de se connecter de manière partagée. Vous devrez peut-être également augmenter le paramètre SHARED_SERVERS. Pour plus d'informations, consultez la documentation Oracle.

Si vous ne savez pas si vous utilisez des serveurs SHARED (PARTAGÉES) ou DEDICATED (DÉDIÉES), vous pouvez le vérifier en exécutant une requête similaire à la suivante :

SQL> select decode(server, 'NONE', 'SHARED', server) as SERVER, count(*)
from v$session group by decode(server, 'NONE', 'SHARED',server)

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


Avez-vous besoin d'aide pour une question technique ou de facturation ?