aVogt
Returning Creator

Verwendung einer tnsnames.ora

Hallo,

wir stellen demnächst unsere Datenbanken auf ODA (Oracle Database Appliance) um.

Dadurch wird der Connection-String dutlich länger als bisher, da in dem String auch die "Failover"Variante mit eingebaut ist.

Nun zur eigentlichen Frage:

Kann ich "irgendwie" eine tnsnames.ora anbinden?

Normalerweise wird diese mit -Doracle.net.tns_admin=PFADANGABE dem Javaprozess mitgegeben.

Ich habe gehofft, das die Angabe wrapper.java.additional.8=-Doracle.net.tns_admin=D:/FsSabVz/conf/tnsnames.ora (auch mit "\" statt "/")

in der fs-wrapper.conf hilft. Bei der Konfiguration der Datenbanken sollte dann  jdbc:oracle:thin:/@extappt ausreichen. (auch ohne "/" probiert).

Aber leider ist das nicht der Fall. Ich bekomme die Meldung: Fehler:I/O-Fehler: could not resolve the connect identifier "extappt"

extappt steht als Servicename in der tnsnames.ora.


Die tnsnames.ora kann von dem Nutzer unter dem das FS-System läuft gelesen werden. Das System wurde auch nach hinzufügen des Eintrages neu gestartet.

Hat jemand so etwas schon probiert?

Grüße

Andreas

p.s. Der Helpdesk hat mich mit der Frage an die Community verwiesen.


11 Replies
Peter_Jodeleit
Crownpeak employee

Wie ist denn der JDBC-Treiber in FirstSpirit eingebunden? Als Modul? Hat das Modul alle Rechte?

Peter
0 Kudos

Fehler gefunden:  Es darf nur

wrapper.java.additional.8=-Doracle.net.tns_admin=D:/FsSabVz/conf/

eingetragen werden. tnsnames.ora darf nicht mit in der Angabe stehen.

Eine Datei namens tnsnames.ora muss sich natürlich in dem angegebenen Verzeichnis befinden.

Dann funktioniert es auch.

Danke für die Rückmeldung. Ich kannte diese Art der Konfiguration bisher noch nicht. So ist die Konfiguration tatsächlich übersichtlicher und kann zentral geändert werden. Guter Tipp!

Peter

Hallo Andreas, Hallo Peter,

wir haben die gleiche Anforderung mit der Oracle DB und dem Failover/Loadbalancer Connection String.

Leider ist es uns bisher nicht möglich gewesen diesen korrekt zu konfigurieren (FS 5.2.1002).
Die GUI im Server Manager kommt damit nicht zurecht. Manuelles Eintragen in die fs-database.conf hat bisher auch nicht funktioniert.

Meine Frage ist, wenn ich eine tnsnames.ora habe, wie muss dann die "normale" DB Verbindung (fs-database.conf) konfiguriert werden?
Die jdbc.URL darf ja nicht leer sein.

Viele Grüße

Thomas

0 Kudos
aVogt
Returning Creator

Hallo Thomas,

ich habe di notwendigen Schritte mal in einem Dokument kurz zusammengefasst. Hoffe, dass es hilt.

Grüße

Andreas

0 Kudos

Hallo Andreas,

vielen Dank für deine schnelle Reaktion und die Anleitung die du geschrieben hast.

Leider bekommen wir es aktuell noch nicht korrekt konfiguriert. Es sieht so aus als ob die tnsnames.ora gar nicht geladen wird.
Beim Zugriff auf die DB bekommen wir dann eine unspezifische SQL Exception:

INFO  31.07.2017 11:49:56.119 (de.espirit.or.impl.connection.ConnectionManagerFactory): Create a new Connection pool for ConnectionPoolId{jdbc:oracle:thin:@oracledb;schema=XXXX;user=XXXX;module=null}

INFO  31.07.2017 11:49:56.134 (de.espirit.or.impl.connection.DBConnectionManager): Using default transaction isolation 'READ_COMMITTED'.

INFO  31.07.2017 11:49:56.181 (de.espirit.or.impl.connection.DBConnectionManager): Driver: sun.misc.Launcher$AppClassLoader@1540e19d

INFO  31.07.2017 11:49:56.181 (de.espirit.or.impl.connection.DBConnectionManager): Connection manager: sun.misc.Launcher$AppClassLoader@1540e19d

INFO  31.07.2017 11:49:56.197 (de.espirit.or.impl.connection.DBConnectionManager): oracle.jdbc.OracleDriver: Major 12, minor 1, jdbc compliant = true

ERROR 31.07.2017 11:49:56.322 (de.espirit.or.impl.connection.DBConnectionManager): SQL-Exception! jdbc:oracle:thin:/@XXXX

FSVersion=5.2.1002.76101#5262;JDK=1.8.0_101 64bit Oracle Corporation;OS=Windows Server 2012 6.2 amd64;Date=31.07.2017 11:49:56

java.sql.SQLRecoverableException: I/O-Fehler: SO Exception was generated

  at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743)

  at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)

  at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)

  at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566)

  at de.espirit.or.impl.connection.DBConnectionManager.createConnection(DBConnectionManager.java:344)

  at de.espirit.or.impl.connection.DBConnectionManager.access$700(DBConnectionManager.java:49)

  at de.espirit.or.impl.connection.DBConnectionManager$ConnectionHolder.getConnection(DBConnectionManager.java:622)

  at de.espirit.or.impl.connection.DBConnectionManager.init(DBConnectionManager.java:230)

  at de.espirit.or.impl.connection.ConnectionManagerFactory$DelegatingConnectionManager.init(ConnectionManagerFactory.java:167)

  at de.espirit.or.impl.connection.ConnectionManagerFactory.getConnectionManager(ConnectionManagerFactory.java:60)

  at de.espirit.or.impl.connection.ConnectionManagerFactory.getConnectionManager(ConnectionManagerFactory.java:42)

  at de.espirit.firstspirit.content.ContentManagerImpl.createSessionHandler(ContentManagerImpl.java:911)

  at de.espirit.firstspirit.content.ContentManagerImpl.access$000(ContentManagerImpl.java:137)

  at de.espirit.firstspirit.content.ContentManagerImpl$1.invoke(ContentManagerImpl.java:170)

  at de.espirit.firstspirit.content.ContentManagerImpl$1.invoke(ContentManagerImpl.java:167)

  at de.espirit.common.util.CachingFactory$ValueCreationStrategy$1.get(CachingFactory.java:51)

  at de.espirit.common.util.CachingFactory.get(CachingFactory.java:294)

  at de.espirit.firstspirit.content.ContentManagerImpl.getSessionHandler(ContentManagerImpl.java:868)

  at de.espirit.firstspirit.content.ContentManagerImpl.getLayerCaseMode(ContentManagerImpl.java:863)

  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

  at java.lang.reflect.Method.invoke(Method.java:498)

  at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:67)

  at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:139)

  at de.espirit.firstspirit.server.io.handler.ManagerCall.handle(ManagerCall.java:85)

  at de.espirit.firstspirit.server.io.MessageWorker.run(MessageWorker.java:49)

  at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:625)

  at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:590)

  at java.util.concurrent.FutureTask.run(FutureTask.java:266)

  at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:436)

  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

  at java.util.concurrent.FutureTask.run(FutureTask.java:266)

  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

  at java.lang.Thread.run(Thread.java:745)

  at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:56)

