본문 바로가기

Database/Oracle Database

Oracle Application Express 개요 & 샘플 - 2. APEX/ORDS 설치

이전 글: 2022.04.18 - [Database/Oracle Database] - Oracle Application Express 개요 & 샘플 - 1. APEX 개요

APEX/ORDS 설치

APEX 설치

APEX 개발 환경을 만드는 것은 아래 세가지 방법이 있습니다.

·        Oracle Cloud Infrastructure (OCI)의 APEX Application Development 서비스 생성

·        apex.oracle.com에 호스팅된 APEX 워크스페이스를 생성

·        APEX를 로컬 호스트에 다운로드 및 설치

여기에서는 세번째 방법인 데이터베이스가 설치된 로컬 호스트에 APEX를 다운로드 받아 설치하는 방법을 이용했습니다. 테스트를 위해 오라클 데이터베이스 21c (멀티테넌트, SID: ORCLCDB)를 미리 설치했습니다. 그리고 ORDS는 Standalone 모드로 설치합니다.

최신 APEX 설치 파일은 아래 링크를 통해 다운로드 받을 수 있습니다.

https://download.oracle.com/otn_software/apex/apex-latest.zip

설치 파일을 다운로드 받고 APEX 설치 디렉토리를 생성한 다음, 해당 디렉토리로 압축을 해제합니다.

[oracle@apex ~]$ whoami
oracle
[oracle@apex ~]$ wget https://download.oracle.com/otn_software/apex/apex-latest.zip
...
2022-03-18 08:26:04 (170 MB/s) - ‘apex-latest.zip’ saved [232279928/232279928]
...
[oracle@apex ~]$ mkdir -p /opt/oracle/apex
[oracle@apex ~]$ unzip ./apex-latest.zip -d /opt/oracle/
Archive:  ./apex-latest.zip
...
inflating: /opt/oracle/apex/apexins_cdb.sql
[oracle@apex ~]$

 

sys 유저로 설치 스크립트 apexins.sql을 실행합니다. 이때 데이터베이스는 Pluggable 데이터베이스 (여기에서는 ORCLPDB1)입니다.

[oracle@apex ~]$ cd /opt/oracle/apex/
[oracle@apex apex]$ sqlplus sys@orclpdb1 as sysdba
...
Enter password:
...
SQL> @apexins.sql SYSAUX SYSAUX TEMP /i/
...set_appun.sql
...
timing for: Complete Installation
Elapsed: 00:03:52.30
SYS>

 

이후 APEX 접속에서 사용할 ADMIN 유저 패스워드 설정합니다. Workspace 이름은 “INTERNAL”입니다.

SYS> @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]
User "ADMIN" does not yet exist and will be created.
Enter ADMIN's email [ADMIN]
Enter ADMIN's password []
Created instance administrator ADMIN.
SYS>

 

RESTful Data Service 설정을 위해 apex_rest_config.sql 스크립트 실행합니다. 여기에서 설정한 APEX_LISTENER, APEX_REST_PUBLIC_USER 패스워드는 이후 ORDS 설정때 사용할 것입니다.

참고로 APEX_LISTENER, APEX_REST_PUBLIC_USER, 바로 뒤에서 나오는 APEX_PUBLIC_USER 유저의 용도는 다음과 같습니다.

·        APEX_PUBLIC_USER: APEX 설치시 생성. ORDS 또는 Oracle HTTP Server / mod_plsql과 APEX 설정에 사용

·        APEX_REST_PUBLIC_USER: RESTful 웹서비스 설정시 생성. APEX에 저장된 RESTful 서비스 정의를 호출할 때 사용

·        APEX_LISTENER: RESTful 웹서비스 설정시 생성. APEX에 저장된 RESTful 서비스 정의를 쿼리할 때 사용

SYS> @apex_rest_config.sql
...
Enter a password for the APEX_LISTENER user              []
Enter a password for the APEX_REST_PUBLIC_USER user              []
...set_appun.sql
...setting session environment
...create APEX_LISTENER and APEX_REST_PUBLIC_USER users
...grants for APEX_LISTENER and ORDS_METADATA user
SYS>

 

