# Problem beim Zugriff auf eine Oracle-DB



## d.ausstroit (29. Sep 2006)

Hai, ich versuche gerade eine DB-Verbindung zu einer Oracle 8er DB aufzubauen.

Hier der Code für das Öffnen der DB:


```
try {
            db.setConnection(new ConnectionDescriptor(
                    "jdbc:oracle:thin:@192.168.0.2:1521:hw2", bed, pwd, false,
                    "oracle.jdbc.driver.OracleDriver"));
            db.openConnection();
        }
        catch (Exception err) {
            err.printStackTrace();
        }
```

Folgende Fehlermeldung beim Zugriff auf eine 8er wird ausgegeben:

Siehe Fehlercode com.borland.dx.dataset.DataSetException: BASE+66

com.borland.dx.dataset.DataSetException: ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory


	at com.borland.dx.dataset.DataSetException.a(Unknown Source)
	at com.borland.dx.dataset.DataSetException.throwException(Unknown Source)
	at com.borland.dx.dataset.DataSetException.SQLException(Unknown Source)
	at com.borland.dx.sql.dataset.Database.openConnection(Unknown Source)
	at TC_Dialogpflege.TC_Dialogpflege.dbopen(TC_Dialogpflege.java:131)
	at TC_Dialogpflege.TC_Dialogpflege.init(TC_Dialogpflege.java:81)
	at com.borland.jbuilder.runtime.applet.AppletTestbed.startApplet(Unknown Source)
	at com.borland.jbuilder.runtime.applet.AppletTestbed.main(Unknown Source)
Exception-Kette:
java.sql.SQLException: ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)
	at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOsesskey(T4CTTIoauthenticate.java:288)
	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:357)
	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414)
	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
	at java.sql.DriverManager.getConnection(DriverManager.java:525)
	at java.sql.DriverManager.getConnection(DriverManager.java:171)
	at com.borland.dx.sql.dataset.Database.openConnection(Unknown Source)
	at TC_Dialogpflege.TC_Dialogpflege.dbopen(TC_Dialogpflege.java:131)
	at TC_Dialogpflege.TC_Dialogpflege.init(TC_Dialogpflege.java:81)
	at com.borland.jbuilder.runtime.applet.AppletTestbed.startApplet(Unknown Source)
	at com.borland.jbuilder.runtime.applet.AppletTestbed.main(Unknown Source)

usw.....

Der Zugriff auf eine andere DB (9er oder 10er) funktioniert ohne Probleme. Ich bin mir sicher, dass der Zugriff auf die 8er schon einmal funktioniert hat. Allerdings hat der Rechner, auf dem die 8er liegt, eine andere IP bekommen. Kann das damit zusammen hängen.

Bin echt am verzweifeln. :cry: Ich hoffe mit kann jemand helfen.

Dirk


----------



## thE_29 (29. Sep 2006)

Wenn er ne andere IP hat, hast du die IP auch geändert beim Zugriff??

Der 8er Zugriff läuft gleich ab wie bei der 9er oder 10er!


Laut der Fehlermeldung, läuft auf dem PC keine Instanz die so heißt!


----------



## d.ausstroit (29. Sep 2006)

Ja, die 192.168.0.3 ist schon die neue. Du meinst doch die IP in dem Cennction-String, oder?

Die DB läuft auf dem Rechner. Ich komme ja mit anderen DB-Tools über die IP auf die DB und kann dort arbeiten. Es kann doch nicht sein, dass sich die IP irgenwo gemerkt wird. Ne, dass glaube ich nicht.


----------



## thE_29 (29. Sep 2006)

Probier mal normal "einloggen"

Also ohne diesen ConnectionDescripter!

Zuerst class.forName("oracle...")

Und dann mit DriverManager die conn aufbauen!


----------



## d.ausstroit (29. Sep 2006)

Jau, das habe ich schon gemacht. Kommt genau der gleiche Mist.


----------



## thE_29 (29. Sep 2006)

Der Listener ist richtig konfiguriert?

Andere Programme (was sind andere Programme?) können drauf zugreifen?

