21.11.2019 10 min to read

Установка ORACLE APEX 19.2, ORACLE REST DATA SERVICES 19.2 с APACHE TOMCAT на ORACLE DB XE 18С

Category : Статьи

Источники необходимого программного обеспечения:

  • Oracle DB XE 18c (далее ORDBS)
    https://www.oracle.com/database/technologies/xe-downloads.html
  • ORDS Oracle REST Data Services 19.2 (далее ORDS)
    https://www.oracle.com/database/technologies/appdev/rest-data-services-v192-downloads.html
  • APEX 19.2 (далее APEX)
    https://www.oracle.com/tools/downloads/apex-downloads.html
  • RPM пакет для предварительно настройки операционной перед установкой базы данных
    https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
  • Java JDK
    https://www.oracle.com/technetwork/java/javase/downloads/jdk13-downloads-5672538.html

Настройка ОС после установки минимальна:

  • установка screen, midnight commander, bash-completion, yum-utils
  • отключение selinux и firewalld
  • настройка автоматического обновления времени
  • корректная настройка TCP/IP и DNS

Установка и настройка стека для разработки и публикации приложений проводится на ОС Oracle Linux 7.7, ядро UEK 4.14.35-1902.6.6.el7uek.x86_64. Установка производилась из минимального образа через сеть в среде виртуализации. Локаль при установке Ru, временной пояс Europe/Moscow

[root@vmhost02vm03 ~ ]# hostnamectl set-hostname oradb07
[root@oradb07 ~ ]# echo "10.0.77.40 oradb07" >> /etc/hosts
[root@oradb07 ~ ]# yum install oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm -y
[root@oradb07 ~ ]# /etc/init.d/oracle-database-preinstall-18c-firstboot start
[root@oradb07 ~ ]# yum install jdk-13.0.1_linux-x64_bin.rpm -y
[root@oradb07 ~ ]# yum install oracle-database-xe-18c-1.0-1.x86_64.rpm -y

Запустить первичную настройку СУБД

[root@oradb07 ~ ]# systemctl enable oracle-xe-18c
[root@oradb07 ~ ]# /etc/init.d/oracle-xe-18c configure
Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts: DB_PA$$W0RD
Confirm the password: DB_PA$$W0RD
Configuring Oracle Listener.
Listener configuration succeeded.
Configuring Oracle Database XE.
Enter SYS user password:
Enter SYSTEM user password:
Enter PDBADMIN User Password:
Prepare for db operation
7% complete
Copying database files
29% complete
Creating and starting Oracle instance
34% complete
50% complete
Creating Pluggable Databases
54% complete
71% complete
Executing Post Configuration Actions
93% complete
Running Custom Scripts
100% complete
Database creation complete. For details check the logfiles at:
/opt/oracle/cfgtoollogs/dbca/XE.
Database Information:
Global Database Name:XE
System Identifier(SID):XE
Look at the log file “/opt/oracle/cfgtoollogs/dbca/XE/XE.log” for further details.
Connect to Oracle Database using one of the connect strings:
Pluggable database: oradb07/XEPDB1
Multitenant container database: oradb07
Use https://localhost:5500/em to access Oracle Enterprise Manager for Oracle Database XE

ORDS по умолчанию будет устанавливаться в CDB, а APEX в подключенную в сеансе PDB. Что бы ORDS установился в туже PDB что и APEX настраиваем tnsnames.

PDB созданная по-умолчанию называется XEPDB1

XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradb07)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
LISTENER_XE =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradb07)(PORT = 1521))

добавить сервис подключаемой базы oradb07/XDB1

PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradb07)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XEPDB1)
)
)

Переменные окружения установим сразу для всех пользователей, поскольку сервер выделенный для стека приложений Oracle и контрольный перезапуск

[root@oradb07 ~ ]# vi /etc/profile.d/ora.sh

#### oraenv
export HOSTNAME=oradb07
export LD_LIBRARY_PATH=/opt/oracle/product/18c/dbhomeXE/lib
export ORACLE_SID=XE
export ORACLE_BASE=/opt/oracle/
exportPATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/oracle/product/18c/dbhomeXE/bin
export ORAENV_ASK=NO
export ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE
export NLS_LANG=RUSSIAN_RUSSIA.UTF8
export NLS_DATE_LANGUAGE=RUSSIAN
export NLS_SORT=RUSSIAN
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
####

