Comment dois-je procéder en cas d'erreur ORA-00018 ou ORA-00020 avec 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 sessions ORA-00018 dépassé
  • Nombre maximal de processus ORA-00020 dépassé

Comment puis-je remédier à cela ?

Courte description

Ces messages d'erreur peuvent être dus à une tâche de dimensionnement planifiée ou à un événement non prévu qui entraîne un grand nombre de connexions de 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 les modifier, puis redémarrer l'instance.

Si le nombre maximal de connexions est atteint en raison d'un événement non prévu, identifiez la cause de ce dernier et prenez les mesures appropriées. Votre application peut, par exemple, surcharger la base de données lorsque les temps de réponse augmentent en raison d'un conflit de verrouillage ou de blocage. 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.

Solution

Utilisation du paramètre LICENSE_MAX_SESSIONS

Le paramètre LICENSE_MAX_SESSIONS permet de spécifier le nombre maximal de sessions utilisateur simultanées autorisées. Il ne s'applique pas aux processus Oracle s'exécutant en arrière-plan, ni aux utilisateurs profitant de privilèges de type RESTRICTED SESSION (comme ceux qui disposent d'un rôle DBA, à savoir les utilisateurs principaux ou RDSADMIN). En définissant la limite LICENSE_MAX_SESSIONS sur une valeur inférieure à celle associée aux paramètres SESSIONS et PROCESSES, vous pouvez forcer la réception, par les connexions clientes, d'une erreur ORA-00019 (nombre maximal de licences dépassé) et non 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, 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.

Le paramètre LICENSE_MAX_SESSIONS étant dynamique, il peut être configuré sans redémarrer l'instance RDS. Pour obtenir des informations supplémentaires, consultez la section Utilisation de groupes de paramètres de base de données. Suivez, ci-dessous, la procédure se rapportant à votre cas :

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 tel est le cas, définissez une valeur inférieure à celle du paramètre PROCESSES pour le paramètre LICENSE_MAX_SESSIONS, en tenant compte des éléments suivants :

  • LICENSE_MAX_SESSIONS = nombre maximal de connexions clientes uniquement.
  • PROCESSES = paramètre LICENSE_MAX_SESSIONS et tous les processus s'exécutant en arrière-plan, y compris les requêtes parallèles, les sessions d'utilisateurs DBA (utilisateurs principaux inclus) et la mise en mémoire tampon. La mémoire tampon permet d'exécuter des processus en arrière-plan inattendus et pouvant se produire ultérieurement. Pour connaître le nombre de processus s'exécutant actuellement en arrière-plan, exécutez une requête similaire à la suivante :
SQL> select count(*) from v$session where type= 'BACKGROUND';

Remarque : la valeur par défaut du paramètre SESSIONS, qui correspond à celle du paramètre PROCESSES multipliée par 1,5 et ajoutée à 22, ne devrait normalement pas nécessiter de modification. Pour obtenir des informations supplémentaires, consultez la documentation Oracle relative au paramètre SESSIONS.

Pour vous connecter manuellement à votre instance afin de vérifier le paramètre 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 tel est le cas, définissez le paramètre PROCESSES sur une valeur plus élevée.

  • LICENSE_MAX_SESSIONS = nombre maximal de connexions clientes uniquement.
  • PROCESSES = tous les processus en arrière-plan, y compris les requêtes parallèles, les sessions d'utilisateurs DBA (utilisateurs principaux inclus) et la mise en mémoire tampon. Assurez-vous d'inclure les paramètres SHARED_SERVERS et DISPATCHERS au nombre de processus s'exécutant en arrière-plan.
  • SESSIONS = Paramètre PROCESSES multiplié par 1,5 et ajouté à 22

Si vous utilisez des serveurs SHARED et que vous obtenez une erreur ORA-20 et non une erreur ORA-18, il est probable que vos répartiteurs soient sursollicités. Dans une telle situation, les connexions sont obligatoirement de type DEDICATED. Augmentez alors le nombre de répartiteurs pour accroître le nombre de sessions SHARED. Il peut également être nécessaire d'augmenter la valeur associée au paramètre SHARED_SERVERS. Consultez la documentation Oracle pour obtenir des informations supplémentaires.

Si vous ne savez pas si vous utilisez des serveurs SHARED ou DEDICATED, vous pouvez le déterminer 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 ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?