対応バージョン

製品バージョン
Oracle APEX5.1.0 – 5.1.4
Oracle Database12.1 – 18.4(Oracle 18c XEにインストール)
Oracle Linux

更新履歴

日付内容
2018/11/13記事公開

ここではAPEX(Oracle Application Express)のCDB(コンテナ・データベース)へのインストールについて解説します。 Linuxでのインストール記事ですが、Windowsでも参考になるかと思います。

弊社では、Oracle XE 環境でもOracle APEX のインストールや技術サポートの相談について承っております。ご相談頂く場合は、お問合せよりお気軽にお問い合わせください。

Oracle APEXの概要について

以降2018/11/13現在、Oracle Cloudと同一バージョンとなるapex_5.1.4.zipを対象として説明していきます。
Oracle APEX 18.1についても、ユーザ名をAPEX_050100をAPEX_180100と読み替えていただければインストール可能です。
非CDB環境や、Oracle APEXの概要については、以下のページをご参照ください。
Oracle APEXのインストール(Oracle Application Express)(非コンテナ環境)

Oracle APEXの最新版

以下のURLから最新版のダウンロード又はクラウドサービスとしての利用が可能です。表示してすぐの無料で開始を押したのち、少し下にあるOracle APEXのダウンロードのボタンからダウンロードページへ行けます。
https://apex.oracle.com/jp
上記遷移先のダウンロードページへのリンクについても記載しておきます。過去バージョンについては、Prior Release Archivesからダウンロードできます。
https://www.oracle.com/tools/downloads/apex-downloads.html

Oracle Database 18c XE について

Oracle Database 18c XEについては、以下にインストールの記事を記載しています。ご参考ください。
Oracle Database 18c XE インストールと制限

バイナリの展開とインストール

ダウンロードしたapex_5.1.4.zipを展開し、インストールします。PDBのみのインストールを行います。CDBにもインストールを行う場合、CDB全体でバージョンを一致させる必要があることに注意してください。

mv -i apex_5.1.4.zip ~oracle/
chown oracle:oinstall ~oracle/apex_5.1.4.zip
su - oracle
ls -l apex_5.1.4.zip
unzip apex_5.1.4.zip
cd apex
export ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE
export ORACLE_SID=XE
export PATH=$ORACLE_HOME/bin:$PATH
sqlplus / as sysdba
-- 元のパラメータが指定する値より大きい場合は変更しないでください。
show parameter JOB_QUEUE_PROCESSES
alter system set JOB_QUEUE_PROCESSES = 20 scope=both;
show parameter SHARED_SERVERS
alter system set SHARED_SERVERS = 5 scope=both;
alter system set MAX_SHARED_SERVERS = 5 scope=both;
-- 表領域についても確認しておきます。
set pagesize 1000 line 120 trim on
select CON_ID, TABLESPACE_NAME
     , MAX_SIZE/1024/1024 as MAX_MB, STATUS, ENCRYPTED, COMPRESS_FOR
  from cdb_tablespaces
 order by 1,2;
    CON_ID TABLESPACE_NAME                    MAX_MB STATUS    ENC COMPRESS_FOR
---------- ------------------------------ ---------- --------- --- ------------------------------
         1 SYSAUX                               2048 ONLINE    NO
         1 SYSTEM                               2048 ONLINE    NO
         1 TEMP                                 2048 ONLINE    NO
         1 UNDOTBS1                             2048 ONLINE    NO
         1 USERS                                2048 ONLINE    NO
         3 SYSAUX                               2048 ONLINE    NO
         3 SYSTEM                               2048 ONLINE    NO
         3 TEMP                                 2048 ONLINE    NO
         3 UNDOTBS1                             2048 ONLINE    NO
         3 USERS                                2048 ONLINE    NO
show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 XEPDB1                         READ WRITE NO
alter session set container = XEPDB1;
-- 表領域については変更可能です。アプリケーションのメタデータ、ユーザーデータ等が入ります。SYSTEM表領域は避けてください。
@apexins.sql USERS USERS TEMP /i/

以下のようなメッセージが出てきたらインストール成功です。

Thank you for installing Oracle Application Express 5.1.4.00.08

Oracle Application Express is installed in the APEX_050100 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)

Oracle APEXの接続構成

埋込みPL/SQLゲートウェイ構成

