Skip navigation

LIMITER LA DUREE d’un BATCH : mise en place d’un temps maximum d’activité


La problématique

Plusieurs fois, en production, des batchs de nuit ont empiété sur le matin. Comment limiter la durée des batchs ? Voyons ensemble la fonctionnalité  CONNECT_TIME des profils car elle est simple à mettre en oeuvre.

 

La fonctionnalité : le CONNECT_TIME du PROFILE

Le profil est une fonctionnalité Oracle, qu’on attribue aux utilisateurs Oracle pour limiter ce qu’ils peuvent faire. C’est notamment utilisé pour gérer le fait que le compte se verrouille après tant d’erreurs de mot de passe.

Voici ce que peut gérer un profil :

Pour les mots de passe :

  • Expire in (days)     
  • Lock (days past expiration)
  • Number of passwords to keep      
  • Number of days to keep for
  • Complexity function
  • No. failed logins   
  • No. days to lock for

Pour les ressources :

  • Concurrent Sessions (Per User)      XKCD+-+1073.png
  • Reads/Session (Blocks)    
  • Reads/Call (Blocks)
  • Private SGA (KBytes)      
  • Composite Limit (Srvc. Units)
  • Profile CPU/Session (Sec./100)    
  • CPU/Call (Sec./100)
  • Idle Time (Minutes)
  • Connect Time (Minutes)

limibatch.JPGDEFPROFILE.PNG

Mode d’emploi du PROFILE

Pour bénéficier des fonctionnalités d’un profil, il faut

  1. changer le paramètre resource_limit pour le passer à TRUE
  2. créer un profil avec les limites voulues
  3. attribuer ce profil aux utilisateurs concernés

 

Exemple de mise en place d'un PROFILE nommé "limitebatch", avec connect_time=180

ALTER SYSTEM SET RESOURCE_LIMIT=TRUE ;  --1

-- DROP PROFILE limitebatch cascade;

show parameter resource_limit ;

CREATE PROFILE limitebatch LIMIT CONNECT_TIME 180 ;  -- 2

alter user utilisateurbatch PROFILE limitebatch;            -- 3

Select username,profile from dba_users where lower(username) ='utilisateurbatch' ;

 

NAME           TYPE    VALUE

-------------- ------- -----

resource_limit boolean TRUE 

 

Profile LIMITEBATCH créé(e).

 

 

User UTILISATEURBATCH modifié(e).

 

 

USERNAME                       PROFILE                     

------------------------------ ------------------------------

UTILISATEURBATCH                      LIMITEBATCH                  

UPROPRIETAIRE                      DEFAULT

 

Un fois le profil attribué à l’utilisateur, aucune session de cet utilisateur ne pourra durer au-delà de 3H.

Si cela se produit, voici ce qu’on trouvera dans la log du batch :

 

ERROR at line 1:
ORA-02399:,temps max. de connexion dépassé, vous êtes déconnecté
ORA-06512: à ligne 2272
ORA-02399: temps max. de connexion dépassé, vous êtes déconnecté
Disconnected from Oracle Database 11g Enterprise Edition Release

Pour désactiver cette fonctionnalité, ne pas supprimer le profil (il pourra resservir), mais attribuer à l’utilisateur le profil DEFAULT :

ALTER USER UTILISATEURBATCH PROFILE DEFAULT ;

SELECT USERNAME,PROFILE FROM DBA_USERS WHERE lower(username) ='utilisateurbatch';

 

Que se passe-t’il quand une session est déconnectée ?

Cela génère l’erreur ORA-02399 bien sûr, mais concrètement, d’après la doc oracle

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6010.htm

Si un utilisateur dépasser la limite CONNECT_TIME or IDLE_TIME,  la transaction en cours de l’utilisateur est rollbackée et sa session coupée. Lorsque le processus utilisateur fait un nouvel appel server, la base de données renvoie l’erreur ora-02399.