ここでは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で作成したページの例

ご参考までに以下の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ゲートウェイを利用したインストールを紹介します。(Oracle HTTP Serverは最新では非推奨となっておりますので、記載を省きます。)

次のようなイメージで接続を行います。

埋込みPL/SQLゲートウェイを利用した場合


Webブラウザ <-> Oracle Database(Oracle ListenerでHTTPをリスニングします。)

Webブラウザ <-> Oracle Database” width=”562″ height=”168″ class=”alignnone size-full wp-image-1121″ />

<p>埋込み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、Personal Editon、Express EditionについてはDatabase作成時にインストールされています。</p>

<h4>Oracle REST Data Services(旧称APEXリスナー)を利用した場合</h4><br/>
<p>Webブラウザ <-> Oracle REST Data Services <-> Oracle Database</p>

<img fetchpriority=

Oracle REST Data ServicesはOracle WebLogic Server、Oracle Glassfish Server、Apache Tomcatで利用可能です。無償で利用する場合はGlassfish Community Editionか、Apatch Tomcatでの利用が可能です。
Oracle REST Data Servicesを利用する場合の利点は、Database層と中間層に分離することで、RAC(Real Application Cluster)への接続を意識せずに利用することが出来ます。(マニュアル上RACの共有機能について利用できないため、当該機能の利用を推奨していますが、SCANやVIPなどの利用で、障害時などは一時的な接続断はあるものの特に利用に不便があるよう思えないのですが、ここでは深く追求しません。)
また、REST Data Servicesを利用することにより、複数データベースのサポートや、PDFの印刷、RESTful Webサービスがサポートされます。

埋込みPL/SQLゲートウェイを利用する場合のセキュリティ

埋込みPL/SQLゲートウェイの利用は、開発環境のみの利用が推奨されています。マニュアルを参照すると、特にインターネット上で公開した場合に、データベースサーバとWebサーバの分離が出来ないことによるセキュリティ的な懸念があることから、開発のみの推奨となっているようです。

データベースサーバを直接インターネットに公開する構成はセキュリティ上あまりとられることはありません(直接接続するため、Webサーバ経由のみのアクセス許可などの対策が出来なかったり、サーバの要塞化が出来ないなどのセキュリティリスクがあります)。

他に完全開発環境(開発などすべての機能が利用可能)とランタイム環境(アプリケーションの実行のみ許可)で環境的に大きなセキュリティ的な違いがあります。完全開発環境としてインストールしていて、ユーザ名、パスワードが判明している場合に、アプリケーションを実行するスキーマに権限のあるデータなどは、SQLワークショップの機能から直接CSVエクスポートやデータ操作が出来てしまうことやアプリケーションの変更がされるなどの懸念があります。
APEXの設定で特定のIPアドレスのみ、ワークスペースへのログインを可能にすることなどは可能ですが、インターネットに公開していない場合などでも、内部の利用者に対して本番データの参照制限をかけたい場合などは同様のリスクがあります。

参考資料
http://docs.oracle.com/cd/E68317_01/install.50/e67395/overview.htm#CEGHDDAG
Oracle Application Expressインストレーション・ガイド
リリース5.0
E67395-01
1 Oracle Application Expressのインストールの概要
1.3 Webリスナーの選択
1.3.5 Webリスナー・オプションの比較

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を展開し、インストールします。

# mkdir -m777 /tmp/inst_apex
# mv -i apex_5.0.4.zip /tmp/inst_apex/
# chown oracle:oinstall /tmp/inst_apex/apex_5.0.4.zip
$ 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
SQL> -- 元のパラメータが指定する値より大きい場合は変更しないでください。
SQL> show parameter JOB_QUEUE_PROCESSES
SQL> alter system set JOB_QUEUE_PROCESSES = 20 scope=both;
SQL> show parameter SHARED_SERVERS
SQL> alter system set SHARED_SERVERS = 5 scope=both;
SQL> alter system set MAX_SHARED_SERVERS = 5 scope=both;
SQL> 
SQL> -- ここではサンプルのため、SYSAUXを指定していますが、アップグレード時にデータを分離するため、表領域を変更することをOracleが推奨しています。
SQL> @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ゲートウェイを構成します。

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

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

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

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

SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

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

SQL> set serveroutput on
SQL> declare
  2     v_port number;
  3     v_protocol number;
  4     v_host varchar2(50);
  5 begin
  6     dbms_xdb.getListenerEndPoint(endpoint => 1,host => v_host,port => v_port,protocol => v_protocol);
  7     dbms_output.put_line('Host    :'||v_host);
  8     dbms_output.put_line('Port    :'||v_port);
  9     dbms_output.put_line('Protocol:'||v_protocol);
 10 end;
 11 /

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

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

ACLでの許可が必要な場合は、PDF印刷、メール送信やWebサービスの利用を行う場合です。外部(プリンタサーバ等)との連携が必要ない場合は不要な設定です。接続する各サーバがローカルで動作する場合も必要となります。
※ 12cの場合は以下のパッケージは非推奨ですので、DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACEを利用してください。詳細はマニュアルをご参照ください。

SQL> DECLARE
  2    ACL_PATH  VARCHAR2(4000);
  3    APEX_USER VARCHAR2(120);
  4  BEGIN
  5    APEX_USER := 'APEX_050000';
  6
  7    SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
  8     WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
  9
 10    IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, APEX_USER, 'connect')
 11      IS NULL THEN
 12        DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH, APEX_USER, TRUE, 'connect');
 13    END IF;
 14
 15  EXCEPTION
 16    -- When no ACL has been assigned to '*'.
 17    WHEN NO_DATA_FOUND THEN
 18    DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
 19      'ACL that lets power users to connect to everywhere',
 20      APEX_USER, TRUE, 'connect');
 21    DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
 22  END;
 23  /

SQL> -- ORA-01435: user does not existが出力される場合は以下のSQLでユーザ名を確認し、
SQL> -- 上記PL/SQLの5行目の APEX_050000 を正しいユーザに変更して再実行してください。
SQL> select username from dba_users
  2      where regexp_like(username,'(FLOWS|APEX)_\d{6}')
  3          and username <> (select table_owner from all_synonyms
  4          where synonym_name = 'WWV_FLOW'
  5          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のログインユーザ)のパスワード変更をします。初回ログイン時に利用され、ログイン時にパスワード変更が求められます。

SQL> @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
SQL> -- 【注意】必ずNLS_LANG=Japanese_Japan.AL32UTF8を設定してから実行
SQL> alter session set current_schema = APEX_050000;
SQL> @load_ja.sql

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

apex_login

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

apex_top_lang

Oracle APEXでの開発にあたって

手前味噌で恐縮ですが、弊社にて提供しているOracle APEX構築サービスの一環で、初めて開発するにあたっての、画面構成や用語について説明したテクニカル・シート(15ページ)を公開しております。よろしければご参照ください。

Oracle APEX 5.1 初めての開発