Pluggable 데이터베이스에 접속해서 APEX_PUBLIC_USER 유저의 계정의 잠금을 해제하고 패스워드를 세팅합니다.

SYS> show con_name
CON_NAME
------------------------------
ORCLPDB1
SYS> col username for a30
SYS> select username,account_status from dba_users where username='APEX_PUBLIC_USER';
 
USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
APEX_PUBLIC_USER               LOCKED
SYS> alter user APEX_PUBLIC_USER identified by xxxxxxxxxx account unlock;
SYS>

 

로컬 호스트 외에 다른 호스트가 Oracle Application Express를 사용할 수 있도록 하기 위해 권한을 부여합니다. 아래와 같은 스크립트를 apex_acl.sql 라는 이름으로 만들어서 실행합니다.

SYS> !vi /opt/oracle/apex/apex_acl.sql
...
BEGIN
BEGIN
dbms_network_acl_admin.drop_acl(acl => 'all-network-PUBLIC.xml');
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
dbms_network_acl_admin.create_acl(acl => 'all-network-PUBLIC.xml',
description => 'Allow all network traffic',
principal => 'PUBLIC',
is_grant => TRUE,
privilege => 'connect');
dbms_network_acl_admin.add_privilege(acl => 'all-network-PUBLIC.xml',
principal => 'PUBLIC',
is_grant => TRUE,
privilege => 'resolve');
dbms_network_acl_admin.assign_acl(acl => 'all-network-PUBLIC.xml',
host => '*');
END;
/
sho err
COMMIT;
/
...
SYS> @apex_acl.sql
No errors.
SYS> exit
Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
[oracle@apex apex]$

APEX 설치가 완료되었습니다.

 

ORDS 설치

ORDS는 자바 기반에서 동작하기 때문에 JDK 설치가 필요합니다. 여기에서는 openjdk 11 버전을 미리 설치했습니다. 또한 ORDS 설치 후, APEX 웹은 8080 포트로 통신하기 때문에 해당 포트도 OS에서 미리 오픈했습니다. 이번 테스트에서는 Oracle Cloud Infrastructure (OCI) 환경이기 때문에 Security List에서 8080 포트를 Ingress Stateful로 미리 설정했습니다.

[oracle@apex ~]$ java -version
openjdk version "11.0.14.1" 2022-02-08 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.14.1+1-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.14.1+1-LTS, mixed mode, sharing)

 

최신 ORDS 설치 파일은 아래 링크에서 다운로드 받습니다.

https://download.oracle.com/otn_software/java/ords/ords-latest.zip

여기에서는 ORDS를 oracle 유저로 설치했습니다. ORDS를 다운로드 받고, 별도 디렉토리 생성해서 압축을 해제합니다.

[oracle@apex ~]$ whoami
oracle
[oracle@apex ~]$ wget https://download.oracle.com/otn_software/java/ords/ords-latest.zip
...
2022-03-21 01:09:49 (41.3 MB/s) - ‘ords-latest.zip’ saved [81622442/81622442]
[oracle@apex ~]$ mkdir -p /opt/oracle/ords/conf
[oracle@apex ~]$ unzip ./ords-latest.zip -d /opt/oracle/ords/
Archive:  ./ords-latest.zip
...
inflating: /opt/oracle/ords/examples/plugins/plugin-echo-cmd/src/example/EchoMessages.properties
[oracle@apex ~]$

 

ORDS와 데이터베이스 연결을 위한 설정 파일 “ords_params.properties”을 수정합니다. 수정한 내용은 아래와 같은 데이터베이스 접속정보입니다.

·        db.hostname=apex

·        db.port=1521

·        db.servicename=orclpdb1

·        db.sid=orclcdb

