Search the FirstSpirit Knowledge Base
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.
Wie ist denn der JDBC-Treiber in FirstSpirit eingebunden? Als Modul? Hat das Modul alle Rechte?
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!
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
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
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
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
Hallo Andreas,
noch mal vielen Dank für die Anleitung und die Hilfe!
Viele Grüße
Thomas