Oracle APEXでは、開発環境を含まない実行環境のみのインストールができます。通常はapexins.sql(またはapexins[123].sql)で開発環境込みでデータベースにインストールしますが、実行環境のみはapxrtins.sql(apxrtins[123].sql)を使ってインストールします。
Oracle APEXの開発環境というのも実際は、4000番代のアプリケーションIDが付与されたOracle APEXのアプリケーションです。これらのアプリケーションが最初からインストールされていなければアクセスもできないので、特に外部公開サイトではセキュリティ面で有利になります。
開発環境が含まれていない環境でどのようにOracle APEXのアプリケーションをインストールするかというと、SQLPlusなどのコマンドライン・ツールとAPEX_APPLICATION_INSTALLパッケージを使用します。相当以前のバージョンから、このパッケージは存在しますが、20.1の日本語マニュアルはこちらです。
このAPEX_APPLICATION_INSTALLとAPEX_EXPORTパッケージを活用することで、CI/CDのサイクルに組み込むこともできます。
エクスポートしたアプリケーションがf102.sqlとして存在している場合、以下のようにインポートを実行します。
オンプレミスの場合は、デフォルト・パーシング・スキーマとなるデータベース・アカウントで接続します。Autonomous Databaseの場合は、ワークスペースにログインするユーザー自体がデータベース・アカウントなので、そのアカウントで接続します。
実際のインポート処理は以下のように実行します。APEX_APPLICATION_INSTALLのいくつかのプロシージャを実行し、ワークスペースやスキーマ、アプリケーションIDなどを指定した上で、エクスポートされたアプリケーションであるSQLファイルを実行します。
SQL> begin
2 apex_application_install.set_workspace('APEXDEV');
3 apex_application_install.generate_application_id;
4 apex_application_install.generate_offset;
5 apex_application_install.set_schema('APEXDEV');
6 apex_application_install.set_application_alias('F' || apex_application_install.get_application_id );
7 end;
8 /
PL/SQL procedure successfully completed.
SQL> @f102.sql
--application/set_environment
APPLICATION 102 - タスク
--application/delete_application
--application/create_application
--application/shared_components/navigation/lists/デスクトップ・ナビゲーション・メニュー
--application/shared_components/navigation/lists/デスクトップ・ナビゲーション・バー
--application/shared_components/navigation/lists/ページ・ナビゲーション
--application/shared_components/navigation/lists/アプリケーション構成
--application/shared_components/navigation/lists/ユーザー・インタフェース
--application/shared_components/navigation/lists/アクティビティ・レポート
[中略]
--application/pages/page_10051
--application/pages/page_10053
--application/pages/page_10054
--application/pages/page_10060
--application/pages/page_10061
--application/deployment/definition
--application/deployment/checks
--application/deployment/buildoptions
--application/end_environment
...done
SQL>
エクスポートしたのと同じワークスペースにインポートする場合は、もっと指定は単純です。
SQL> begin
2 apex_application_install.set_application_id(102);
3 apex_application_install.generate_offset;
4 apex_application_install.set_application_alias('TASKS1');
5 end;
6 /
PL/SQL procedure successfully completed.
SQL> @f102.sql
--application/set_environment
APPLICATION 102 - タスク
--application/delete_application
--application/create_application
--application/shared_components/navigation/lists/デスクトップ・ナビゲーション・メニュー
--application/shared_components/navigation/lists/デスクトップ・ナビゲーション・バー
--application/shared_components/navigation/lists/ページ・ナビゲーション
--application/shared_components/navigation/lists/アプリケーション構成
--application/shared_components/navigation/lists/ユーザー・インタフェース
--application/shared_components/navigation/lists/アクティビティ・レポート
[中略]
--application/pages/page_10051
--application/pages/page_10053
--application/pages/page_10054
--application/pages/page_10060
--application/pages/page_10061
--application/deployment/definition
--application/deployment/checks
--application/deployment/buildoptions
--application/end_environment
...done
SQL>
インポートに失敗した場合には、エラー・メッセージが表示されます。
SQL> begin
2 apex_application_install.set_application_id(102);
3 apex_application_install.generate_offset;
4 apex_application_install.set_application_alias('TASKS');
5 end;
6 /
PL/SQL procedure successfully completed.
SQL> @f102.sql
--application/set_environment
APPLICATION 102 - タスク
--application/delete_application
--application/create_application
begin
*
ERROR at line 1:
ORA-00001: unique constraint (APEX_200200.WWV_FLOWS_ALIAS_IDX) violated
ORA-06512: at "APEX_200200.WWV_FLOW_API", line 2870
ORA-06512: at line 2
すでに別のアプリケーションで、アプリケーションの別名が使用済みであることがわかります。
SQL> col application_id format 99999 heading id
SQL> col application_name format a40 heading name
SQL> col alias format a20 heading alias
SQL> select application_id, application_name, alias from apex_applications;
id name alias
------ ---------------------------------------- --------------------
101 XLIFFの翻訳 XLIFFの翻訳
100 世界食堂 WORLDDINER
105 世界食堂 - 完成品 CWORLDDINER
103 タスク TASKS
1100 タスク F
102 タスク TASKS1
6 rows selected.
SQL>