埋込みPL/SQLゲートウェイを構成します。
一度再接続します。

exit
sqlplus / as sysdba
-- ANONYMOUSのアカウントをアンロックします。CDBおよびPDB両方で行ってください。(アンロックは構成後でも問題ありません)
ALTER USER ANONYMOUS ACCOUNT UNLOCK;
alter session set container = XEPDB1;
ALTER USER ANONYMOUS ACCOUNT UNLOCK;
-- apex_epg_config.sql構成スクリプトを実行します。
-- この実行により埋込みPL/SQLゲートウェイが構成されます。
@apex_epg_config.sql /home/oracle

ユーザーの設定変更

構成したユーザをAPEXが利用可能なように変更します。

alter session set container = XEPDB1;
-- APEX_PUBLIC_USER をログイン可能として構成します。パスワードは何にしても大丈夫です。
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY &inputPassword. ACCOUNT UNLOCK;
set pages 1000 line 120 trim on
col USERNAME for a30
select USERNAME, ACCOUNT_STATUS from DBA_USERS
 where username = 'ANONYMOUS' or username like 'APEX%' order by 1;
USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
ANONYMOUS                      EXPIRED
APEX_050100                    EXPIRED & LOCKED
APEX_INSTANCE_ADMIN_USER       EXPIRED
APEX_PUBLIC_USER               OPEN

デフォルトで180日でパスワードの期限切れとなります。必要な場合は期限の変更をしてください。

alter profile DEFAULT limit password_life_time UNLIMITED;
col PROFILE for a20
col RESOURCE_NAME for a25
col LIMIT for a30
select PROFILE, RESOURCE_TYPE, RESOURCE_NAME, LIMIT from DBA_PROFILES
where RESOURCE_NAME = 'PASSWORD_LIFE_TIME' order by 1,2,3;
PROFILE              RESOURCE RESOURCE_NAME             LIMIT
-------------------- -------- ------------------------- ------------------------------
DEFAULT              PASSWORD PASSWORD_LIFE_TIME        UNLIMITED
ORA_STIG_PROFILE     PASSWORD PASSWORD_LIFE_TIME        60

リスニングポートの設定

HTTPをリスニングするポートを指定します。Oracle Database 18c XEでは、デフォルトでEM Express用にCDB$ROOTにて、5500番が使用されています。
ここでは例としてPDBに5501番を設定しています。

alter session set container = XEPDB1;
select DBMS_XDB_CONFIG.GETHTTPPORT FROM DUAL;
GETHTTPPORT
-----------
          0
SELECT DBMS_XDB_CONFIG.GETHTTPSPORT FROM DUAL;
GETHTTPSPORT
------------
           0
EXEC DBMS_XDB_CONFIG.SETHTTPSPORT(5501);
SELECT DBMS_XDB_CONFIG.GETHTTPSPORT FROM DUAL;
GETHTTPSPORT
------------
        5501

リモート接続のためのローカル以外のポート許可

必要な場合は、以下のパッケージにてローカル以外でのリスニングの許可を行ってください。 設定値FALSEは、ローカルホストを含む他のインターフェースについても同時にリスニングします。TRUEの場合はローカルホスト(127.0.0.1)のみリスニングします。

EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

以下のSQLを実行し、「Host : localhost」と出ている場合は、localhostのみでリスニングされる設定となっています。

alter session set container = XEPDB1;
set serveroutput on
declare
    v_port number;
    v_protocol number;
    v_host varchar2(50);
begin
    dbms_xdb.getListenerEndPoint(endpoint => 1,host => v_host,port => v_port,protocol => v_protocol);
    dbms_output.put_line('Host    :'||v_host);
    dbms_output.put_line('Port    :'||v_port);
    dbms_output.put_line('Protocol:'||v_protocol);
end;
/
Host    :
Port    :0
Protocol:1

ACL(アクセスコントロールリスト)の許可

補足事項となりますが、PDF印刷が出来ないなどサーバプロセスでの接続エラーが出る場合、ACLで拒否されている可能性があります。その場合は、アクセスを許可をします。 ACLでの許可が必要な場合は、PDF印刷、メール送信やWebサービスの利用を行う場合です。外部(プリンタサーバ等)との連携が必要ない場合は不要な設定です。接続する各サーバがローカルで動作する場合も必要となります。

