対応バージョン

製品バージョン
Oracle APEX4 – 5.0.4
Oracle Database11.2 – 12.1
Oracle Linux

更新履歴

日付内容
2017/07/07SSJ Tech labより移行
2018/05/25APEXの読み方について更新
2021/10/20埋込みPL/SQLゲートウェイの非サポートについて追記

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

Oracle APEXの概要について

Oracle APEXとは

Oracle APEXはOracle Database に付属しているWebブラウザベースの開発ツールです。基本的にOracle Databaseがインストールされていれば使うことが可能です。

Oracle APEXについて現状あまり浸透していないように感じています。ただ、筆者の個人的な見解ではありますが、特にOracle Cloudの台頭により、管理用などのツールとしてこれからどんどん使われるようになることが予想されます。

APEXを利用することで、どんなことが出来るかというと、RESTfulなWebアプリケーションの作成、エクセルのシステム化やワークフローの作成などが出来るようになります。

Oracle APEXの読み方

Oracle Application Expressの略称となるOracle APEXですが、聞いたところによると”エイペックス”と読むのが主流のようですが、”アペックス”と読んでも特に間違いではないようです。ちなみに筆者はずっと”アペックス”と読んでいました。Oracle APEXのユーザー会で、全世界的にユーザーグループで”エイペックス”と読むように統一されているとアナウンスされていました。

APEX由来について説明のリンク(英語)

Oracle APEXで作成したページの例

ご参考までに以下のURLよりAPEXで作成したページの例が参照できます。

https://www.builtwithapex.com

Oracle APEXの最新版

以下のURLから最新版のダウンロード又はクラウドサービスとしての利用が可能です。

https://apex.oracle.com/jp

※OTN(Oracle Technology Network)のページから直接ダウンロードすることも可能です。

Oracle APEXへの接続について

APEXの接続にはOracle REST Data Services(旧称APEXリスナー)または埋込みPL/SQLゲートウェイでの接続が可能です。本記事では埋め込みPL/SQLゲートウェイを利用したインストールを紹介します。
次のようなイメージで接続を行います。

埋込みPL/SQLゲートウェイの接続イメージ

埋め込みPL/SQLゲートウェイはOracle APEX 20.2以降のバージョンではサポートされていません。現行バージョンではORDSを構成してください。
埋込みPL/SQLゲートウェイで接続する場合は、ウェブブラウザを経由して、直接データベースに接続するイメージです。 Webブラウザ <-> Oracle Database(Oracle ListenerでHTTPをリスニングします。)

埋込みPL/SQLゲートウェイの接続イメージ

埋込みPL/SQLゲートウェイではXML Databaseが必要になります。11gのEnterprise Editionを利用しており、Database作成時にXML Databaseをインストールしていない場合は、XML Databaseをインストールをしないと埋込みPL/SQLゲートウェイの利用は出来ません。Oracle Database 12cの各エディション、Oracle Database 11gの Standard Edition、Standard Edition One、Express EditionについてはDatabase作成時にインストールされています。

Oracle APEXのインストール

【注意】既存環境の利用をしている場合

既存でAPEXを利用している場合、アップグレード後にスキーマの削除が可能ですが、削除すると元に戻せなくなります。アップグレードの確認が取れるまでは既存のスキーマは消さないでください。APEXの新バージョンをインストールすると、既存のユーザデータは変更されず、メタデータのアップグレードとなります。ユーザ・インタフェースを保つために、アップグレードされないアプリケーション・コンポーネントについては、開発者でアップグレードの検討をする必要があります。また、アップグレード前にバックアップは必ず取るようにしてください。

本記事でのインストール構成について
本記事の説明では基本的にExpress Edition(無償)の環境を利用しています。ライセンス無償でありOracleからのサポートはされないのですが、今回はオンライン以外でも無償で利用可能な環境があるよという紹介込みです。

Oracle APEXのダウンロード

以下のURLより最新版のAPEXをダウンロードをします。

https://apex.oracle.com/jp

