対応バージョン
- Oracle APEX 4 – 18.1.0
- Oracle Database 11.2 – 18.1
- Oracle Linux
更新履歴
- 2018/11/12: SSJ Tech labより移行
Oracle Databaseインストール時のOracle APEX(Oracle Application Express)を、そのまま利用するには有効化が必要になります。ここでは有効化の方法について記載します。
インストール済みのOracle APEXを有効化する
ほとんどの環境では基本的にOracle APEXはインストール済みです。最新版のインストールの前に、まずは現在利用可能な状況になっているかの確認について行っておくとよいかと思います。最新版インストール後に繋がらないとなった時の切り分けとして有用かと思います。
ここでは12cR1 シングルテナント構成のコンテナ・データベース(PDB名はorclpdb)、OSはLinuxを想定しています。
インストールバージョンの確認
以下のSQLにより、インストールされているかを確認します。
$ sqlplus / as sysdba
SQL> -- インストールされている場合は下記のようにVALIDが戻されます。
SQL> SELECT STATUS FROM DBA_REGISTRY WHERE COMP_ID = 'APEX';
STATUS
--------------------------------------------
VALID
CDB及びPDBに同じバージョンのOracle APEXがインストールされていることを確認できます。
$ sqlplus / as sysdba
SQL> col COMP_NAME for a30
SQL> col NAME for a20
SQL> col VERSION for a15
SQL> select r.COMP_NAME, r.VERSION, c.NAME, c.CON_ID
2 from CDB_REGISTRY r, V$CONTAINERS c
3 where r.CON_ID=c.CON_ID and r.COMP_ID='APEX'
4 order by CON_ID;
COMP_NAME VERSION NAME CON_ID
------------------------------ --------------- -------------------- ----------
Oracle Application Express 4.2.5.00.08 CDB$ROOT 1
Oracle Application Express 4.2.5.00.08 PDBORCL 3
2 rows selected.
注意点として、CDBでのインストールバージョンに各PDBが紐づいてしまうため、マルチテナント環境ではCDBでのインストールはせず、PDBごとのインストールが勧められています。
CDBで確認した場合の初期状態ではCDB(付随してPDB)にインストールされています。
参考資料
https://blogs.oracle.com/UPGRADE/entry/apex_in_pdb_does_not
Oracle 公式ブログ
Oracle APEX接続設定
初期化パラメータの設定
初期化パラメータの設定を確認します。
$ sqlplus / as sysdba
SQL> -- 共有サーバ設定(共有サーバを利用します。0の場合は5に変更してください。性能的にも5以上が良いです。)
SQL> show parameter shared_servers
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer
shared_servers integer 1
SQL> alter system set shared_servers = 5;
SQL> alter system set max_shared_servers = 5;
SQL> show parameter shared_servers
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 5
shared_servers integer 5
SQL> -- ジョブのキュー設定(20未満の場合は20以上に変更してください。)
SQL> show parameter job_queue_processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 0
SQL> alter system set job_queue_processes = 20;
SQL> show parameter job_queue_processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 20
ANONYMOUSユーザのアンロック
ANONYMOUSユーザをアンロックします。このユーザがロック状態だと、認証画面が表示されないので忘れずに行います。(認証画面が表示されず、ベーシック認証を求められる状態になります。)
$ sqlplus / as sysdba
SQL> -- ANONYMOUS のアカウントをアンロックします。
SQL> ALTER USER ANONYMOUS ACCOUNT UNLOCK;
SQL> alter session set container = pdborcl;
SQL> -- PDB の ANONYMOUS のアカウントもアンロックします。
SQL> ALTER USER ANONYMOUS ACCOUNT UNLOCK;
接続ポート有効化
SELECT結果に0が戻る場合は、ポート番号を設定する必要があります。PDB毎にポートを設定します。ここではHTTPSでの接続設定を行います。
$ sqlplus / as sysdba
SQL> alter session set container = pdborcl;
SQL> -- HTTPの確認(0の場合は無効状態)
SQL> SELECT DBMS_XDB_CONFIG.GETHTTPPORT FROM DUAL;
SQL> -- HTTPSの確認(0の場合は無効状態)
SQL> SELECT DBMS_XDB_CONFIG.GETHTTPSPORT FROM DUAL;
SQL>
SQL> -- 以下の文でポート番号の設定(変更)が可能です。
SQL> EXEC DBMS_XDB.SETHTTPPORT(0);
SQL> EXEC DBMS_XDB_CONFIG.SETHTTPSPORT(5501);
SQL> SELECT DBMS_XDB_CONFIG.GETHTTPSPORT FROM DUAL;
GETHTTPSPORT
------------
5501
ADMINユーザのパスワード変更
ADMIN(APEXのログインユーザ)のパスワード変更をします。初回ログイン時に利用され、ログイン時にパスワード変更が求められます。${ORACLE_HOME}/apexにスクリプトがあります。
$ cd ${ORACLE_HOME}/apex
$ sqlplus / as sysdba
SQL> alter session set container = pdborcl;
SQL> @apxchpwd.sql
Enter a value below for the password for the Application Express ADMIN user.
Enter a password for the ADMIN user [] <パスワードを入力>
Session altered.
...changing password for ADMIN
PL/SQL procedure successfully completed.
埋込みPL/SQLゲートウェイの構成
下記SQLファイルにて埋込みPL/SQLゲートウェイが構成できます。埋込みPL/SQLゲートウェイを構成すると、Webサーバを構成せずにブラウザから、Oracle APEXへ接続できます。埋込みPL/SQLゲートウェイの利用は、開発環境のみの利用が推奨されていますので注意してください。
$ cd ${ORACLE_HOME}/apex
$ pwd
$ sqlplus / as sysdba
SQL> -- apex_epg_config.sql構成スクリプトを実行します。後ろに ORACLE_HOME のパスを指定してください。
SQL> -- この実行により埋込みPL/SQLゲートウェイが構成されます。
SQL> alter session set container = pdborcl;
SQL> @apex_epg_config.sql < ORACLE_HOME のパス >
SQL>
SQL> -- DAD List に APEX と表示されることを確認します
SQL> set serveroutput on
SQL> DECLARE
2 outList dbms_epg.varchar2_table;
3 out VARCHAR2(4000);
4 vCnt NUMBER;
5 BEGIN
6 DBMS_EPG.GET_DAD_LIST(DAD_NAMES => outList);
7
8 DBMS_OUTPUT.PUT_LINE('DAD List');
9 DBMS_OUTPUT.PUT_LINE('--------------------');
10 vCnt := outList.FIRST;
11 LOOP
12 EXIT WHEN(vCnt IS NULL);
13 DBMS_OUTPUT.PUT_LINE(outList(vCnt));
14 vCnt := outList.NEXT(vCnt);
15 END LOOP;
16 END;
17 /
DAD List
--------------------
APEX
PL/SQL procedure successfully completed.
リモート接続のためのローカル以外のポート許可
必要な場合は、以下のパッケージにてローカル以外でのリスニングの許可を行ってください。
設定値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 /
リスナーの確認
HTTPをリスニングしているか確認します。
$ lsnrctl status LISTENER
-- ※以下のような記載があることを確認
12cR1 CDB環境での確認
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=)(PORT=5501))(Security=(my_wallet_directory=/u01/app/oracle/admin/orcl/xdb_wallet))(Presentation=HTTP)(Session=RAW))
上記の表示がされていない場合、リスニングされていません。しばらく待ってもリスニングされない場合は、構成内容を再度見直して下さい。
“HOST=”がAPEXへ接続する時に、ブラウザのURLに指定するIPアドレスとなります。”PORT=”がポート番号です。
Oracle APEXへの接続
ブラウザでOracle APEXへ接続します。
まずは以下のURLでADMINパスワードの変更を行ってください。
https://[DBサーバIP]:5501/apex/apex_admin
パスワードは数字、大文字、記号(指定されたもの)を必ず1つは入れないとNGとなりますので、ご注意ください。
以下のURLからログインできるようになります(パスワード変更後は勝手に移動します)。
https://[DBサーバIP]:5501/apex/
接続がうまくいかない場合
ウェブブラウザを利用する端末で直接データベースに接続できるし、リスニングもしているという場合は、ポートがかぶっていないか、ファイアウォールでの拒否をしていないかなど、OSやネットワーク設定の確認を行ってみてください。ちなみに筆者環境ではMicrosft Edgeでは接続できませんでした。ブラウザの変更なども有効かもしれません。