はじめに
Oracle Cloud Infrastructure(OCI)で最もよく利用される VMタイプの Database Cloud Service(DBCS)には、Oracle Application Express(APEX)が構築されていません。
おそらく、バージョンアップや構成の自由度を考慮してのことと思われます。
実際にAPEXを構築しようとマニュアルを開いてみると、どこを参照するのか少しわかりづらい部分があったので、構築手順を記録しておきたいと思います。
ちなみに、今回参照したマニュアルは以下の2つです。
1.Oracle® Application Express インストレーション・ガイド リリース19.2
2.Oracle® REST Data Services インストレーション、構成および開発ガイド リリース19.2
この記録の中では、1.を「APEXマニュル」、2.を「ORDSマニュアル」と呼ぶことにします。
0.前提事項
APEXマニュアルには以下の記載があります。
2.1 Oracle Database CloudでのOracle Application Expressへのアクセスについて Oracle Application Expressは、Oracle Cloud InfrastructureのExadata Cloud ServiceとDatabase Cloud Serviceで使用できます。ただし、オンプレミスのインストール・プロセスに従って、またはTerraformなどのクラウド・ツールを使用してOracle Application Expressをインストールおよび有効化するには、データベースを手動でカスタマイズする必要があります。 |
DBCSへのAPEXの構築も、オンプレミスと同様の手順で構築すればよいことがわかります。
また、APEXのマニュアルには以下の記載もあります。
3.1 インストールの選択項目の理解
ヒント:すべてのプラガブル・データベース(PDB)がOracle Application Expressを使用し、そのすべてが正確に同じリリースとパッチ・セットのOracle Application Expressを実行する必要があるホスティング企業またはインストールを除いて、大部分のユースケースでは、ルート・コンテナ・データベースからOracle Application Expressを削除することをお薦めします。 |
3.3 様々なPDBへのApplication Expressのインストール
様々なバージョンのOracle Application Expressを様々なPDBにインストールできます。 Application Expressがコンテナ・データベースにインストールされていない場合、必要に応じて、各PDB内にローカルのApplication Expressをインストールできます。 |
以上より、APEXをPDBにインストールすることにします。
1.APEXのインストール
APEXのインストールは、APEXマニュアル「4 Application ExpressのインストールとOracle REST Data Servicesの構成」を参照します。
具体的な作業手順は「4.4 Oracle Application Expressのダウンロードとインストール」を参照します。
それでは、マニュアルに沿って進めていきましょう。
1-1.APEXのダウンロード
まずは「4.4.1 Application Expressのインストール」の手順1.にあるとおり、以下のサイトから All languages版をダウンロードします。
この記事を書いている時点(2020/9)では、最新版は APEX 20.1 になっているので、そちらをダウンロードすることにします。
※今後のマニュアルの記載は一部を「20.1」と読み替えることにします。(本来はAPEX 20.1 のマニュアルを参照すべきところです....)
1-2.APEXのインストール
APEXマニュアルの手順2.以降を進めていきます。
作業は oracleユーザーで実施します。(opcユーザーでSSH接続後、 sudo su - oracle
)
ダウンロードしたzipファイルはどこに展開してもよいのですが、後々わかりやすい場所に展開するのがよいと思います。
今回は $ORACLE_HOME/apex20 というディレクトリーに展開することにします。
unzip apex_20.1.zip
作業ディレクトリをapexに変更します。
cd apex
SQL*PlusにSYSDBAロールで接続します。
sqlplus / as sysdba
APEXをインストールするPDBに移動します。(今回、APEXをインストールするPDB名は[pdb1」です)
ALTER SESSION SET CONTAINER = pdb1;
完全開発環境で、APEXをインストールします。
インストールには以下のスクリプトを実行します。(各パラメータの意味はマニュアルを参照ください)
@apexins.sql SYSAUX SYSAUX TEMP /i/
@apexins.sql SYSAUX SYSAUX TEMP /i/
timing for: Phase 3 (Switch)
Elapsed: 00:01:14.30
timing for: Complete Installation
Elapsed: 00:16:19.60
・
・
インストールには15分程度かかりました。
1-3.インスタンス管理アカウントの作成
続いて、APEXマニュアル「4.4.2 インスタンス管理アカウントの作成または更新」を参考に、インスタンス管理者アカウントを作成します。
ここで言う「インスタンス」とは、データベースではなく、APEXのことなので、APEXの管理者アカウントを作成します。
APEXの管理者はワークスペースのプロビジョニング、インスタンス設定の構成、セキュリティの管理など、APEXインスタンス全体の管理を担当するスーパーユーザーです。
APEXマニュアル「4.4.2.3 apxchpwd.sqlの実行」にあるとおり、インストールするPDBに接続した状態で、以下のスクリプトを実行します。
@apxchpwd.sql
ユーザー名、パスワード、電子メール・アドレスを入力するよう求められるので、必要な内容を入力していきます。
SQL> @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] xxxxxx@xxxxxx.xxx
Enter ADMIN's password []
Created instance administrator ADMIN.
1-4.APEX_PUBLIC_USERアカウントの構成
続いて、APEXマニュアル「4.4.4 APEX_PUBLIC_USERアカウントの構成」を参考に、APEX_PUBLIC_USERアカウントの構成を行います。(APEX_PUBLIC_USERはデータベース・ユーザーです)
まずは、APEX_PUBLIC_USERアカウントのロックを解除するため、以下のSQLを実行します。
ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK;
続いて、APEX_PUBLIC_USERアカウントのパスワードを変更するため、以下のSQLを実行します。
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY new_password;
※new_passwordには、データベースのパスワード・ポリシーが適用されます。(デフォルトでは、大文字2文字以上、数字2文字以上、特殊文字2文字以上、合計13文字以上が必要です)
※Oracle Database 11g以降のデフォルト・プロファイルでは、パスワードの有効期限は180日となっています。APEX_PUBLIC_USERのパスワードが無効になると、APEXが利用できなくなるため、必要に応じて、パスワードの有効期限を変更してください。
####1-5.RESTfulサービスの構成
続いて、APEXマニュアル「4.4.5 RESTfulサービスの構成」を参考に、RESTfulサービスを構成します。
以下のスクリプトを実行します。
@apex_rest_config.sql
APEX_LISTENER、APEX_REST_PUBLIC_USERアカウントのパスワードを入力するよう求められるので、必要な内容を入力していきます。(いずれもデータベース・ユーザーのため、データベースのパスワード・ポリシーが適用されます。)
SQL> @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
2.Oracle REST Data Services(ORDS)のインストール
次に、Oracle REST Data Services(ORDS)のインストールに進みます。
マニュアルの順序で言うと、APEXマニュアル「4.5 Oracle REST Data Servicesのダウンロードとインストール」を参照するのですが、APEXマニュアルには詳細な記載がないため、途中からはORDSマニュアルも見ながら進めていきます。
2-1.ORDSのダウンロード
まずは「4.5.1 Oracle REST Data Servicesのダウンロード」の手順1.にあるとおり、以下のサイトから Oracle REST Data Servicesをダウンロードします。
この記事を書いている時点(2020/9)では、最新版は APEX 20.2.1 になっているので、そちらをダウンロードすることにします。
※今後のマニュアルの記載は一部を「20.2.1」と読み替えることにします。(本来はORDS 20.2.1 のマニュアルを参照すべきところです....)
ダウンロードしたzipファイルはどこに展開してもよいのですが、後々わかりやすい場所に展開するのがよいと思います。
今回は $ORACLE_HOME/apex20 というディレクトリーに展開することにします。
unzip ords-20.2.1.227.0350.zip
2-2.データベース接続情報の確認
tnsnames.oraの中身を確認しておきます。
cat $ORACLE_HOME/network/admin/tnsnames.ora
デフォルトでは、以下の接続が設定されています。
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_DBSE =
(ADDRESS = (PROTOCOL = TCP)(HOST = hhhhhh)(PORT = 1521))
DBSE_NRT1VT =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hhhhhh)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DBSE_nrt1vt.sub0123456789.vcnxxxxxxtokyo.oraclevcn.com)
)
)
HOST、PORT、SERVICE_NAME を控えておきます。
デフォルトで設定されている SERVICE_NAME は CDB に接続するためのものです。
PDBに接続する際は接頭辞(今回の場合は「DBSE_nrt1vt」)を PDB名(今回の場合は「pdb1」)に置き換えます。
2-3.ORDSのインストール
ORDSのインストールの詳細は、ORDSマニュアル「1.3.4.2 コマンドライン・プロンプトを使用した拡張インストール 」を見ながら進めていきます。
ORDSファイルを展開したディレクトリーで、以下のコマンドを実行します。
java -jar ords.war install advanced
ここは入力項目が非常に多いので、注意深く進める必要があります。
各項目の説明については、ORDSマニュアル「1.3.4.2.1 拡張インストール・プロンプトの説明 」に説明があるので、そちらを参照ください。
それでは、順を追って見ていきましょう。
コマンド実行後、ORDS構成ファイルの格納場所を指定します。
[oracle@hhhhhh apex20]$ java -jar ords.war install advanced
This Oracle REST Data Services instance has not yet been configured.
Please complete the following prompts
Enter the location to store configuration data: config
2-2.で確認した情報を元に、データベース接続情報を入力します。
SERVICE_NAME の接頭辞はPDB名に置き換える必要があります。
Specify the database connection type to use.
Enter number for [1] Basic [2] TNS [3] Custom URL [1]:1
Enter the name of the database server [localhost]:hhhhhh
Enter the database listen port [1521]:
Enter 1 to specify the database service name, or 2 to specify the database SID [1]:1
Enter the database service name:pdb1.sub0123456789.vcnxxxxxxtokyo.oraclevcn.com
ORDS_PUBLIC_USERのパスワードを設定します。
※データベース・ユーザーのパスワード・ポリシーに従う必要があります。
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:@//hhhhhh:1521/pdb1.sub0123456789.vcnxxxxxxtokyo.oraclevcn.com
利用する表領域を指定します。
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 [USERS]:
Enter the temporary tablespace for ORDS_PUBLIC_USER [TEMP]:
1-4.で設定した APEX_PUBLIC_USER のパスワードを入力します。
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:
1-5.で設定した APEX_LISTENER と APEX_REST_PUBLIC_USER のパスワードを入力します。
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]:
今回はスタンドアロン・モードを利用します。
2020-09-09T07:25:22.997Z INFO reloaded pools: []
Installing Oracle REST Data Services version 20.2.1.r2270350
... Log file written to /home/oracle/ords_install_core_2020-09-09_072523_00426.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_2020-09-09_072540_00580.log
... Log file written to /home/oracle/ords_install_apex_2020-09-09_072542_00370.log
Completed installation for Oracle REST Data Services version 20.2.1.r2270350. Elapsed time: 00:00:20.459
Enter 1 if you wish to start in standalone mode or 2 to exit [1]:
静的リソースの場所として、APEXファイルを展開したディレクトリーのapex/imagesを指定します。
Enter the APEX static resources location:/u01/app/oracle/product/19.0.0.0/dbhome_1/apex20/apex/images
プロトコル(HTTP/HTTPS)、ポート、SSL証明書情報を指定します。
Enter 1 if using HTTP or 2 if using HTTPS [1]:2
Enter the HTTPS port [8443]:
Enter the SSL hostname:mysslhost
"Enter 1 to use the self-signed certificate or 2 if you will provide the SSL certifi
cate [1]:"
ORDSが起動します。
2020-09-09T07:44:13.833Z INFO Oracle REST Data Services initialized
Oracle REST Data Services version : 20.2.1.r2270350
Oracle REST Data Services server info: jetty/9.4.28.v20200408
インストール手順の継続のため、一旦[CTRL+C]で停止します。
3.インストール後の各種作業
APEXマニュアルに戻って、インストール後の各種作業を進めていきます。
3-1.ORDSインストールの検証
APEXマニュアル「4.6.2 Oracle REST Data Servicesインストールの検証」にしたがって、ORDSインストールの検証を行うため、以下のコマンドを実行します。
java -jar ords.war validate
ORDSインストール時と同様の項目を聞かれるので、入力していきます。
[oracle@hhhhhh apex20]$ java -jar ords.war validate
Specify the database connection type to use.
Enter number for [1] Basic [2] TNS [3] Custom URL [1]:1
Enter the name of the database server [localhost]:hhhhhh
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:pdb1.sub0123456789.vcnxxxxxxtokyo.oraclevcn.com
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:@//hhhhhh:1521/pdb1.sub0123456789.vcnxxxxxxtokyo.oraclevcn.com
Retrieving information.
Oracle REST Data Services will be validated.
Validating Oracle REST Data Services schema version 20.2.1.r2270350
... Log file written to /home/oracle/ords_validate_core_2020-09-09_081258_00348.log
Completed validating Oracle REST Data Services version 20.2.1.r2270350. Elapsed time: 00:00:05.457
logファイルにエラーがないことを確認します。
3-2.静的ファイル・サポートの構成
APEXマニュアル「4.6.3 静的ファイル・サポートの構成」にしたがって、静的ファイルを構成します。
SQL*PlusにSYSDBAロールとして接続し、APEXをインストールするPDBに移動します。
(今回、APEXをインストールするPDB名は[pdb1」です)
sqlplus / as sysdba
ALTER SESSION SET CONTAINER = pdb1;
静的ファイルを構成するため、以下のスクリプトを実行します。
@apex_rest_config.sql
途中で、APEX_LISTENERとAPEX_REST_PUBLIC_USERのパスワード入力を求めらるので、1-5.で設定したパスワードを入力します。
SQL> @apex_rest_config.sql
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Enter a password for the APEX_LISTENER user []
Enter a password for the APEX_REST_PUBLIC_USER user []
...set_appun.sql
...setting session environment
PL/SQL procedure successfully completed.
・
・
・
3-3 Oracle Database 11g以降のネットワーク・サービスの有効化
Oracle Database 11g以降のバージョンで、アウトバウンド・メールを送信したり、Webサービスを使用したり、Oracle Application ExpressのPDFレポート出力を使用するには、ネットワーク・サービスを有効にする必要があります。
今回はこの手順は行いませんが、必要な場合はAPEXマニュアル「4.7 Oracle Database 11g以降のネットワーク・サービスの有効化」を参照ください。
3-4.日本語対応
画面表示を日本語対応するため、APEXマニュアル「4.11 言語変換されたバージョンのOracle Application Expressのインストール」にしたがって、日本語モジュールをインストールします。
一度、SQL*Plusを exit
コマンドで抜けて、環境変数NLS_LANGをキャラクタ・セットAL32UTF8に設定します。
NLS_LANG=American_America.AL32UTF8
export NLS_LANG
日本語モジュールのあるディレクトリーに移動します。
cd ./builder/ja
SQL*PlusにSYSDBAロールとして接続し、APEXをインストールするPDBに移動します。
(今回、APEXをインストールするPDB名は[pdb1」です)
sqlplus / as sysdba
ALTER SESSION SET CONTAINER = pdb1;
次の文を実行します。
ALTER SESSION SET CURRENT_SCHEMA = APEX_200100;
※「APEX_200100」の部分はバージョンによって異なります。
日本語用のスクリプトを実行します。
@load_ja.sql
SQL> @load_ja.sql
--application/pages/page_03050
--application/pages/page_03060
--application/pages/page_04020
--application/pages/page_04030
--application/pages/page_04040
--application/pages/page_08000
--application/end_environment
...done
Adjust instance settings
PL/SQL procedure successfully completed.
4.ファイアーウォールの設定
今回は、SSL通信ポートに8443を設定しました。
8443ポートは標準では開いてないため、2ヶ所のファイアーウォール設定を行います。
4-1.DBCSインスタンスのファイアーウォール設定
DBCSインスタンスに OPCユーザーでSSH接続し、以下のコマンドを実行します。
sudo iptables -I INPUT 8 -p tcp -m state --state NEW -m tcp --dport 8443 -j ACCEPT -m comment --comment "Required for APEX"
sudo /sbin/service iptables save
[opc@hhhhhh ~]# sudo iptables -I INPUT 8 -p tcp -m state --state NEW -m tcp --dport 8443 -j ACCEPT -m comment --comment "Required for APEX"
[opc@hhhhhh ~]$ sudo /sbin/service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
4-2.仮想クラウド・ネットワーク(VCN)のセキュリティ・リスト設定
左上三本線メニューから「ネットワーキング>仮想クラウドネットワーク」を選択し、「仮想クラウドネットワーク」画面から、DBCSの存在するVCNを選択する。
左下メニューより「セキュリティ・リスト」を選択する。
該当のセキュリティ・リストを選択し、「イングレス・ルールの追加」ボタンを押す。
「イングレス・ルールの追加」画面にて、8443ポートに対するアクセスを許可する。
5.ORDSの起動
ORDSマニュアル「1.4 スタンドアロン・モードでの実行」にしたがって、先ほど停止したORDSを起動します。
oracleユーザーに切替ます。
sudo su - oracle
ORDSを展開したディレクトリーに移動します。
cd $ORACLE_HOME/apex20
ORDSをスタンドアロン・モードで起動します。
java -jar ords.war standalone
[oracle@hhhhhh apex20]$ java -jar ords.war standalone
・
・
・
2020-09-10T02:14:15.330Z INFO Oracle REST Data Services initialized
Oracle REST Data Services version : 20.2.1.r2270350
Oracle REST Data Services server info: jetty/9.4.28.v20200408
6.APEXにアクセス
WebブラウザからAPEXにアクセスします。
https://hostname:port/apex/apex_admin
※今回はhostnameにDBCSのPublic IPを指定してアクセスしてみます。
https://xxx.xxx.xxx.xxx:8443/apex/apex_admin
APEXのAdministrasion Serviceの画面が表示されれば、インストール完了です。