[root@oradb07 ~ ]# chmod a+x /etc/profile.d/ora.sh

[root@oradb07 ~ ]# reboot

После перезагрузки проверяем доступность сервиса, если все ок, продолжаем. Если сложности с запуском СУБД, устранить причины.   В архиве с дистрибутивом ORDS нет каталога, создать и распаковать в каталог

[root@oradb07 ~ ]# mkdir /opt/oracle/ords
[root@oradb07 ~ ]# unzip /root/ords-19.2.0.199.1647.zip -d /opt/oracle/ords/

В архиве с дистрибутивом APEX есть каталог apex

[root@oradb07 ~ ]# unzip /root/apex_19.2.zip -d /opt/oracle/
[root@oradb07 ~ ]# chown -R oracle:oinstall /opt/oracle/apex/
[root@oradb07 ~ ]# chown -R oracle:oinstall /opt/oracle/ords/

Переходим в каталог с распакованным APEX, убеждаемся в наличии скриптов и подключаемся к базе данных. Важно: подключаемся к PDB согласно настроенному сервису в tnsnames. В CDB установка APEX не производится.

[root@oradb07 ~ ]# cd /opt/oracle/apex
[root@oradb07 ~ ]# sqlplus sys@pdb1 as sysdba

@apexins.sql SYSAUX SYSAUX TEMP /i/

— большой листинг выполнения скриптов
—
Ошибок нет.
… wwv_flow_issue_int
Ошибок нет.
таймер для: Installing Package Bodies (Dev)
Затрач.время: 00:00:04.36
#
Recompiling APEX_190200
#
Thank you for installing Oracle Application Express 19.2.0.00.18
Oracle Application Express is installed in the APEX_190200 schema.
The structure of the link to the Application Express administration services is as follows:
http://host:port/pls/apex/apex_admin (Oracle HTTP Server with mod_plsql)
http://host:port/apex/apex_admin (Oracle XML DB HTTP listener with the embedded PL/SQL gateway)
http://host:port/apex/apex_admin (Oracle REST Data Services)
The structure of the link to the Application Express development interface is as follows:
http://host:port/pls/apex (Oracle HTTP Server with mod_plsql)
http://host:port/apex (Oracle XML DB HTTP listener with the embedded PL/SQL gateway)
http://host:port/apex (Oracle REST Data Services)
таймер для: Phase 3 (Switch)
Затрач.время: 00:00:07.89
таймер для: Complete Installation
Затрач.время: 00:05:36.67
Процедура PL/SQL успешно завершена.
Выбрано строк: 1.
…null1.sql

Создание пользователя с правами администратора экземпляра (instance) APEX, или изменение его пароля. Пароль обязательно должен содержать символы в разных регистрах, цифры и спецсимволы.

@apxchpwd.sql

…set_appun.sql
This script can be used to change the password of an Application Express
instance administrator. If the user does not yet exist, a user record will be
created.
Enter the administrator’s username [ADMIN] (создается пользователь экземпляра APEX и его пароль – APEX_PA$$W0RD )
User “ADMIN” does not yet exist and will be created.
Enter ADMIN’s email [ADMIN] sp@mail.tld
Enter ADMIN’s password [] apexAdminPass
Created instance administrator ADMIN.

Создание или смена пароля служебных пользователей ORDS

@apex_rest_config.sql

Enter a password for the APEX_LISTENER user [] APEX_PA$$W0RD
Enter a password for the APEX_REST_PUBLIC_USER user [] APEX_PA$$W0RD
…set_appun.sql
…create APEX_LISTENER and APEX_REST_PUBLIC_USER users Пользователь изменен.

Отключение встроенного веб сервера.

exec dbms_xdb.sethttpport(0);

Процедура PL/SQL успешно завершена.

exec dbms_xdb.setftpport(0);

Процедура PL/SQL успешно завершена.

Выдаем права схемы:

begin
dbms_network_acl_admin.append_host_ace(
host => ‘*’,
ace => xs$ace_type(
privilege_list => xs$name_list(‘connect’),
principal_name => ‘APEX_190200’,
principal_type => xs_acl.ptype_db))
;
end;
/