Caused by: oracle.net.ns.NetException: SO Exception was generated

  at oracle.net.resolver.AddrResolution.resolveAddrTree(AddrResolution.java:736)

  at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:477)

  at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:595)

  at oracle.net.ns.NSProtocol.connect(NSProtocol.java:230)

  at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1452)

  at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496)

  ... 36 more

INFO  31.07.2017 11:49:56.322 (de.espirit.or.impl.connection.DBConnectionManager): Created connection pool with 5 initial connections, maximum pool size is 9

Wir haben das FirstSpirit Logging auch mal auf DEBUG gestellt, leider bekommen wir da nicht mehr Informationen.

Evtl. liegt es noch an der Oracle Version, wir benutzen ja Oracle 12c und einen entsprechenden 12er JDBC Treiber.

Evtl. kann uns der Support weiterhelfen.

Danke nochmals und viele Grüße

Thomas

0 Kudos

Hallo Andreas,

nur eine kurze Rückmeldung. Die Verbindungsprobleme lagen an einer falsch konfigurierten tnsnames.ora. Der Vorschlag aus der Anleitung hat bei uns leider so nicht funktioniert. Wir haben jetzt verschiedene Varianten der Konfiguration einfach mit dem Oracle SQL Developer getestet.
Dort kann man die DB Verbindungen auch über eine tnsnames.ora einrichten (siehe auch Use tnsnames.ora in Oracle SQL Developer - Stack Overflow ) und schnell und einfach testen.

Danke und viele Grüße

Thomas

0 Kudos
aVogt
Returning Creator

Sorry, ich habe unsere Konfiguration mitgeschrieben. Bei uns funktioniert sie - die wurde von unseren Systemern so entwickelt. Wahrscheinlich haben wir wie an so vielen Stellen eine Sonderlocke.

Hauptsache es funktioniert jetzt.

Grüße

Andreas

0 Kudos

Hallo Andreas,

noch mal vielen Dank für die Anleitung und die Hilfe!

Viele Grüße

Thomas

0 Kudos