[oracle@apex ~]$ vi /opt/oracle/ords/params/ords_params.properties
...
#
db.hostname=apex
db.port=1521
db.servicename=orclpdb1
db.sid=orclcdb
db.username=APEX_PUBLIC_USER
migrate.apex.rest=false
rest.services.apex.add=
rest.services.ords.add=true
schema.tablespace.default=SYSAUX
schema.tablespace.temp=TEMP
standalone.http.port=8080
standalone.static.images=
user.tablespace.default=SYSAUX
user.tablespace.temp=TEMP
...
[oracle@apex ~]$

 

ORDS 설정 디렉토리 세팅합니다.

[oracle@apex ~]$ java -jar /opt/oracle/ords/ords.war configdir /opt/oracle/ords/conf
2022-03-21T01:19:19.408Z INFO        Set config.dir to /opt/oracle/ords/conf in: /opt/oracle/ords/ords.war

 

이제 ORDS를 설치합니다. ORDS 설치는 명령어 방식과 파라미터 파일을 이용한 방식으로 가능합니다. 여기에서는 명령어 방식으로 설치를 진행했습니다. 패스워드를 지정하는 부분과 마지막에 Standalone 모드 기동하는 부분을 제외하고는 디폴트값을 적용했습니다.

[oracle@apex ~]$ java -jar /opt/oracle/ords/ords.war install advanced
Specify the database connection type to use.
Enter number for [1] Basic  [2] TNS  [3] Custom URL [1]:
Enter the name of the database server [apex]:
Enter the database listen port [1521]:
Enter 1 to specify the database service name, or 2 to specify the database SID [1]:
Enter the database service name [orclpdb1]:
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:
Connecting to database user: SYS AS SYSDBA url: jdbc:oracle:thin:@//apex:1521/orclpdb1
 
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 [SYSAUX]:
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:
Enter a number to select a feature to enable:
   [1] SQL Developer Web  (Enables all features)
   [2] REST Enabled SQL
   [3] Database API
   [4] REST Enabled SQL and Database API
   [5] None
Choose [1]:
2022-03-21T04:24:59.925Z INFO        reloaded pools: []
Installing Oracle REST Data Services version 21.4.2.r0621806
... Log file written to /home/oracle/ords_install_core_2022-03-21_042500_00030.log
... 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 /home/oracle/ords_install_datamodel_2022-03-21_042509_00605.log
... Log file written to /home/oracle/ords_install_scheduler_2022-03-21_042510_00349.log
... Log file written to /home/oracle/ords_install_apex_2022-03-21_042511_00885.log
Completed installation for Oracle REST Data Services version 21.4.2.r0621806. Elapsed time: 00:00:12.702
 
Enter 1 if you wish to start in standalone mode or 2 to exit [1]:2

 

ORDS 설치 후, 이를 검증하는 방법은 아래와 같습니다.

[oracle@apex ~]$ java -jar /opt/oracle/ords/ords.war validate
Specify the database connection type to use.
Enter number for [1] Basic  [2] TNS  [3] Custom URL [1]:
Enter the name of the database server [apex]:
Enter the database listen port [1521]:
Enter 1 to specify the database service name, or 2 to specify the database SID [1]:
Enter the database service name [orclpdb1]:
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:
Connecting to database user: SYS AS SYSDBA url: jdbc:oracle:thin:@//apex:1521/orclpdb1
 
Retrieving information.
 
Oracle REST Data Services will be validated.
Repairing Oracle REST Data Services schema version 21.4.2.r0621806
... Log file written to /home/oracle/ords_validate_core_2022-03-21_044729_00500.log
Completed repairing Oracle REST Data Services version 21.4.2.r0621806. Elapsed time: 00:00:02.589

 

참고로 ORDS에서 데이터베이스로의 연결 설정 파일은 /opt/tomcat/ords/conf/ords/conf/apex.xml 에 위치해 있습니다.

[oracle@apex ~]$ vi /opt/oracle/ords/conf/ords/conf/apex.xml
...
<?xml version="1.0" encoding="UTF-8"?>
http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Saved on Mon Mar 21 04:24:59 GMT 2022</comment>
<entry key="db.password">@056B39E486DEC2741BD345BA52BDAA8B7C308459E2C927F3A5</entry>
<entry key="db.username">APEX_PUBLIC_USER</entry>
</properties>
...
[oracle@apex ~]$

 

