# jdbc Oracle Connection refused



## java_starter_phil (20. Mai 2008)

Hi leuz!
Ich hab da ein komisches Problem...

Hab da ein Programm, welches auf eine Oracle Datenbank zugreift. Das funktioniert auch wunderbar. Doch ab und zu - konnte noch nicht genau lokalisieren wann - tritt ein Fehler auf und dann geht nix mehr:

SQLException: E/A-Exception: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=169870336)(ERR=12518)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4))))
java.sql.SQLException: E/A-Exception: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=169870336)(ERR=12518)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4))))
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
SQLState: null
VendorError: 17002
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:334)
        at oracle.jdbc.ttc7.TTC7Protocol.handleIOException(TTC7Protocol.java:3668)
        at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:353)
        at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:371)
        at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:551)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:351)



Ich benutze die ojdbc14.jar Libary und eine 10g Datenbank.
So baue ich meine Connection in der Klasse Database_Connect auf:


```
public class Database_Connect {
    private Connection conn = null;
    private final String hostname = "svdb0815"; 
    private final String port = "1521"; 
    private final String user = "user"; 
    private final String password = "password"; 
    private final String sid = "impact"; 
    
    public Connection doConnect()
        {
            try 
            { 
                Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
            } 
            catch (Exception e) { 
                System.err.println("Unable to load driver."); 
                e.printStackTrace(); 
            }
            
            
            
            try 
            { 
                String url = "jdbc:oracle:thin:@"+hostname+":"+port+":"+sid; 
                conn = DriverManager.getConnection(url, user, password);
            } 
            catch (SQLException sqle) 
            { 
                System.out.println("SQLException: " + sqle.getMessage()); 
                System.out.println("SQLState: " + sqle.getSQLState()); 
                System.out.println("VendorError: " + sqle.getErrorCode()); 
                sqle.printStackTrace(); 
            }
            return conn;
        }
        
       
        
        public void CloseConnection()
        {
            try 
            {
                this.conn.close();
            } 
            catch (SQLException ex) 
            {
                ex.printStackTrace();
            }
        }   
    
}
```


Könnte der Fehler vielleicht daran liegen dass ich irgendwo eine Connection nicht geschlossen habe und wieder eine neue aufbaue, oder ist das eh kein problem?

Bin grad ziemlich ratlos, also danke für jede Hilfe!


----------



## java_starter_phil (20. Mai 2008)

...hmm... ich glaube das war wirklich weil ich Connectionverwaltung nicht sauber ausprogrammiert habe.
Ich habe da ein paar fälle gefunden, bei denen ich eine Connection aufbaue, obwohl eine andere noch offen ist. Dies habe ich nun beseitigt, jetzt scheint es zu funktionieren.

mal sehen für wie lange... 
greetings


----------



## maki (20. Mai 2008)

Warum keinen ConnectionPool, dann gibt es diese Probleme nicht mehr.


----------



## ms (20. Mai 2008)

maki hat gesagt.:
			
		

> Warum keinen ConnectionPool, dann gibt es diese Probleme nicht mehr.


Sicher, dass damit das Problem gelöst ist?
Man muss doch in jedem Fall Connection#close() aufrufen. Ohne CP wird die Connection tatsächlich geschlossen, mit CP wird sie nur in den Pool zurückgegeben. Wenn aber Connections nie an den Pool zurückgegeben werden dann wird der Pool doch auch irgendwann keine Connections mehr haben.
Der Vorteil vom CP ist doch, dass das "teure" Öffnen und Schließen entfällt.
Oder hab ich da was falsch verstanden?

ms


----------



## maki (20. Mai 2008)

Nun ja, jetzt wo du es sagst... hast recht, ändert nix.


----------



## java_starter_phil (20. Mai 2008)

tja, Connection Pool, wär eigentlich auch nicht schlecht, aber da die perfomance nicht im Vordergrund steht, hab ich das nicht umgesetzt, und das jetzt zu ändern ... puh ... aufwändig -> Objektorientiertes Programmieren ist das beste!!!... deshalb hab ich es auch FAST ganz gemacht


----------



## voidee (20. Mai 2008)

Vorab: hatte noch nie einen solchen Fehler. 

Hast du dir den Stacktrace mal angeschaut?


```
SQLException: E/A-Exception: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=169870336)(ERR=12518)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4))))
java.sql.SQLException: E/A-Exception: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=169870336)(ERR=12518)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4))))
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
SQLState: null
VendorError: 17002
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:334)
at oracle.jdbc.ttc7.TTC7Protocol.handleIOException(TTC7Protocol.java:3668)
at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:353)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:371)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:551)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:351)
```


Aus der Zeile

```
....(ERR=12518)(ERROR_STACK=(ERROR=(CODE=12518)...
```

interpretiere ich mal, dass es ein ORA-12518 Fehler ist. Google meint, dass da ein Listener Problem besteht. Check das doch mal.


----------

