본문 바로가기

Database/Oracle Database

Oracle RESTful Data Service, Apache Tomcat + APEX 설치 및 설정 방법

 

참조문서:
Oracle REST Data Services 21.4
Installing and Configuring Application Express and Oracle REST Data Services
Apache Tomcat
Install and Configure Oracle Application Express with Oracle REST Data Services and Apache Tomcat
Install APEX and ORDS on CentOS 8

Oracle Application Express 와 Apache Tomcat 어플리케이션에서 구동되는 Oracle REST Data Service (ORDS)를 설치하고 설정하는 방법을 정리한 자료입니다.

테스트 환경 및 사전 준비

웹 브라우저의 HTTP 요청이 ORDS을 통해 데이터베이스로 보내지고, 해당 요청은 APEX에 의해 처리되어 그 결과가 ORDS를 거처 브라우저로 반환되는 구조입니다.

단순한 테스트를 위해 하나의 서버에 관련 소프트웨어를 모두 설치했습니다.

 

테스트를 위해 미리 설치한 것

  • Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Multitenant (ORCLCDB)
  • openjdk 11.0.14.1

Application Express (APEX) 설치

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

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

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

[opc@ords ~]$ sudo su - oracle
Last login: Fri Mar  4 04:46:44 GMT 2022 on pts/0
[oracle@ords ~]$ id
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[oracle@ords ~]$ wget <https://download.oracle.com/otn_software/apex/apex-latest.zip>
--2022-03-04 05:19:43--  <https://download.oracle.com/otn_software/apex/apex-latest.zip>
...
2022-03-04 05:19:46 (88.1 MB/s) - ‘apex-latest.zip’ saved [232279928/232279928]

[oracle@ords ~]$ mkdir -p /opt/oracle/apex
[oracle@ords ~]$ unzip ./apex-latest.zip -d /opt/oracle/
Archive:  ./apex-latest.zip
  inflating: /opt/oracle/apex/apxsilentins.sql
...
  inflating: /opt/oracle/apex/apexins_cdb.sql
	[oracle@ords ~]$

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

[opc@ords ~]$ sudo su - oracle
Last login: Fri Mar  4 05:19:25 GMT 2022 on pts/0
[oracle@ords ~]$ cd /opt/oracle/apex/
[oracle@ords apex]$ sqlplus sys@orclpdb1 as sysdba

SQL*Plus: Release 21.0.0.0.0 - Production on Fri Mar 4 05:25:07 2022
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

SQL> @apexins.sql SYSAUX SYSAUX TEMP /i/
...set_appun.sql

PL/SQL procedure successfully completed.
...
timing for: Complete Installation
Elapsed: 00:03:43.58
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.

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

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

SYS> alter user APEX_PUBLIC_USER identified by xxxxxxxxxx account unlock;

로컬 호스트 외에 다른 호스트가 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@ords apex]$

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

Tomcat 설치

이번 테스트에서 사용한 Apache Tomcat은 9 버전입니다. 아래 링크에서 다운로드 받았습니다.

https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.59/bin/apache-tomcat-9.0.59.tar.gz

별도 tomcat 유저를 만들어서, 다운로드 받은 압축파일을 별도 디렉토리에 옮겼습니다. 그리고 파일의 소유권을 tomcat으로 변경했습니다.

[opc@ords ~]$ sudo -s
[root@ords opc]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@ords opc]# useradd -s /bin/false tomcat
[root@ords opc]# wget <https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.59/bin/apache-tomcat-9.0.59.tar.gz>
--2022-03-04 06:11:20--  <https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.59/bin/apache-tomcat-9.0.59.tar.gz>
...
2022-03-04 06:11:20 (361 MB/s) - ‘apache-tomcat-9.0.59.tar.gz’ saved [11543067/11543067]

[root@ords opc]# ls
apache-tomcat-9.0.59.tar.gz
[root@ords opc]# tar xzf apache-tomcat-9.0.59.tar.gz
[root@ords opc]# ls
apache-tomcat-9.0.59  apache-tomcat-9.0.59.tar.gz
[root@ords opc]# mkdir -p /opt/tomcat/
[root@ords opc]# mv apache-tomcat-9.0.59/* /opt/tomcat/
[root@ords opc]# chown -R tomcat:tomcat /opt/tomcat/

Tomcat 시작, 종료 등의 관리를 좀 더 쉽게 하기 위해 systemd service로 Tomcat을 관리하도록 했습니다. 먼저 아래와 같은 내용으로 tomcat.service 파일을 생성합니다.

[root@ords opc]# vi /etc/systemd/system/tomcat.service
...
[Unit]
Description=Tomcat 9
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
...