Geht aquadatastudio?


----------



## d.ausstroit (29. Sep 2006)

Was bitte ist "aquadatastudio"  :shock: 

Mit anderen Programmen meine ich mit C++Builder selbstgeschriebene Dialogprogramme und auch DB-Abfrage Tools (z.B. Toad) oder auch direkt mit SQLPlus von Oracle. Also, im Ernst. Die DB ist gestartet und läuft.

Was meinst Du mit Listener richtig konfiguriert. Kann man da einstellen, ob über einen Java-Oracle-Treiber verbunden werden darf. Sag schon. Wie muss ich den konfigurieren  ???:L

Nachträglich hinzugefügt:
Habe schon nach aqua data studio gegoogelt. Ist auch ein DB-Abfrage-Tool. Würd sicher auch funktionieren.


----------



## thE_29 (29. Sep 2006)

Naja, verallgemeinere das nicht!

Zwischen Oracle8 verbinden und Oracle 9/10 verbinden liegen Welten!

Schau mal ob Aquadatastudio connecten kann!

Ansonsten ist dein Listener (Java greift auf einen Listener zu) falsch konfiguriert, bzw läuft nicht!

sqlplus geht nicht über Listener, das geht direkt drauf!


Das Ding heißt unter Linux: tnslsnr

Weiß ja nicht ob du Linux oder Windows hast!

Wenn das nicht läuft, bzw konfiguriert ist, kannst du das ganze knicken!


----------



## d.ausstroit (29. Sep 2006)

Die DB ist unter Linux installiert. Kannst Du mir vielleicht sagen, wie und womit ich den Listener konfiguriere.

Vielen Dank für Deine bisherige Hilfe.


----------



## d.ausstroit (29. Sep 2006)

So, ich habe nun aqua data studio installiert. Du hattest recht. Das Ding läuft auch nicht. Ist schon komisch. Greift das anders auf eine DB zu? Fragen über Fragen.


----------



## thE_29 (2. Okt 2006)

Es gibt irgendwo eine listener.ora

In der steht wo das log Verzeichnis ist, etc (dort gibts dann eine listener.log).

In dieser listener.ora steht auch der SID Name und Port falls ein anderer!

Was ganz wichtig ist, dort drinnen ist auch ein HOST Angabe!

Dh, wenn dort drinnen ein alter Host Eintrag oder IP steht, geht der auch auf die und net auf deine neu umgestellte!!

Also mit find nach listener.ora suchen!

und gucken ob der tnslsnr (ps ax | grep tnslsnr) läuft!

Und was in der log Datei steht!


----------



## d.ausstroit (5. Okt 2006)

Hai, da bin ich wieder. Leider ist mein Problem noch nicht gelöst. Die Einträge in der listener.ora und in der tnsnames.ora habe ich geprüft. Die sind ok. Ich verstehe das einfach nicht. Muss man denn noch irgenwas beachten, wenn man mit Java auf eine Oracle8i-Datenbank zugreifen will, die unter Linux installiert ist. Das unverständliche ist halt, dass Zugriffe über andere Programme durchgeführt werden können. Nur über Java und mit "aqua data studio" nicht. Ist doch eigenartig oder  :?: 

Brauche dringend Unterstützung  :cry: 

Dirk


----------



## thE_29 (5. Okt 2006)

Naja, über den Listener greifen nur Java Programm zu!

Die meisten C programme gehen über unicODBC oder über openlink!


Was steht den in der listener.log?


----------



## d.ausstroit (5. Okt 2006)

Ich meine die C-Programme greifen über Oracle-Net auch auf den Listener zu. Wenn ich die Einstellungen in der listener.ora ändere, funktioniert der Zugriff mit C-Programmen nicht mehr. Auch DB-Admin-Programme können die DB dann nicht mehr öffnen. Also ist der Listener auch für die Programme da.

Ich habe ja noch nicht viel mit dem DB-Zugriff mit Java programmiert. Aber ich meine gelesen zu haben, dass der Zugriff *nicht* über den Listener erfolgt. Da kann ich mich aber auch täuschen.