Процедура PL/SQL успешно завершена.

ORDS будет работать в Tomcat и публиковаться через apache2. Копируем каталог images с файлами APEX в корневой каталог apache2.

[root@oradb07 ~ ]# yum install httpd tomcat -y
[root@oradb07 ~ ]# yum install httpd tomcat -y
[root@oradb07 ~ ]# mkdir -p /var/www/apex/images
[root@oradb07 ~ ]# cp -a /opt/oracle/apex/images/. /var/www/apex/images
[root@oradb07 ~ ]# chown -R tomcat:tomcat /var/www/apex/images/

Начинаем установку ORDS. Важно верно указать пароли пользователей APEX_LISTENER, APEX_REST_PUBLIC_USER созданных при установке APEX, установить и не забыть пароль пользователя ORDS_PUBLIC_USER.  После удачной установки, ORDS предложит запуститься в режиме standalone нужно будет указать путь к каталогу с статическими файлами APEX, указывать нужно сразу на копию каталога /var/www/apex/images

[root@oradb07 ~ ]# cd /opt/oracle/ords
[root@oradb07 ords]# java -jar ./ords.war install advanced
Enter the location to store configuration data: config
Enter the name of the database server [localhost]:oradb07
Enter the database listen port [1521]:
Enter 1 to specify the database service name, or 2 to specify the database SID [1]:1
Enter the database service name [XEPDB1]:
Enter 1 if you want to verify/install Oracle REST Data Services schema or 2 to skip this step [1]:
Enter the database password for ORDS_PUBLIC_USER:
Confirm password:
Requires to login with administrator privileges to verify Oracle REST Data Services schema.

Enter the administrator username:sys
Enter the database password for SYS AS SYSDBA:
Confirm password:

Retrieving information.
Enter the default tablespace for ORDS_METADATA [SYSAUX]:
Enter the temporary tablespace for ORDS_METADATA [TEMP]:
Enter the default tablespace for ORDS_PUBLIC_USER [USERS]:
Enter the temporary tablespace for ORDS_PUBLIC_USER [TEMP]:
Enter 1 if you want to use PL/SQL Gateway or 2 to skip this step.
If using Oracle Application Express or migrating from mod_plsql then you must enter 1 [1]:
Enter the PL/SQL Gateway database user name [APEX_PUBLIC_USER]:
Enter the database password for APEX_PUBLIC_USER:
Confirm password:
Enter 1 to specify passwords for Application Express RESTful Services database users (APEX_LISTENER, APEX_REST_PUBLIC_USER) or 2 to skip this step [1]:
Enter the database password for APEX_LISTENER:
Confirm password:
Enter the database password for APEX_REST_PUBLIC_USER:
Confirm password:
нояб. 07, 2019 12:17:15 AM

INFO: reloaded pools: []
Installing Oracle REST Data Services version 19.2.0.r1991647
… Log file written to /root/ords_install_core_2019-11-07_001715_00368.log
Warning: Nashorn engine is planned to be removed from a future JDK release
… Verified database prerequisites
… Created Oracle REST Data Services proxy user
… Created Oracle REST Data Services schema
… Granted privileges to Oracle REST Data Services
… Created Oracle REST Data Services database objects
… Log file written to /root/ords_install_datamodel_2019-11-07_001725_00552.log
… Log file written to /root/ords_install_apex_2019-11-07_001726_00407.log
Completed installation for Oracle REST Data Services version 19.2.0.r1991647. Elapsed time: 00:00:12.51