ORDS를 Standalone 모드로 기동할 때, jdbc 설정값 관련하여 운영환경에서 적절하게 설정해야 한다는 경고 메시지가 나올 수 있습니다. 이를 피하기 위해 미리 관련 설정값을 세팅합니다. ORDS 기동 시 사용하는 설정파일은 ORDS 설치 디렉토리 아래 defaults.xml입니다. 여기에 jdbc.MaxLimit, jdbc.InitialLimit 값을 아래와 같이 각각 20, 5로 추가합니다.

[oracle@apex ~]$ vi /opt/oracle/ords/conf/ords/defaults.xml
...
<?xml version="1.0" encoding="UTF-8"?>
http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Saved on Mon Apr 11 08:09:09 GMT 2022</comment>
<entry key="database.api.enabled">true</entry>
<entry key="db.connectionType">basic</entry>
<entry key="db.hostname">apex</entry>
<entry key="db.port">1521</entry>
<entry key="db.servicename">orclpdb1</entry>
<entry key="feature.sdw">true</entry>
<entry key="restEnabledSql.active">true</entry>
<entry key="security.requestValidationFunction">wwv_flow_epg_include_modules.authorize</entry>
<entry key="security.validationFunctionType">plsql</entry>
<entry key="jdbc.MaxLimit">20</entry>
<entry key="jdbc.InitialLimit">5</entry>
</properties>
...

 

이제 ORDS를 “java -jar /opt/oracle/ords/ords.war standalone” 명령을 사용하여 Standalone 모드로 기동합니다.

최초 해당 명령 수행 시 Static resource 위치를 입력하게 되어 있습니다. 여기에는 APEX 이미지 디렉토리 “/opt/oracle/apex/images”를 지정하면 됩니다. 아니면 ords_params.properties 파일에 standalone.static.images 값에 ORDS 이미지 디렉토리를 지정하고,  해당 디렉토리에 APEX 이미지들을 복사해서 가져다 놓는 방법도 있습니다. 여기에서는 ORDS를 Standalone 모드로 기동하면서 APEX 이미지 디렉토리만 지정했습니다.

[oracle@apex ~]$ java -jar /opt/oracle/ords/ords.war standalone
Enter the APEX static resources location:/opt/oracle/apex/images
Enter 1 if using HTTP or 2 if using HTTPS [1]:
Enter the HTTP port [8080]:
2022-03-21T04:52:19.952Z INFO        HTTP and HTTP/2 cleartext listening on host: localhost port: 8080
...
2022-04-11T08:29:49.573Z INFO        Configuration properties for: |apex|pu|
db.servicename=orclpdb1
db.hostname=apex
db.password=******
security.requestValidationFunction=wwv_flow_epg_include_modules.authorize
jdbc.MaxLimit=20
database.api.enabled=true
db.username=ORDS_PUBLIC_USER
restEnabledSql.active=true
resource.templates.enabled=true
db.port=1521
feature.sdw=true
security.validationFunctionType=plsql
jdbc.InitialLimit=5
db.connectionType=basic
 
2022-04-11T08:29:54.905Z INFO        Oracle REST Data Services initialized
Oracle REST Data Services version : 21.4.2.r0621806
Oracle REST Data Services server info: jetty/9.4.44.v20210927

 

이제 아래와 같은 URL로 접속을 하면 APEX 초기 로그인 화면을 볼 수 있습니다.

http://141.148.39.60:8080/ords/apex_admin

로그인 접속 정보는 앞서 APEX ADMIN 패스워드로 설정한 값이며 계정은 ADMIN입니다.

 

APEX 로그인을 하면, Welcome 화면을 볼 수 있습니다.

<END>

 

다음 글:

2022.04.18 - [Database/Oracle Database] - Oracle Application Express 개요 & 샘플 - 3.1. APEX 사용 샘플 #1 - 로컬 테이블을 이용한 Report 생성