-- メール向けのACL追加例です。schema_nameは、APEX_050100スキーマ以外にも、
-- ワークスペースオーナーの登録が必要です。ロールでの指定も可能です。
-- xs$name_list('smtp') の代わりに xs$name_list('connect') を指定すると、
-- http等も許可されます。詳しくはマニュアルを参照してください。

alter session set container = XEPDB1;
declare
    host_name   varchar2(100) := '';
    schema_name varchar2(100) := 'APEX_050100';
begin
    dbms_network_acl_admin.append_host_ace (
        host       => host_name,
        lower_port => 25,
        upper_port => 25,
        ace        => xs$ace_type(privilege_list => xs$name_list('smtp'),
                                granted        => TRUE,   -- TRUE:許可 FALSE:拒否
                                principal_name => schema_name,
                                principal_type => xs_acl.ptype_db));
end;
/

-- commitしないと動作しません。
commit;
set pages 1000 line 120
col NAME for a50
col SECURITY_CLASS for a15
col PARENT_ACL for a10
col DESCRIPTION for a40
select NAME, SECURITY_CLASS, PARENT_ACL, DESCRIPTION from DBA_XS_ACLS
order by 1;
NAME                                               SECURITY_CLASS  PARENT_ACL DESCRIPTION
-------------------------------------------------- --------------- ---------- -------------------------------
NETWORK_ACL_7A7BF4A0B0AA72C0E053973410A08847       NETWORK_SC                 ACL for host :25-25
col ACL for a50
col ACE_ORDER for 999999999
col PRINCIPAL for a25
col PRIVILEGE for a25
select ACL, ACE_ORDER, GRANT_TYPE, PRINCIPAL, PRIVILEGE from DBA_XS_ACES
order by 1,2;
ACL                                                 ACE_ORDER GRANT PRINCIPAL                 PRIVILEGE
-------------------------------------------------- ---------- ----- ------------------------- ---------------
NETWORK_ACL_7A7BF4A0B0AA72C0E053973410A08847                1 GRANT APEX_050100               SMTP
exit

リスナーの確認

HTTPをリスニングしているか確認します。

lsnrctl status LISTENER
# 以下のような記載があることを確認
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=)(PORT=5501))(Security=(my_wallet_directory=/opt/oracle/admin/XE/xdb_wallet))(Presentation=HTTP)(Session=RAW))

HOST=がAPEXへ接続する時に、ブラウザのURLに指定するIPアドレスとなります。PORT=がポート番号です。
前の手順で設定した5501番がリスニングされていることを確認してください。

ADMINユーザのパスワード変更

ADMIN(APEXのログインユーザ)のパスワード変更をします。初回ログイン時に利用され、ログイン時にパスワード変更が求められます。

alter session set container = XEPDB1;
@apxchpwd.sql

Oracle APEXへの接続

まずは以下のURLでADMINパスワードの変更を行ってください。

https://[DBサーバのIP]:5501/apex/apex_admin

パスワードは数字、大文字、記号(指定されたもの)を必ず1つは入れないとNGとなりますので、ご注意ください。
以下のURLからログインできるようになります(パスワード変更後は勝手に移動します)。

https://[DBサーバのIP]:5501/apex

Oracle APEXの日本語化

日本語化用のスクリプトを実行します。ウェブブラウザでのサインインの時に日本語か英語かを選択できるようになります。
NLS_LANG=Japanese_Japan.AL32UTF8を設定しないとエラーとなる点に注意してください。

cd /home/oracle/apex/builder/ja/
export NLS_LANG=Japanese_Japan.AL32UTF8
sqlplus / as sysdba
-- 【注意】必ずNLS_LANG=Japanese_Japan.AL32UTF8を設定してから実行
alter session set container = XEPDB1;
alter session set current_schema = APEX_050100;
@load_ja.sql

ログイン画面で選択が可能になります。(Sign inボタンの下にあります。)
ログイン後はちょっとわかりづらいですが、トップページの左下の方で言語の選択が出来ます。
言語設定

インストールファイルの移動

インストールしたapexのディレクトリは、設定変更時や、言語の追加、パスワードの再設定などで使用します。
ORACLE_HOME配下へ移動しておくと便利です。

mv -i ~oracle/apex ${ORACLE_HOME}/apex_5.1.4
ls -ld ${ORACLE_HOME}/apex_5.1.4