Oracle APEXの各バージョンでサーティファイ(承認・保証)されているOracle Databaseの最低バージョンに注意してください。

  • Oracle APEX 5.1 (Oracle Database 11.2.0.4以上)
  • Oracle APEX 5.0 (Oracle Database 11.1.0.7以上)
  • Oracle APEX 4.0 (Oracle Database 10.2.0.3以上)
    以降2016/10/28現在の最新であるapex_5.0.4.zipを対象として説明していきます。

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

ダウンロードしたapex_5.0.4.zipを展開し、インストールします。

sudo mkdir -m777 /tmp/inst_apex
sudo mv -i apex_5.0.4.zip /tmp/inst_apex/
sudo chown oracle:oinstall /tmp/inst_apex/apex_5.0.4.zip
sudo su - oracle
cd /tmp/inst_apex
ls -l apex_5.0.4.zip
unzip apex_5.0.4.zip
cd apex
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
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;

-- ここではサンプルのため、SYSAUXを指定していますが、アップグレード時にデータを分離するため、表領域を変更することをOracleが推奨しています。
@apexins.sql SYSAUX SYSAUX TEMP /i/

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

Thank you for installing Oracle Application Express 5.0.4.00.12

Oracle Application Express is installed in the APEX_050000 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ゲートウェイを構成します。

-- apex_epg_config.sql構成スクリプトを実行します。
-- この実行により埋込みPL/SQLゲートウェイが構成されます。
@apex_epg_config.sql /tmp/inst_apex

-- 構成完了後、ANONYMOUSのアカウントをアンロックします。
ALTER USER ANONYMOUS ACCOUNT UNLOCK;

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

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

EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

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

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;
/

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

補足事項となりますが、PDF印刷が出来ないなどサーバプロセスでの接続エラーが出る場合、ACLで拒否されている可能性があります。その場合は、アクセスを許可をします。

ACLでの許可が必要な場合は、PDF印刷、メール送信やWebサービスの利用を行う場合です。外部(プリンタサーバ等)との連携が必要ない場合は不要な設定です。接続する各サーバがローカルで動作する場合も必要となります。

※ 12cの場合は以下のパッケージは非推奨ですので、DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACEを利用してください。詳細はマニュアルをご参照ください。

DECLARE
  ACL_PATH  VARCHAR2(4000);
  APEX_USER VARCHAR2(120);
BEGIN
  APEX_USER := 'APEX_050000';

  SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
   WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;

  IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, APEX_USER, 'connect')
    IS NULL THEN
      DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH, APEX_USER, TRUE, 'connect');
  END IF;

EXCEPTION
  -- When no ACL has been assigned to '*'.
  WHEN NO_DATA_FOUND THEN
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
    'ACL that lets power users to connect to everywhere',
    APEX_USER, TRUE, 'connect');
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/

-- ORA-01435: user does not existが出力される場合は以下のSQLでユーザ名を確認し、
-- 上記PL/SQLの5行目の APEX_050000 を正しいユーザに変更して再実行してください。
select username
  from dba_users
 where regexp_like(username,'(FLOWS|APEX)_\d{6}')
   and username <> (
       select table_owner
         from all_synonyms
        where synonym_name = 'WWV_FLOW'
          and owner = 'PUBLIC');

リスナーの確認

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

lsnrctl status LISTENER

※以下のような記載があることを確認
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=8080)))(Presentation=HTTP)(Session=RAW))
上記の表示がされていない場合、リスニングされていません。しばらく待ってもリスニングされない場合は、構成内容を再度見直して下さい。 “HOST=”がAPEXへ接続する時に、ブラウザのURLに指定するIPアドレスとなります。”PORT=”がポート番号です。

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

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

@apxchpwd.sql

Oracle APEXへの接続

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

http://[DBサーバのIP]:8080/apex/apex_admin

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

http://[DBサーバのIP]:8080/apex

Oracle APEXの日本語化

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

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

ログイン画面で言語の選択が可能になります。(Sign inボタンの下にあります。)

ログイン後はちょっとわかりづらいですが、トップページの左下の方で言語の選択が出来ます。

言語設定