Skip to Main Content

 

Auswahl  

Oracle ORDS (bis 21.1) Installation für APEX 

Oracle
APEX:ORDS
APEX 20.1
05.07.18 (MP)
12.07.23(MP)
ORDS, ords.war, APEX, Installation, Oracle REST Data Services

Passende Schulungen zum Thema

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.

Verzeichnisse des ORDS

2. Troubleshooting / Fehlerbehebung von ORDS-Problemen:

ORDS 404 Fehler

Der Klassiker ... ein "404 not Found"-Fehler. Wir schalten mal das Debugging ein (siehe oben) und starten Tomcat durch.

ORDS DEBUG 404

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;
USERNAMEACCOUNT_STATUSLOCK_DATE  
ANONYMOUSOPEN   
APEX_INSTANCE_ADMIN_USEREXPIRED   
APEX_LISTENEROPEN   
APEX_PUBLIC_USERLOCKED05.07.2018 07:46:00  
APEX_REST_PUBLIC_USEROPEN   
ORDSYSEXPIRED & LOCKED08.03.2017 17:06:16  
APEX_180100EXPIRED & LOCKED29.06.2018 06:25:44  
FLOWS_FILESEXPIRED & LOCKED29.06.2018 06:25:45  
ORDS_METADATAEXPIRED & LOCKED05.07.2018 06:20:06  
ORDS_PUBLIC_USEROPEN   
     

 

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.

APEX Fehlende Bilder

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:

APEX Fehler ohne CSS

Wenn dann aber die Bilder-/ CSS-/ Java-Script-Dateien an richtiger Stelle liegen, haben wir zur Belohnung die Anmeldemaske:

APEX Anmeldung

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_TYPEVALIDINVALID
INDEX750
JOB10
LOB30
PACKAGE120
PACKAGE BODY120
SEQUENCE10
SYNONYM140
TABLE270
TRIGGER260
TYPE190
TYPE BODY60
VIEW280



So, das war es mit einer Kurzübersicht :-) zur Installation und Troubleshooting. Weitere Tipps erhalten Sie in einem unserer beliebten APEX-Kurse.