Hier kommt der Inhalt der listener.ora:


```
# LISTENER.ORA Network Configuration File: /oracle/app/oracle/product/8.1.7/netw
ork/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = HW3L.local)(PORT = 1521))
      )
    )
  ) 

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = HW3)
      (ORACLE_HOME = /oracle/app/oracle/product/8.1.7)
    )
    (SID_DESC =
      (SID_NAME = HW1)
      (ORACLE_HOME = /oracle/app/oracle/product/8.1.7)
    )
  )
```

Gruß

Dirk


----------



## thE_29 (5. Okt 2006)

Wieso hatn dein Listnere 2 Zugriffsnamen?


Einmal HW3 und einmal HW1!



Und du sagst da:

db.setConnection(new ConnectionDescriptor(
                    "jdbcracle:thin192.168.0.2:1521:hw2", bed, pwd, false,
                    "oracle.jdbc.driver.OracleDriver")); 


hw2!

Nur gibts kein hw2!

Probier mal HW3 oder HW1 (Großschreibung beachten)


----------



## d.ausstroit (5. Okt 2006)

Oh, sorry mein Fehler  :roll:.

Es muss natürlich heißen:

db.setConnection(new ConnectionDescriptor( 
"jdbcracle:thin192.168.0.3:1521:hw1", bed, pwd, false, 
"oracle.jdbc.driver.OracleDriver")); 

Zwei Zugriffsnamen, weil 2 DB-User eingerichtet sind.


----------



## thE_29 (5. Okt 2006)

Nein, da muss ein großes HW1 hin!!

Du greifst auf LINUX ZU!


----------



## d.ausstroit (5. Okt 2006)

Ja, die Oracle8i liegt unter Linux.


----------



## thE_29 (5. Okt 2006)

Geht es den wenn du ein großes HW1 dort hinmachst?


db.setConnection(new ConnectionDescriptor(
"jdbcracle:thin192.168.0.3:1521:HW1", bed, pwd, false,
"oracle.jdbc.driver.OracleDriver"));


----------



## d.ausstroit (5. Okt 2006)

Nein, leider nicht.


----------



## thE_29 (5. Okt 2006)

Auch mit AQUAstudio nicht?

Kommt die gleiche Exception?


Dann ist HW3.local auch deine lokale Maschine?


Was steht in der listener.log im $ORACLE_OME/network/log Verzeichnis?


----------



## d.ausstroit (5. Okt 2006)

Auch mit AQUAstudio geht's nicht. Und richtig, die DB liegt auf der HW3L.

Ich poste mal drei Einträge aus der listener.log.

Dieser Eintrag entsteht durch eine korrekte Verbindung (Durch das Programm Toad)
05-OKT-2006 11:15:05 * (CONNECT_DATA=(SERVICE_NAME=hw1)(CID=(PROGRAM=C:\Programme\Quest Software\Toad for Oracle\TOAD.exe)(HOST=PC-DIRK)(USER=wiederm))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.206)(PORT=2996)) * establish * hw1 * 0

Dieser durch den Zugriff eines C++-Programms, der klappt auch
05-OKT-2006 11:19:00 * (CONNECT_DATA=(SERVICE_NAME=hw1)(CID=(PROGRAM=F:\programmierung\Kunden_Projekte\schober\TC_ACS\Dialogpflege\TC_Dialogpflege_DEU.exe)(HOST=PC-DIRK)(USER=wiederm))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.206)(PORT=3001)) * establish * hw1 * 0

Dieser durch den Zugriff des Java-Applets, der nicht klappt
05-OKT-2006 11:17:11 * (CONNECT_DATA=(SID=HW1)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.206)(PORT=2999)) * establish * HW1 * 0

Der Unterschied ist einmal mit SID (klappt nicht) und SERVICE_NAME (klappt).


----------



## thE_29 (5. Okt 2006)

Warum stehtn da trotzdem establish?!


----------



## thE_29 (5. Okt 2006)

Nachtrag: dieses establish kommt auch dann, wenn man einen falschen Benutzernamen/Passwort hat!


----------