Enter 1 if you wish to start in standalone mode or 2 to exit [1]:1
Enter the APEX static resources location [/var/www/apex/images/]:
Enter 1 if using HTTP or 2 if using HTTPS [1]:1
Enter the HTTP port [8080]:
2019-11-07 00:17:44.252:INFO::main: Logging initialized @307460ms to org.eclipse.jetty.util.log.StdErrLog
нояб. 07, 2019 12:17:44 AM
INFO: HTTP and HTTP/2 cleartext listening on port: 8080
нояб. 07, 2019 12:17:44 AM
INFO: Disabling document root because the specified folder does not exist: /opt/oracle/ords/config/ords/standalone/doc_root
2019-11-07 00:17:44.561:INFO:oejs.Server:main: jetty-9.4.z-SNAPSHOT; built: 2019-05-02T09:46:34.874Z; git: 14f32d50076f2b706f41a33066eb364d8492e199; jvm 13.0.1+9
2019-11-07 00:17:44.584:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
2019-11-07 00:17:44.584:INFO:oejs.session:main: No SessionScavenger set, using defaults
2019-11-07 00:17:44.585:INFO:oejs.session:main: node0 Scavenging every 600000ms
нояб. 07, 2019 12:17:44 AM
INFO: Configuration properties for: |apex||
db.hostname=oradb07
db.password=******
db.port=1521
db.servicename=XEPDB1
db.username=APEX_PUBLIC_USER
resource.templates.enabled=true
security.requestValidationFunction=wwv_flow_epg_include_modules.authorize
security.validationFunctionType=plsql

нояб. 07, 2019 12:17:44 AM
WARNING: *** jdbc.MaxLimit in configuration |apex|| is using a value of 10, this setting may not be sized adequately for a production environment ***
нояб. 07, 2019 12:17:44 AM
WARNING: *** jdbc.InitialLimit in configuration |apex|| is using a value of 3, this setting may not be sized adequately for a production environment ***
нояб. 07, 2019 12:17:45 AM
INFO: Configuration properties for: |apex|pu|
db.hostname=oradb07
db.password=******
db.port=1521
db.servicename=XEPDB1
db.username=ORDS_PUBLIC_USER
resource.templates.enabled=true
security.requestValidationFunction=wwv_flow_epg_include_modules.authorize
security.validationFunctionType=plsql

нояб. 07, 2019 12:17:45 AM
WARNING: *** jdbc.MaxLimit in configuration |apex|pu| is using a value of 10, this setting may not be sized adequately for a production environment ***
нояб. 07, 2019 12:17:45 AM
WARNING: *** jdbc.InitialLimit in configuration |apex|pu| is using a value of 3, this setting may not be sized adequately for a production environment ***
нояб. 07, 2019 12:17:45 AM
INFO: Configuration properties for: |apex|al|
db.hostname=oradb07
db.password=******
db.port=1521
db.servicename=XEPDB1
db.username=APEX_LISTENER
resource.templates.enabled=true
security.requestValidationFunction=wwv_flow_epg_include_modules.authorize
security.validationFunctionType=plsql

нояб. 07, 2019 12:17:45 AM
WARNING: *** jdbc.MaxLimit in configuration |apex|al| is using a value of 10, this setting may not be sized adequately for a production environment ***
нояб. 07, 2019 12:17:45 AM
WARNING: *** jdbc.InitialLimit in configuration |apex|al| is using a value of 3, this setting may not be sized adequately for a production environment ***
нояб. 07, 2019 12:17:45 AM
INFO: Configuration properties for: |apex|rt|
db.hostname=oradb07
db.password=******
db.port=1521
db.servicename=XEPDB1
db.username=APEX_REST_PUBLIC_USER
resource.templates.enabled=true
security.requestValidationFunction=wwv_flow_epg_include_modules.authorize
security.validationFunctionType=plsql

нояб. 07, 2019 12:17:45 AM
WARNING: *** jdbc.MaxLimit in configuration |apex|rt| is using a value of 10, this setting may not be sized adequately for a production environment ***
нояб. 07, 2019 12:17:45 AM
WARNING: *** jdbc.InitialLimit in configuration |apex|rt| is using a value of 3, this setting may not be sized adequately for a production environment ***
нояб. 07, 2019 12:17:45 AM
INFO: Oracle REST Data Services initialized
Oracle REST Data Services version : 19.2.0.r1991647
Oracle REST Data Services server info: jetty/9.4.z-SNAPSHOT

