이전 글: 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>
다음 글:
'Database > Oracle Database' 카테고리의 다른 글
Oracle Application Express 개요 & 샘플 - 3.2. APEX 사용 샘플 #1 - 로컬 테이블을 이용한 Report 생성 (0) | 2022.04.18 |
---|---|
Oracle Application Express 개요 & 샘플 - 3.1. APEX 사용 샘플 #1 - 로컬 테이블을 이용한 Report 생성 (0) | 2022.04.18 |
Oracle Application Express 개요 & 샘플 - 1. APEX 개요 (0) | 2022.04.18 |
오라클 데이터베이스 21c RPM 기반 설치 (0) | 2022.03.18 |
Oracle RESTful Data Service, Apache Tomcat + APEX 설치 및 설정 방법 (0) | 2022.03.10 |