Tomcat 서비스를 reload 하고, enable 및 시작을합니다.

[root@ords opc]# set enforce 0
[root@ords opc]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31
[root@ords opc]# systemctl daemon-reload
[root@ords opc]# systemctl enable tomcat.service
[root@ords opc]# systemctl start tomcat.service
[root@ords opc]# systemctl status tomcat.service
● tomcat.service - Tomcat 9
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-03-04 06:33:57 GMT; 32s ago
...
Mar 04 06:33:57 ords systemd[1]: Started Tomcat 9.

정상적으로 설치되었는지 확인하기 위해 Apache Tomcat 페이지를 불러와 봅니다.

http://150.136.92.67:8080

 

ORDS 설치

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

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

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

[opc@ords ~]$ sudo su - tomcat
Last login: Fri Mar  4 06:53:03 GMT 2022 on pts/1
[tomcat@ords ~]$ id
uid=54322(tomcat) gid=54331(tomcat) groups=54331(tomcat) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[tomcat@ords ~]$ wget <https://download.oracle.com/otn_software/java/ords/ords-latest.zip>
--2022-03-04 06:54:55--  <https://download.oracle.com/otn_software/java/ords/ords-latest.zip>
...
2022-03-04 06:54:55 (210 MB/s) - ‘ords-latest.zip’ saved [81492165/81492165]

[tomcat@ords ~]$ mkdir -p /opt/tomcat/ords/conf
[tomcat@ords ~]$ unzip ./ords-latest.zip -d /opt/tomcat/ords/
Archive:  ./ords-latest.zip
...
inflating: /opt/oracle/ords/ords.war
[tomcat@ords ~]$

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

  • db.hostname=ords
  • db.port=1521
  • db.servicename=orclpdb1
  • db.sid=orclcdb
[tomcat@ords ~]$ vi /opt/tomcat/ords/params/ords_params.properties
...
db.hostname=ords
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
...

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

[tomcat@ords ~]$ java -jar /opt/tomcat/ords/ords.war configdir /opt/tomcat/ords/conf
2022-03-04T08:13:11.230Z INFO        Set config.dir to /opt/tomcat/ords/conf in: /opt/tomcat/ords/ords.war

이제 ORDS를 설치합니다.

[tomcat@ords ~]$ java -jar /opt/tomcat/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 [ords]:
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 [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:@//ords: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-04T08:20:37.683Z INFO        reloaded pools: []
Installing Oracle REST Data Services version 21.4.1.r0250904
... Log file written to /home/tomcat/ords_install_core_2022-03-04_082037_00778.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/tomcat/ords_install_datamodel_2022-03-04_082046_00257.log
... Log file written to /home/tomcat/ords_install_scheduler_2022-03-04_082047_00053.log
... Log file written to /home/tomcat/ords_install_apex_2022-03-04_082048_00637.log
Completed installation for Oracle REST Data Services version 21.4.1.r0250904. Elapsed time: 00:00:11.730

Enter 1 if you wish to start in standalone mode or 2 to exit [1]:2

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

[tomcat@ords ~]$ vi /opt/tomcat/ords/conf/ords/conf/apex.xml
...

http://java.sun.com/dtd/properties.dtd>">

Saved on Fri Mar 04 08:20:37 GMT 2022
@05FEFBC80B6DC4294BE82EDE4A10AA6514169A81BF1AB24899
APEX_PUBLIC_USER

...

이제 APEX 이미지 파일 저장을 위해 어플리케이션 서버 디렉토리를 준비하고, APEX 이미지들을 이곳에 복사합니다.

[tomcat@ords ~]$ mkdir /opt/tomcat/webapps/i/
[tomcat@ords ~]$ cp -R /opt/oracle/apex/images/* /opt/tomcat/webapps/i/

ORDS의 ords.war 파일도 Tomcat webapps 디렉토리에 복사합니다.

[tomcat@ords ~]$ cp /opt/tomcat/ords/ords.war /opt/tomcat/webapps/

여러가지 설정을 했기 때문에 Tomcat 재기동합니다.

[tomcat@ords ~]$ exit
logout
[opc@ords ~]$ sudo -s
[root@ords opc]# systemctl stop tomcat.service
[root@ords opc]# systemctl start tomcat.service

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

http://150.136.92.67:8080/ords/

로그인 접속 정보는 앞서 APEX ADMIN 패스워드 설정에서 한 것과 같이 Workspace는 “INTERNAL”이고, 계정은 ADMIN입니다.

APEX에 로그인한 화면입니다.

 

<END>