IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

[C#][Oracle] ORA-00020 -> Nb max de process atteind


Sujet :

Accès aux données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 24
    Points
    24
    Par défaut [C#][Oracle] ORA-00020 -> Nb max de process atteind
    Bonjour,

    j'ai une appli ASP.NET en C# que je developpe.
    Je suis pour le moment le seul utilisateur qui l'utilise ...et pourtant au bout de quelques manipulations dans l'application, j'ai l'erreur suivante :

    ORA-00020: maximum number of processes (200) exceeded


    Je pense que je ferme bien les connexions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    public static OracleDataReader GetColorChoices() 
    {
     
       OracleConnection _connection = new OracleConnection(ConfigurationSettings.AppSettings["ConnectString"]);
       try
       {
    	_connection.Open();
       }
       catch (Exception err) 
       {} 
       string strQuery = "SELECT color, description FROM color_choices"; 
     
       OracleCommand _command = new OracleCommand(strQuery, _connection);
       _command.CommandType = CommandType.Text;
       OracleDataReader _reader = null;
     
       try
       {
          _reader = _command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
          return _reader;
       }
       catch
       {
          _connection.Close();
          return _reader;
        }
    }


    Une des solutions que j'ai trouvé sur le net consiste à augmenter e parametre (200) dans un fichier de Oracle mais bon je ne crois pas que ce soit une bonne solution, vaut mieux trouver ce qui se passe dans mon programme


    Enfin pour ne pas ouvrir/fermer la connexion a chaque requete (ma page remplit tout de meme une quinzaine de datagrids + requetes d'identification ...), j'ai tenté de créer une connexion et de louvrir dans le session_start du global.asax et d'utiliser cette objet a chaque requete mais je me retrouve face au meme pb !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
    protected void Session_Start(Object sender, EventArgs e){
        try{
          OracleClient.OracleConnection _connection = new OracleClient.OracleConnection(ConfigurationSettings.AppSettings["ConnectString"]);
         System.Web.HttpContext.Current.Session["ORACLECONNECTION"] = _connection;
          _connection.Open();
          }
    catch{DAL.Impl.Utils.Alert("Connexion pb");}
    }
     
    /****/
     
    protected void Session_End(Object sender, EventArgs e){
    try{
       OracleConnection _connection = (OracleConnection)System.Web.HttpContext.Current.Session["ORACLECONNECTION"];
       _connection.Close();
       _connection.Dispose();
       System.Web.HttpContext.Current.Session["ORACLECONNECTION"] = null;
    }
    catch{}
    }
     
    /**puis utilisation dans mes requetes : **/
     
    public static OracleDataReader GetColorChoices() 
    {
       OracleConnection _connection = (OracleConnection)System.Web.HttpContext.Current.Session["ORACLECONNECTION"];
       string strQuery = "SELECT color, description FROM color_choices"; 
     
       OracleCommand _command = new OracleCommand(strQuery, _connection);
       _command.CommandType = CommandType.Text;
       OracleDataReader _reader = null;
     
       try
       {
          _reader = _command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
          return _reader;
       }
       catch
       {
          _connection.Close();
          return _reader;
        }
    }
    Merci d'avance pour votre aide j'y suis depuis 12h je deviens fou lol

    Gaël

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    J'ai cru comprendre sur un forum anglais qu'il fallait mieux utiliser ODP avec :

    using Oracle.DataAccess.Client;


    au lieu des objets par défauts :
    using System.Data.OracleClient;


    Quest ce que ca mamenera de + ?

    Merci

  3. #3
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    a mon avis : il faire un close() sur _reader et sur _command, et le faire non pas dans un bloc catch mais un bloc finally

  4. #4
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    oui si tu fermes pas ta connection et ton reader c'est normal que tu gardes des connection ouvertes

  5. #5
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try 
       { 
          _reader = _command.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 
          return _reader; 
       } 
       catch 
       { 
          _connection.Close(); 
          return _reader; 
        }
    ici ce que tu fais c'est si tu n'arrive pas a ouvrir alors ferme la connection.
    toi ce que tu veux si tu ouvre et il y a un probleme ou si tu ouvre et il n'y a pas de probleme alors ferme.


    dou le finally

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    try
    {
       if(connection.status==close)   //je te conseil ici d'egalement de verifier si la connection est ouverte avant de l'ouvrir (verifie la syntaxe elle est fausse)
             connection.Open();  
    }
    catch()
    {
    }
    finally
    {
        if(connection.status==open)  //je sais pas si c'est utile dans un finally  [b](jattends vos  remarque)[/b]
    connection.Close();
    }

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    merci pour votre aide je teste tout ca et je vous tient au courant !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Oracle 9i][Débutant] Utilisation de MAX avec autres champs
    Par Requin15 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/06/2006, 11h58
  2. Oracle ora-04091 mutating table
    Par hottnikks_79 dans le forum Oracle
    Réponses: 1
    Dernier message: 19/05/2006, 19h34
  3. Pb Oracle: ORA-06508
    Par mehdijaqir dans le forum Oracle
    Réponses: 3
    Dernier message: 10/05/2006, 08h40
  4. Erreur Oracle ORA-30036
    Par lapartdombre dans le forum Oracle
    Réponses: 5
    Dernier message: 04/11/2005, 15h37
  5. Oracle ORA-00020 : maximum de processus
    Par Lisou dans le forum Administration
    Réponses: 5
    Dernier message: 22/03/2004, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo