Источники необходимого программного обеспечения:
- 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.