2019-11-07 00:17:45.878:INFO:oejsh.ContextHandler:main: Started o.e.j.s.ServletContextHandler@34997338{/ords,null,AVAILABLE}
2019-11-07 00:17:45.879:INFO:oejsh.ContextHandler:main: Started o.e.j.s.h.ContextHandler@27305e6{/i,null,AVAILABLE}
2019-11-07 00:17:45.885:INFO:oejs.AbstractConnector:main: Started ServerConnector@58f174d9{HTTP/1.1,[http/1.1, h2c]}{0.0.0.0:8080}
2019-11-07 00:17:45.886:INFO:oejs.Server:main: Started @309094ms
Enter 1 if you wish to start in standalone mode or 2 to exit [1]:
Enter the APEX static resources location:/var/www/apex/images/

ОДНАКО. После установки и запуска ничего не заработает. Необходимо разблокировать пользователей, выдать права на схему. Пример переустановки паролей привожу на всякий случай.   ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK;

ALTER USER APEX_REST_PUBLIC_USER ACCOUNT UNLOCK;
ALTER USER APEX_LISTENER ACCOUNT UNLOCK;
ALTER USER ORDS_PUBLIC_USER ACCOUNT UNLOCK;
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY “APEX_PA$$W0RD”;
ALTER USER APEX_LISTENER IDENTIFIED BY “APEX_PA$$W0RD”;
ALTER USER APEX_REST_PUBLIC_USER IDENTIFIED BY “APEX_PA$$W0RD”;
ALTER USER ORDS_PUBLIC_USER IDENTIFIED BY “ORDS_PA$$W0RD”;
ALTER USER APEX_REST_PUBLIC_USER GRANT CONNECT THROUGH ORDS_PUBLIC_USER;
ALTER USER APEX_PUBLIC_USER GRANT CONNECT THROUGH ORDS_PUBLIC_USER;
ALTER USER APEX_LISTENER GRANT CONNECT THROUGH ORDS_PUBLIC_USER;

Добавляем автозагрузку tomcat и httpd

[root@oradb07 ords ]# systemctl enable tomcat
[root@oradb07 ords ]# systemctl enable httpd
[root@oradb07 ords ]# systemctl stop tomcat

Добавим в настройки httpd виртуалхоста по-умолчанию проексирование запросов к tomcat

[root@oradb07 ~ ]# vim //etc/httpd/conf.d/ordc.conf   
Alias “/i” “/var/www/apex/images/”
ProxyRequests off

ProxyPass “ajp://localhost:8009/ords”
ProxyPassReverse “ajp://localhost:8009/ords”

Перенести в каталог сервелатов приложение ORDS, перезапустить tomcat и контрольный перезапуск сервера, что бы проверить самостоятельную загрузку всех компонентов.

[root@oradb07 ords ]# cp ords.war /usr/share/tomcat/webapps/

[root@oradb07 ~ ]# systemctl start tomcat

[root@oradb07 ~ ]# reboot

После перезагрузки сервис доступен по адресу:

http://10.0.77.40/ords

Дополнительно.

Каталог с конфигурационными файлами ORDS может быть размещен где угодно. При его перемещении необходимо от имени пользователя oracle произвести перенастройку. Перейти в каталог с работающим ords.war, выключить tomcat и выполнить

java -jar ords.war configdir /opt/ordsnew/config/

В каталоге /opt/ordsnew/config/ хранятся каталоги с конфигурациями для различных инстансов ords. То есть в каталоге сервелатов Tomcat может быть необходимое количество копий ords.war  с различными именами, например ords01.war ords02.war ords03.war, в каталоге /opt/ordsnew/config/ должны быть созданы подкаталоги с конфигурациями /opt/ordsnew/config/ords01 /opt/ordsnew/config/ords02 /opt/ordsnew/config/ords03.

java -jar ordsfa.war -help Общая справка

java -jar ords.war help configdir Справка по каталогу конфигураций

При невероятных событиях и неудачах запуска стека. Стоит сверить, поменять пароли и разблокировать пользователей APEX_LISTENER, APEX_REST_PUBLIC_USER, APEX_PUBLIC_USER. Для этого при выключенном Tomcat заменить хэши паролей на правильные установленные заново пароли, вставить открытым текстом в файлах apex_al.xml  apex_rt.xml  apex.xml, при запуске Tomcat ords их зашифрует самостоятельно.

Запуск разноименных ords.war в Tomcat и простая ассоциация их с различными каталогами конфигураций позволяет запускать на одном сервере различные версии APEX и ORDS в различных PDB.