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

JDBC Java Discussion :

Probleme acces BDD Oracle ORA 12519


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 136
    Points : 64
    Points
    64
    Par défaut Probleme acces BDD Oracle ORA 12519
    Bonjour,

    Voici mon problème. J'ai un programme JAVA avec une interface graphique, et différents accès a une base de donnée Oracle installée localement. Au bout d'un certain temps d'utilisation, l'erreur suivante apparait:
    " ORA-12519, TNS: no appropriate service handler found
    The Connection descriptor used by the client was : 127.0.0.1:1521:XE"

    A priori l'erreur semble venir du fait qu'il y aurait trop de sessions / connexions. Une des solutions semblet être d'augmenter le nombre de sessions :
    "alter system set processes=100 scope=spfile;
    alter system reset sessions scope=spfile sid=’*';"

    Cette solution m'enchante peu, vu que peut importe le nombre de processus que j'autorise, a un moment ou a un autre je l'atteindrai. Je me suis donc dis que mon erreur devait venir du fait que je ne fermais pas la connexion a la base de donnée. Pourtant même en fermant la connexion apres chaque acces a la bdd, l'erreur survient tot ou tard. Ci-joint la partie du code qui semble provoquer ce problème:

    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
    	public void calcul() {
     
     
    		try {			
    			   c = new ConnexionDB();	
    			   con = c.getConnection();
    			   s = con.createStatement();
     
    			   FehlerOutput fo = new FehlerOutput();
    			   int apnr = fo.getAktuelleAbpressungNr();
    			   String query = "SELECT COUNT(*) FROM TABLE_PROTOTYP WHERE ABPRESSUNG_NR="+apnr;
    			   ResultSet rs = s.executeQuery(query);
    			   int anzahl = 0;
    			   while (rs.next()) {
    				   anzahl = rs.getInt(1);
    			   }	
    				float prozent = (float)anzahl / (float)this.Teile * 100;
    				if (prozent > 100) {
    					prozent = 100;
    				}
     
    				prozent = prozent * 100;
    				prozent=Math.round(prozent);
    				prozent /= 100 ;
     
    				this.setAusschuss(prozent);
    				rs.close();
    				con.close();
    			} 
     
     
    		catch (SQLException e) {
    			e.printStackTrace();
    		}
     
    	}
    Cette methode (calcul) est appellé à intervalle régulier ( toutes les 4 secondes ).
    La ligne a laquelle une erreur m'est indiquée est la suivante :
    con = c.getConnection();


    Et voici la classe qui me permet d'initialiser la connexion à la base de donnée :

    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
     
    public class ConnexionDB {
     
    	private String url; 
    	private String login;
    	private String password;
    	private Connection con = null;
     
    	public ConnexionDB() {
    		this.url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
    		this.login = "yyy";
    		this.password = "xxx";		
    	}
     
    	public ConnexionDB(String url, String login, String password) {
    		this.url = url;
    		this.login = login;
    		this.password = password;
    	}
     
    	public Connection getConnection() {
    	      try {
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			con = DriverManager.getConnection(this.getUrl(), this.getLogin(), this.getPassword());
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    			System.err.println("Error loading JDBC drivers");
    		} catch (SQLException e) {
    			e.printStackTrace();
    			System.err.println("Error starting Connection");
    		}
    		return con;
    	}
    }
    La ligne a laquelle une erreur m'est indiquée est la suivante :
    con = DriverManager.getConnection(this.getUrl(), this.getLogin(), this.getPassword());


    Si quelqu'un a une idée : je suis preneur !

    Merci d'avance

    Cordialement

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut Taille de la table TABLE_PROTOTYP
    Bonjour,

    Si le temps d'exécution de calcul() excède 4 secondes (dans le cas d'une table TABLE_PROTOTYP particulièrement grande) alors il est possible que plusieurs demandes d'accès se superposent et finissent par dépasser le nombre d'accès autorisés.

    Quelle méthode est utilisée pour relancer l'appel de calcul() : thread ou bien timer ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut Complément ...
    J'avais mal lu ta requête (on va toujours trop vite) La taille de la table semble n'avoir rien à voir avec le temps d'exécution puisque SELECT COUNT(*) ne renvoie que le nombre d'enregistrements.

    Je ne sais pas si c'est important pour Oracle, mais il est peut-être utile de mettre un nom de champ : "SELECT COUNT(*) As zahl"

    En relisant ton code, j'ai vu quelque chose d'assez étrange :
    tu as mis une boucle while sur rs alors qu'il ne peut renvoyer qu'un seul enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    			   while (rs.next()) {
    				   anzahl = rs.getInt(1);
    			   }
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/04/2014, 15h34
  2. Réponses: 5
    Dernier message: 17/02/2013, 16h59
  3. Erreur oracle ORA-12519
    Par gil15tre dans le forum Connexions aux bases de données
    Réponses: 2
    Dernier message: 22/12/2011, 15h29
  4. [PDO] Code acces BDD oracle
    Par Super_carotte dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/03/2011, 15h53
  5. Accès BDD Oracle
    Par rgarnier dans le forum XMLRAD
    Réponses: 5
    Dernier message: 21/01/2005, 15h03

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