Nachdem wir in den letzten Jahren schon viele Male den Ords installiert haben und in diverse Probleme gelaufen sind, wird es Zeit hier mal etwas Licht ins Dunkel zu bekommen... :-)
1. Wie installiert man die Java-Applikation "ords.war"?
Zuerst muss wie immer die neueste Version heruntergeladen werden.
Idealerweise hat man bereits eine JDK Version 1.8 (wir hatten mit 1.9 und ords 18.1 ein paar Probleme...) installiert.
Vorbereitung: Wir richten ein config-Verzeichnis für die folgende Installation ein:
Windows:
java -jar ords.war configdir c:\app\oracle
Linux:
java -jar ords.war configdir /opt/oracle
Achtung: Dann wird dort bei der Installation ein Verzeichnis "ords/" angelegt mit folgendem Inhalt:
- conf (Verzeichnis)
- defaults.xml
Die Datei "defaults.xml" besteht z.B. aus folgenden Zeilen:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Saved on Thu Jul 05 06:20:04 CEST 2018</comment>
<entry key="cache.caching">false</entry>
<entry key="cache.directory">/tmp/apex/cache</entry>
<entry key="cache.duration">days</entry>
<entry key="cache.expiration">7</entry>
<entry key="cache.maxEntries">500</entry>
<entry key="cache.monitorInterval">60</entry>
<entry key="cache.procedureNameList"/>
<entry key="cache.type">lru</entry>
<entry key="db.hostname">localhost</entry>
<entry key="db.port">1521</entry>
<entry key="db.servicename">o12c2</entry>
<entry key="debug.debugger">false</entry>
<entry key="debug.printDebugToScreen">false</entry>
<entry key="error.keepErrorMessages">true</entry>
<entry key="error.maxEntries">50</entry>
<entry key="jdbc.DriverType">thin</entry>
<entry key="jdbc.InactivityTimeout">1800</entry>
<entry key="jdbc.InitialLimit">3</entry>
<entry key="jdbc.MaxConnectionReuseCount">1000</entry>
<entry key="jdbc.MaxLimit">10</entry>
<entry key="jdbc.MaxStatementsLimit">10</entry>
<entry key="jdbc.MinLimit">1</entry>
<entry key="jdbc.statementTimeout">900</entry>
<entry key="log.logging">false</entry>
<entry key="log.maxEntries">50</entry>
<entry key="misc.compress"/>
<entry key="misc.defaultPage">apex</entry>
<entry key="security.disableDefaultExclusionList">false</entry>
<entry key="security.maxEntries">2000</entry>
<entry key="security.requestValidationFunction">wwv_flow_epg_include_modules.authorize</entry>
<entry key="security.validationFunctionType">plsql</entry>
</properties>
Falls Sie https einsetzen und beim Aufruf einer Seite in Google Chrome erhalten Sie die Fehlermeldung:
The Request cannot be processed because this resource doest not support Cross Origin Sharing request...
Dafür gibt es auch ein MOS Doc:
403 Forbidden Error" When Trying To Access The Apex Application Configured with ORDS 3.0.4 Or Higher Using the Google Chrome Browser
(Doc ID 2139195.1)
dann sollten Sie als Lösung zusätzlich noch folgenden Parameter in die Datei defaults.xml eintragen:
<entry key="security.forceHTTPS">true</entry>
Interessant sind in der Datei die folgenden Parameter für das Debugging (bitte ggf. von "false" auf "true" setzen):
<entry key="debug.debugger">true</entry>
<entry key="debug.printDebugToScreen">true</entry>
Mögliche Parameter (Auswahl) beim Aufruf von "ords.war":
Hilfe ausgeben:
java -jar ords.war help
Config Verzeichnis vorab angeben:
java -jar ords.war configdir <path>
Oracle Rest Data Service installieren:
java -jar ords.war install
Hinweis: Wenn Sie schon ein erfolglose Installation hinter sich haben, oder eine neue ORDS Version installieren, empfihelt es sich unserer Erfahrung nach, zuvor die alte Version zu deinstallieren:
java -jar ords.war uninstall
Datenbank Verbinding einrichten:
java -jar ords.war setup
ORDS_METADATA,, Proxy Benutzer und zugehörige Objekte wieder deinstallieren:
java -jar ords.war uninstall
ORDS Konfiguration prüfen:
java -jar ords.war validate
Kommen wir zur Installation von ORDS:
Folgende Vorüberlegungen / Vorbereitungen sollten Sie machen:
1. Welche Datenbank soll am Applicationserver (Tomcat) angebunden werden (Hostname/IP, Portnummer, Instanzname)?
2. Welche Passwörter möchten Sie verwenden für die Benutzer APEX_PUBLIC_USER, APEX LISTENER, APEX_REST_PUBLIC_USER)?
Hinweis: Ein bereits vorhandener APEX_PUBLIC_USER berkommt nur ein neues Passwort, wird aber nicht automatisch entsperrt!
java -jar ords.war
Name des Datenbankservers eingeben [localhost]:
Listener-Port der Datenbank eingeben [1521]:
1 eingeben, um den Servicenamen der Datenbank anzugeben, oder 2, um die Datenbank-SID anzugeben [1]:
Datenbankservicename eingeben:o12c2
Datenbankkennwort für ORDS_PUBLIC_USER eingeben:***
Kennwort bestätigen:***
Erfordert SYS AS SYSDBA, um das Oracle REST Data Services-Schema zu verifizieren.
Datenbankkennwort für SYS AS SYSDBA eingeben:***
Kennwort bestätigen:***
Informationen werden abgerufen.
Geben Sie 1 ein, wenn Sie das PL/SQL-Gateway verwenden möchten, oder 2, um diesen Schritt zu überspringen.
Wenn Sie Oracle Application Express verwenden oder eine Migration von mod_plsql durchführen, müssen Sie 1 eingeben [1]:
Datenbankkennwort für APEX_PUBLIC_USER eingeben:***
Kennwort bestätigen:***
Geben Sie 1 ein, um Kennwörter für Application Express RESTful Services-Datenbankbenutzer anzugeben (APEX_LISTENER, APEX_REST_PUBLIC_USER), oder 2, um diesen Schritt zu überspringen [1]:
Datenbankkennwort für APEX_LISTENER eingeben:***
Kennwort bestätigen:***
Datenbankkennwort für APEX_REST_PUBLIC_USER eingeben:***
Kennwort bestätigen:***
Jul 05, 2018 6:20:04 AM
INFORMATION: Updated configurations: defaults, apex, apex_pu, apex_al, apex_rt
Oracle REST Data Services Version 18.2.0.r1831332 wird installiert
... Logdatei in C:\Users\vaiomarco\ords_install_core_2018-07-05_062004_00605.log geschrieben
... Datenbankvoraussetzungen wurden verifiziert
... Oracle REST Data Services-Schema wurde erstellt
... Oracle REST Data Services-Proxybenutzer wurde erstellt
... Berechtigungen für Oracle REST Data Services wurden erteilt
... Oracle REST Data Services-Datenbankobjekte wurden erstellt
... Logdatei in C:\Users\vaiomarco\ords_install_datamodel_2018-07-05_062017_00179.log geschrieben
... Logdatei in C:\Users\vaiomarco\ords_install_apex_2018-07-05_062019_00485.log geschrieben
Installation für Oracle REST Data Services Version 18.2.0.r1831332 wurde abgeschlossen. Verstrichene Zeit: 00:00:17.460
Nun wurde die "ords.war" Datei konfiguriert und muss MANUELL in folgendes Verzeichnis kopiert werden:
Windows:
C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps
Linux:
/opt/tomcat*/webapps
Wenn Sie den Applicationserver (Tomcat) durchgestartet haben, sollte er aus dem "ords.war" einen Ordner "ords" mit einigen Unterordnern angelegt haben.
2. Troubleshooting / Fehlerbehebung von ORDS-Problemen:
Der Klassiker ... ein "404 not Found"-Fehler. Wir schalten mal das Debugging ein (siehe oben) und starten Tomcat durch.
Na, das ist doch gleich viel besser :-) "Could not find any dispatcher to handle request..." heisst also u.a. APEX_PUBLIC_USER Account ist nicht offen:
Wir prüfen das Mal:
SELECTusername,account_status,lock_date from dba_users
WHERE username like 'APEX%'
OR username like 'ORDS%'
OR username like 'FLOWS%'
OR username ='ANONYMOUS'
order by 1;
USERNAME | ACCOUNT_STATUS | LOCK_DATE | | |
---|
ANONYMOUS | OPEN | | | |
APEX_INSTANCE_ADMIN_USER | EXPIRED | | | |
APEX_LISTENER | OPEN | | | |
APEX_PUBLIC_USER | LOCKED | 05.07.2018 07:46:00 | | |
APEX_REST_PUBLIC_USER | OPEN | | | |
ORDSYS | EXPIRED & LOCKED | 08.03.2017 17:06:16 | | |
APEX_180100 | EXPIRED & LOCKED | 29.06.2018 06:25:44 | | |
FLOWS_FILES | EXPIRED & LOCKED | 29.06.2018 06:25:45 | | |
ORDS_METADATA | EXPIRED & LOCKED | 05.07.2018 06:20:06 | | |
ORDS_PUBLIC_USER | OPEN | | | |
| | | | |
Na da haben wir ja den Schuldigen: APEX_PUBLIC_USER ist gesperrt.
ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK;
Vergessen Sie nicht nach jeder Änderung, den Applicationserver (Tomcat) durchzustarten!
2. Problem: Die Bilder-/ CSS-/ Java-Script-Dateien fehlen, oder liegen im falschen Verzeichnis.
Prüfen Sie bitte, ob ein Ordner mit Namen "i" im Verzeichnis .. tomcat/WebApps/ROOT liegt, ansonsten könnte die Seite (weil die CSS-Dateien nicht geladen werden) so aussehen:
Wenn dann aber die Bilder-/ CSS-/ Java-Script-Dateien an richtiger Stelle liegen, haben wir zur Belohnung die Anmeldemaske:
3. Es kommt die Fehlermeldung, dass die Version der Bilder, nicht zur Version von APEX passt.
Da muss einfach der Browser Cache geleert werden.
4. Die "ords.war"-Datei funktioniert in Verbindung mit Tomcat einfach nicht:
Prüfen Sie die Konsistenz der Datei mit:
java -jar ords.war validate
Dann sollte folgende Ausgabe erscheinen:
Name des Datenbankservers eingeben [localhost]:
Listener-Port der Datenbank eingeben [1521]:
Datenbankservicename eingeben [o12c2]:
Erfordert SYS AS SYSDBA, um das Oracle REST Data Services-Schema zu verifizieren.
Datenbankkennwort für SYS AS SYSDBA eingeben:
Kennwort bestätigen:
Informationen werden abgerufen.
Retrieving information.
Oracle REST Data Services will be validated.
Validating Oracle REST Data Services schema version 18.4.0.r3541002
... Log file written to /root/ords_validate_core_2019-01-16_133103_00877.log
Completed validating Oracle REST Data Services version 18.4.0.r3541002. Elapsed time: 00:00:04.798
Sie können natürlich auch noch die dazugehörige Log-Datei analysieren. Da sollte dann z.B. u.a. folgendes zu finden sein:
INFO: 08:27:22 Validating objects for Oracle REST Data Services.
VALIDATION: 08:27:22 Starting validation for schema: ORDS_METADATA
VALIDATION: 08:27:22 Validating objects
VALIDATION: 08:27:23 Validating ORDS Public Synonyms
VALIDATION: 08:27:24 Total objects: 259, invalid objects: 0
VALIDATION: 08:27:24 72 INDEX
VALIDATION: 08:27:24 1 JOB
VALIDATION: 08:27:24 11 PACKAGE
VALIDATION: 08:27:24 11 PACKAGE BODY
VALIDATION: 08:27:24 43 PUBLIC SYNONYM
VALIDATION: 08:27:24 1 SEQUENCE
VALIDATION: 08:27:24 14 SYNONYM
VALIDATION: 08:27:24 27 TABLE
VALIDATION: 08:27:24 26 TRIGGER
VALIDATION: 08:27:24 19 TYPE
VALIDATION: 08:27:24 6 TYPE BODY
VALIDATION: 08:27:24 28 VIEW
VALIDATION: 08:27:24 Validation completed.
INFO: 08:27:24 Completed validating objects for Oracle REST Data Services.
Zu guter letzt: Ein Problem, was mir vier Wochen Suche beschert hat. Wir hatten bei der Installation von ORDS immer das Problem, dass sich die Installation an einer Stelle aufgehängt hatte. Sie hing ca. 15 min und stüzte dann ab mit " IO Error: Connection reset by Peer".
Das Problem war, dass Java auf unserem System (CentOS 7) mit "/dev/random" nicht genügend viele Zufallszahlen berechnen konnte und stattdessen "/dev/urandom" nehmen musste.
Dazu müssen Sie bei der Installation folgendes zuätzlich angeben:
java -Djava.security.egd=file:///dev/urandom -jar ords.war
Allerdings kann man auch dem Pool der Zufallszahlen von "/dev/random" etwas mehr Entropie verleihen und daher weiterhin "/dev/random" nutzen. Dazu installiert man sich ein entsprechendes Tool:
yum install haveged
systemctl enable haveged; systemctl start haveged;
5. Eine ominöse CSS Datei wird nicht gefunden z.B. 56437564376.css
Hier war eine fehlerhafte ords Installation Schuld, es fehlte die Datei apex_rt.xml
Prüfen Sie nach der Installation, ob die folgenden Dateien im angegebenen Config Verzeichnis liegen:
drwxr-xr-x 2 tomcat tomcat 4096 Jan 16 13:16 conf
-rw-r--r-- 1 tomcat tomcat 478 Jan 16 13:16 defaults.xml
und im conf Unterordner:
-rw-r--r-- 1 tomcat tomcat 357 Jan 16 13:16 apex_al.xml
-rw-r--r-- 1 tomcat tomcat 360 Jan 16 13:16 apex_pu.xml
-rw-r--r-- 1 tomcat tomcat 365 Jan 16 13:16 apex_rt.xml
-rw-r--r-- 1 tomcat tomcat 360 Jan 16 13:16 apex.xml
Die apex_rt.xml datei sieht z.B. so aus:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Saved on Wed Jan 16 09:37:29 CET 2019</comment>
<entry key="db.password">@0529A217A76655C4328127B3215A50F0D1EF46AB65FEB176BE9E0220</entry>
<entry key="db.username">APEX_REST_PUBLIC_USER</entry>
</properties>
Fehlerhafte / fehlende Dateien weden auch in der log Datei catalina.out angezeigt:
Caused by: oracle.dbtools.url.mapping.TargetNotAvailableException: The connection pool named: apex_rt does not exist
at oracle.dbtools.url.mapping.db.PoolInjector.inject(PoolInjector.java:60)
at oracle.dbtools.url.mapping.db.DatabaseURLMappingImpl.addServices(DatabaseURLMappingImpl.java:311)
at oracle.dbtools.url.mapping.URLMappingBase.doFilter(URLMappingBase.java:80)
Kürzlich hatten wir einen neuen Fehler, der stellte sich wie folgt da:
Eine CSS Datei des Theme Rollers konnte auf einem Server teilweise nicht mehr gefunden werden. Teilweise ist immer spannend ...
Ein Blick in die catalina.out brachte etwas Licht ins Dunkel: Einige ORDS_METADATA Views waren invalid- Bei genauerer Betrachtung der Views, stellte sich heraus, dass die dazu passenden Tabellen gar nicht (mehr) da waren.
Nur wo werden diese angelegt. Nach einiger Suche habe ich beim Auspacken des ords.war Files die Datei ords_database.objects.sql im Ordner scripts/install/core gefunden.
Nachdem das Skript nochmal installiert wurde (bitte im Schema ORDS_METADATA) lief wieder alles perfekt.
Sicherheitshalber kann man natürlich einen Zusatzcheck durchführen (hoer mir ORDS Version 19.2 (Stand 26.09.2019))
select object_type,count(valid),count(invalid) from (
select object_type,
CASE WHEN status='VALID' THEN 1 END as valid,
CASE WHEN status<>'VALID' THEN 1 END as invalid
from dba_objects
where owner='ORDS_METADATA')
group by Object_type
order by 1;
Das Ergebnis sollte dann so aussehen:
OBJECT_TYPE | VALID | INVALID |
INDEX | 75 | 0 |
JOB | 1 | 0 |
LOB | 3 | 0 |
PACKAGE | 12 | 0 |
PACKAGE BODY | 12 | 0 |
SEQUENCE | 1 | 0 |
SYNONYM | 14 | 0 |
TABLE | 27 | 0 |
TRIGGER | 26 | 0 |
TYPE | 19 | 0 |
TYPE BODY | 6 | 0 |
VIEW | 28 | 0 |
So, das war es mit einer Kurzübersicht :-) zur Installation und Troubleshooting. Weitere Tipps erhalten Sie in einem unserer beliebten APEX-Kurse.