2026年7月23日木曜日

Oracle APEXが構成済みのデータベースにOracle Backend for Firebaseを構成する

Oracle REST Data Servicesは、Oracle Databaseに保存されているデータを色々な方法で操作できるようにしています。その機能のひとつとして、Oracle Backend for Firebaseが追加されています。Oracle Backend for Firebase(以下、Fusabase)はORDS上で動作するBackend as a Service(BaaS)機能であり、FirebaseライクなSDKやAPIを提供することで、Firebaseに近い開発体験を実現します。

Fusabaseを組み込んだアプリケーションの、バックエンドとなるデータベースはOracle Databaseです。そのため、同じデータベースに構成されていれば、APEXからも同じデータを操作できます。

Fusabaseのプロダクト・マネージャーが、オラクルの公式ブログにてFusabaseについて紹介しています。公式ドキュメントへのリンクやLiveLabs(JavaScript/WebiOSAndroid)のリンクも紹介されています。Fusabaseを始めるための、良い紹介記事です。

Introducing Oracle Backend with Firebase APIs: Build Mobile and Web Apps on Oracle AI Database

本記事ではFusabaseを、United Codes社が提供しているuc-local-apex-devを使って作成したOracle Database FreeとORDS、APEXの環境に構築します。

作業はMacBook ProのmacOSで実施します。コンテナ実行環境としてDocker + Colimaを使用します。

以前にUC Local APEX Devを使ったAPEXの環境作成手順を紹介しています。


手元のコンピューターにDockerまたはPodmanの実行環境が準備できていれば、GitHubのリポジトリをクローンして、そこでinstall.shを実行すると、英語のAPEXの環境ができあがります。

install.shの実行後に、日本語リソースの導入とワークスペースの作成を追加で実施します。APEXのPatch Set Bundleが入手できる場合は、Patch Set Bundleも適用します。

APEXのワークスペースとしてAPEXDEVが作成された状態から作業を始めます。データベースはコンテナlocal-26ai、ORDSはコンテナlocal-26ai-ordsとして実行されています。

参照したドキュメントは以下です。

Oracle Backend for Firebase, Release 26.1
Developer's Guide

また、LiveLabsで使用している、Fusabaseを構成したコンテナ環境に含まれる設定スクリプトも参照しました。GitHubのKillanLynch/fusabase-composeに含まれています。


初期化パラメータcompatibleを23.9.0以上にする



初期化パラメータcompatibleを23.9.0以上にします。そうでない場合、Fusabaseをインストールするコマンドであるords fusabase installを実行したときにエラーが発生します。23.9.0以上なので、Fusabaseを構成できるデータベースは26aiです。

データベースを実行していえるコンテナに接続します。

docker exec -it local-26ai bash

% docker exec -it local-26ai bash

bash-4.4$


CDBに接続します。

sqlplus / as sysdba

bash-4.4$ sqlplus / as sysdba


SQL*Plus: Release 23.26.2.0.0 - Production on Wed Jul 22 05:24:33 2026

Version 23.26.2.0.0


Copyright (c) 1982, 2026, Oracle.  All rights reserved.



Connected to:

Oracle AI Database 26ai Free Release 23.26.2.0.0 - Develop, Learn, and Run for Free

Version 23.26.2.0.0


SQL>


初期化パラメータcompatibleを確認します。

show parameter compatible

SQL> show parameter compatible


NAME     TYPE VALUE

------------------------------------ ----------- ------------------------------

compatible     string 23.6.0

noncdb_compatible     boolean FALSE

SQL> 


compatibleが23.9.0以前のバージョンであれば、23.9.0に変更します。

ALTER SYSTEM SET COMPATIBLE='23.9.0' SCOPE=SPFILE;

SQL> ALTER SYSTEM SET COMPATIBLE='23.9.0' SCOPE=SPFILE;


System altered.


SQL>


SCOPEにSPFILEを指定しているため、変更が反映されるのはデータベースの再起動後です。ORDSからFusabaseをインストールする前に、データベースを再起動する必要があります。


VARCHAR2の最大サイズを32Kに変更する



初期化パラメータのmax_string_sizeをextendedに変更し、VARCHAR2の最大サイズを32767にします。作成済みのFREEPDB1が変更する対象です。
alter session set container = freepdb1;
alter pluggable database close immediate;
alter pluggable database open upgrade;
alter system set max_string_size = extended;
@?/rdbms/admin/utl32k.sql
alter pluggable database close;
alter pluggable database open;

SQL> alter session set container = freepdb1;


Session altered.


SQL> alter pluggable database close immediate;


Pluggable database altered.


SQL> alter pluggable database open upgrade;


Pluggable database altered.


SQL> alter system set max_string_size = extended;


System altered.


SQL> @?/rdbms/admin/utl32k.sql


Session altered.



Session altered.


DOC>#######################################################################

DOC>#######################################################################

DOC>   The following statement will cause an "ORA-01722: invalid number"

DOC>   error if the database has not been opened for UPGRADE.

DOC>

DOC>   Perform a "SHUTDOWN ABORT"  and

DOC>   restart using UPGRADE.

DOC>#######################################################################

DOC>#######################################################################

DOC>#


no rows selected


DOC>#######################################################################

DOC>#######################################################################

DOC>   The following statement will cause an "ORA-01722: invalid number"

DOC>   error if the database does not have compatible >= 12.0.0

DOC>

DOC>   Set compatible >= 12.0.0 and retry.

DOC>#######################################################################

DOC>#######################################################################

DOC>#


PL/SQL procedure successfully completed.



Session altered.



502 rows updated.



Commit complete.



System altered.



PL/SQL procedure successfully completed.



Commit complete.



System altered.



Session altered.



Session altered.



Table created.



Table created.



Table created.



Table truncated.



0 rows created.



PL/SQL procedure successfully completed.



STARTTIME

--------------------------------------------------------------------------------

07/22/2026 05:33:22.503006000



PL/SQL procedure successfully completed.


No errors.


PL/SQL procedure successfully completed.



Session altered.



Session altered.



0 rows created.



no rows selected



no rows selected


DOC>#######################################################################

DOC>#######################################################################

DOC>   The following statement will cause an "ORA-01722: invalid number"

DOC>   error if we encountered an error while modifying a column to

DOC>   account for data type length change as a result of enabling or

DOC>   disabling 32k types.

DOC>

DOC>   Contact Oracle support for assistance.

DOC>#######################################################################

DOC>#######################################################################

DOC>#


PL/SQL procedure successfully completed.



PL/SQL procedure successfully completed.



Commit complete.



Package altered.



Session altered.


SQL> alter pluggable database close;


Pluggable database altered.


SQL> alter pluggable database open;


Pluggable database altered.


SQL> 




TDEウォレットとマスターキーを構成する



TDEウォレットとマスタキーを構成します。Oracle Database Freeのコンテナ環境を前提として、ウォレットは/opt/oracle/database/FREE/tdeに構成します。

sqlplusから実行するため、コマンドの最初に!を付けています。

!mkdir -p /opt/oracle/oradata/FREE/tde
!chown -R oracle:oinstall /opt/oracle/oradata/FREE
!chmod 700 /opt/oracle/oradata/FREE/tde


SQL> !mkdir -p /opt/oracle/oradata/FREE/tde


SQL> !chown -R oracle:oinstall /opt/oracle/oradata/FREE


SQL> !chmod 700 /opt/oracle/oradata/FREE/tde


SQL> 


ウォレット・ルートを設定します。

ALTER SESSION SET CONTAINER=CDB$ROOT;
ALTER SYSTEM SET wallet_root='/opt/oracle/oradata/FREE' SCOPE=SPFILE;


SQL> ALTER SESSION SET CONTAINER=CDB$ROOT;


Session altered.


SQL> ALTER SYSTEM SET wallet_root='/opt/oracle/oradata/FREE' SCOPE=SPFILE;


System altered.


SQL> 


一旦、データベースを再起動しcompatibleとwallet_rootの設定をデータベースに反映します。

shutdown immediate
startup

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.


Total System Global Area 1603386016 bytes

Fixed Size     5020320 bytes

Variable Size   536870912 bytes

Database Buffers 1056964608 bytes

Redo Buffers     4530176 bytes

Database mounted.

Database opened.

SQL> 


キーストアを構成し、マスターキーを作成します。
ALTER SYSTEM SET tde_configuration='KEYSTORE_CONFIGURATION=FILE' SCOPE=BOTH;
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY "<strong_keystore_password>";
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "<strong_keystore_password>" CONTAINER=ALL;
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<strong_keystore_password>" WITH BACKUP CONTAINER=ALL;
col wrl_type format a10
col wrl_parameter format a40
col status format a8
SELECT WRL_TYPE, WRL_PARAMETER, STATUS FROM V$ENCRYPTION_WALLET;

SQL> ALTER SYSTEM SET tde_configuration='KEYSTORE_CONFIGURATION=FILE' SCOPE=BOTH;


System altered.


SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY "**********";


keystore altered.


SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "**********" CONTAINER=ALL;


keystore altered.


SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "**********" WITH BACKUP CONTAINER=ALL;


keystore altered.


SQL> col wrl_type format a10

SQL> col wrl_parameter format a40

SQL> col status format a8

SQL> SELECT WRL_TYPE, WRL_PARAMETER, STATUS FROM V$ENCRYPTION_WALLET;


WRL_TYPE   WRL_PARAMETER     STATUS

---------- ---------------------------------------- --------

FILE   /opt/oracle/oradata/FREE/tde/     OPEN

FILE     OPEN

FILE     OPEN


SQL> 


ウォレットのステータスがOPENであれば、データベースの構成は完了です。

sqlplusを終了し、コンテナlocal-26aiから抜けます。

SQL> exit

Disconnected from Oracle AI Database 26ai Free Release 23.26.2.0.0 - Develop, Learn, and Run for Free

Version 23.26.2.0.0

bash-4.4$ exit

exit

% 




Oracle Backend for Firebaseをインストールする



ORDSを実行しているコンテナlocal-26ai-ordsに接続し、データベースにFusabaseをインストールします。

docker exec -it local-26ai-ords bash

% docker exec -it local-26ai-ords bash

[oracle@32c50e30cd10 ords]$ 


fusabaseのインストーラーを起動します。

cd /etc/ords/config
/opt/oracle/ords/bin/ords --config /etc/ords/config fusabase install


使用する接続プールとしてdefaultの1を選択します。

[oracle@32c50e30cd10 ords]$ cd /etc/ords/config

[oracle@32c50e30cd10 config]$ /opt/oracle/ords/bin/ords --config /etc/ords/config fusabase install


ORDS: Release 26.2 Production on Wed Jul 22 06:05:10 2026


Copyright (c) 2010, 2026, Oracle.


Configuration:

  /etc/ords/config


Oracle Backend for Firebase - Interactive Install


  Enter a number to select the database pool to install/upgrade FUSABASE.

    [1] default      jdbc:oracle:thin:@//26ai:1521/FREEPDB1

  Choose [1]: 


2を選択し、暗号化用のパスフレーズを設定します。

  Enter a number to update the value or select option A to Accept and Continue

    [1] Enable Feature FUSABASE: Yes

    [2] Encryption passphrase for FUSABASE: <generate>

    [A] Accept and Continue - Update configuration

    [Q] Quit - Do not proceed. No changes

  Choose [A]: 2


Sを選択し、パスフレーズとなる文字列を入力します。

  Enter your choice for the encryption passphrase for FUSABASE:

    [S] Specify your own encryption passphrase

    [G] Generate encryption passphrase

    [C] Cancel - No Changes

  Choose [G]: S

  Enter the encryption passphrase for FUSABASE: ***************

  Enter a number to update the value or select option A to Accept and Continue

    [1] Enable Feature FUSABASE: Yes

    [2] Encryption passphrase for FUSABASE: <specified encryption key>

    [A] Accept and Continue - Update configuration

    [Q] Quit - Do not proceed. No changes

  Choose [A]: 


Aを選択し、Fusabaseのインストールを開始します。

Enter the administrator usernamesysを入力し、SYS AS SYSDBAのパスワードを入力します。SYSのパスワードは、GitHubからクローンしたuc-local-apex-devの.envファイル内に、ORACLE_PWDに設定する文字列として記載されています。

  Enter a number to update the value or select option A to Accept and Continue

    [1] Enable Feature FUSABASE: Yes

    [2] Encryption passphrase for FUSABASE: <specified encryption key>

    [A] Accept and Continue - Update configuration

    [Q] Quit - Do not proceed. No changes

  Choose [A]: A

  Provide database user name with administrator privileges.

    Enter the administrator username: sys

  Enter the database password for SYS AS SYSDBA: **********

Connecting to database user: SYS AS SYSDBA url: jdbc:oracle:thin:@//26ai:1521/FREEPDB1


Retrieving information.

The setting named: feature.fusabase was set to: true in configuration: default

The setting named: fusabase.secret.encKey was set to: ****** in configuration: default

Created folder /etc/ords/config/logs

The log file is defaulted to the current working directory located at /etc/ords/config/logs

Installing Oracle Backend for Firebase version 26.2.0-260613 in FREEPDB1

Completed installation for Oracle Backend for Firebase version 26.2.0-260613. Elapsed time: 00:00:02.443 


[oracle@32c50e30cd10 config]$ 


インストールが正常に終了すると、Fusabaseの構成は完了です。

ORDSのコンテナから抜け、ORDSのコンテナを再起動します。

exit
docker restart local-26ai-ords

[oracle@32c50e30cd10 config]$ exit

exit

% docker restart local-26ai-ords

local-26ai-ords

ynakakoshi@Ns-Macbook ~ % 


この状態でいかのURLにアクセスし、トップページにOracle Backend for Firebaseが存在することを確認します。



プロジェクト用スキーマを作成する


LiveLabs向けの構成に合わせて、プロジェクト用のスキーマとしてTESTUSERを作成します。パスワードはTESTPWDとします。

ホストでSQLclを実行し、FREEPDB1に接続します。

sql -name local-26ai-sys

% sql -name local-26ai-sys


SQLcl: 水 7月 22 15:25:36 2026のリリース26.1 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


接続先:

Oracle AI Database 26ai Free Release 23.26.2.0.0 - Develop, Learn, and Run for Free

Version 23.26.2.0.0


SQL> 


スキーマTESTUSERを作成します。

CREATE USER testuser IDENTIFIED BY testpwd QUOTA UNLIMITED ON users;
GRANT connect, resource TO testuser;
GRANT CREATE SESSION, RESOURCE, DBFS_ROLE TO testuser;
GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO testuser;
GRANT CREATE ANY DIRECTORY TO testuser;

SQL> CREATE USER testuser IDENTIFIED BY testpwd QUOTA UNLIMITED ON users;


User TESTUSERは作成されました。


SQL> GRANT connect, resource TO testuser;


Grantが正常に実行されました。


SQL> GRANT CREATE SESSION, RESOURCE, DBFS_ROLE TO testuser;


Grantが正常に実行されました。


SQL> GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO testuser;


Grantが正常に実行されました。


SQL> GRANT CREATE ANY DIRECTORY TO testuser;


Grantが正常に実行されました。


SQL> 


Fusabaseをスキーマに対して有効にするには、OBAAS_ADMIN.OBAAS_ENABLE_SCHEMAを呼び出す必要があります。この呼び出しは、SYS、SYSTEM以外のDBAロールを持つユーザーによって実行します。

OBAAS_ADMIN.OBAAS_ENABLE_SCHEMAを実行するためのユーザーを、fusabase_dbaとして作成します。

CREATE USER fusabase_dba IDENTIFIED BY <パスワード> QUOTA UNLIMITED ON USERS;
GRANT baas_dba, dba to fusabase_dba;

SQL> create user fusabase_dba identified by ********** quota unlimited on users;


User FUSABASE_DBAは作成されました。


SQL> GRANT baas_dba, dba to fusabase_dba;


Grantが正常に実行されました。


SQL> 


SYSから一旦抜けて、作成したfusabase_dbaで接続し直します。

exit
sql fusabase_dba@localhost/freepdb1

SQL> exit

Oracle AI Database 26ai Free Release 23.26.2.0.0 - Develop, Learn, and Run for Free

Version 23.26.2.0.0から切断されました

ynakakoshi@Ns-Macbook ~ % sql fusabase_dba@localhost/freepdb1


SQLcl: 水 7月 22 15:37:23 2026のリリース26.1 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


パスワード (**********?) **********

Last Successful login time: 水 7月  22 2026 15:37:25 +09:00


接続先:

Oracle AI Database 26ai Free Release 23.26.2.0.0 - Develop, Learn, and Run for Free

Version 23.26.2.0.0


SQL> 


FusabaseをスキーマTESTUSERに対して有効にします。
BEGIN
  OBAAS_ADMIN.OBAAS_ENABLE_SCHEMA(
    'TESTUSER',
    'BASE_PATH',
    'testuser',
    FALSE
  );
END;
/
COMMIT;

SQL> BEGIN

  2    OBAAS_ADMIN.OBAAS_ENABLE_SCHEMA(

  3      'TESTUSER',

  4      'BASE_PATH',

  5      'testuser',

  6      FALSE

  7    );

  8  END;

  9  /

 10* COMMIT;


PL/SQLプロシージャが正常に完了しました。



コミットが完了しました。


SQL> 


以上で、Fusabaseの構成は完了です。


Fusabaseに接続する



作成したユーザーTESTUSERにて、Fusabaseに接続します。

http://localhost:8181/ords

Oracle Backend for Firebaseを実行します。


ユーザーTESTUSERサインインします。


プロジェクトの作成画面が開きます。

Create projectをクリックし、LiveLabsで使用できるプロジェクトrecipe-workshopを作成します。


プロジェクト名はrecipe-workshopとし、Set up using quickstartを選択します。

Create Projectをクリックします。


プロジェクトrecipe-workshopが作成されました。作成されたプロジェクトを開きます。


以上で、FusabaseのLiveLabs(WebiOSAndroid)のGet Startedまでの作業完了しています。

それぞれのLab 1、Task 2のSet starter security rulesから作業を進めることができます。


APEXからFusabaseのデータを参照する



Fusabaseを構成すると、コネクション・プールの設定からplsql.gateway.modeが取り除かれることがありました。APEXが動作するには、plsql.gateway.modeproxiedであることが必須なので、そのような場合は設定をやり直し、ORDSを再起動します。

docker exec local-26ai-ords bash -c \
"ords --config /etc/ords/config config --db-pool default set plsql.gateway.mode proxied"
docker restart local-26ai-ords

% docker exec local-26ai-ords bash -c \

"ords --config /etc/ords/config config --db-pool default set plsql.gateway.mode proxied"


ORDS: Release 26.2 Production on Wed Jul 22 07:25:08 2026


Copyright (c) 2010, 2026, Oracle.


Configuration:

  /etc/ords/config


The setting named: plsql.gateway.mode was set to: proxied in configuration: default

% docker restart local-26ai-ords

local-26ai-ords

% 


APEXの管理サービスにサインインし、すでに作成済みのワークスペースAPEXDEVにスキーマTESTUSERを割り当てます。

UC Local APEX Devで作成したAPEX環境の管理者ユーザーADMINのデフォルトのパスワードは、データベース・ユーザーSYSおよびSYSTEMのパスワードと同じです。

ワークスペースの管理を開きます。


ワークスペースとスキーマの割り当ての管理を開きます。


スキーマの追加をクリックします。


追加するスキーマとして既存を選択し、へ進みます。


ワークスペースAPEXDEVを選択し、へ進みます。


スキーマとしてTESTUSERを選択し、APEX権限を付与オンにします。

へ進みます。


確認画面が開きます。スキーマの追加を実行します。


ワークスペースAPEXDEVにスキーマTESTUSERが追加されました。


管理サービスからサインアウトし、ワークスペースAPEXDEVにサインインします。

ユーティリティサンプル・データセットを開き、スキーマTESTUSERにサンプル・データセットのEMP/DEPTをインストールします。


サンプル・データセットのEMP/DEPTインストールします。


データセットのインストール先のスキーマとしてTESTUSERを選択します。

へ進みます。


データセットのインストールを実行します。


スキーマTESTUSERに、表EMP、DEPTおよびビューEMP_DEPT_Vが作成されました。

終了します。


Fusabaseの管理画面に移動します。

先ほど作成したプロジェクトrecipe-workshopのサイド・メニューからDatabaseを開きます。

Relational to collection mappingのタブを開きます。

Link existing tablesをクリックします。


Parent table nameempとします。

このページでは親子関係のある表を登録し、それから1つのJSON Duality Viewを作成します。今回は確認のみなので、親子関係は登録しません。

Saveをクリックします。


表EMPがコレクションempにマッピングされました。Dataタブを開きます。


Dataビューから表EMPの内容がドキュメントとして参照できます。


従業員SMITHのドキュメントを見つけ、More actionsView/Alter Documentを実行します。


Editをクリックし、編集モードに移ります。


Salを800から888に変更し、Saveします。


Oracle Backend for Firebase(Fusabase)から、コレクションempに含まれるドキュメントが更新されました。


APEXから、スキーマTESTUSERにある表EMPの行が更新されていることを確認します。

APEXのオブジェクト・ブラウザに移ります。

スキーマにTESTUSERを選択し、表EMPを開きます。データ・タブを選択し、表EMPに含まれるデータを一覧します。

表の従業員SMITHの列SALの値が888になっていることが確認できます。


オブジェクト・ブラウザのビューより、EMP$BAASを選択します。

DDLより、ビューEMP$BAASがJSON Duality Viewとして作成されていることが確認できます。
CREATE OR REPLACE FORCE EDITIONABLE JSON RELATIONAL DUALITY VIEW "EMP$BAAS" AS
SELECT JSON {
    'ename'      : "ENAME",
    'job'        : "JOB",
    'mgr'        : "MGR",
    'hiredate'   : "HIREDATE",
    'sal'        : "SAL",
    'comm'       : "COMM",
    'deptno'     : "DEPTNO",
    'OID'        : SYS_MAKE_OID_FROM_PK("EMPNO"),
    '_id'        : "EMPNO",
    'parent_oid' : '_docId'
}
FROM "EMP"
WITH INSERT UPDATE DELETE;

Oracle Backend for Firebase(Fusabase)では、JSON Duality Viewをコレクションとして扱うことにより、表に保存されているデータを直接操作することができます。

GUIから作成できるJSON Duality Viewには制約がありますが、コマンド・ラインからもOracle Backend for Firebaseで操作できるJSON Duality Viewを作成できるようです。ドキュメントの14.3 Standalone Duality Views (Advanced)に、作成するJSON Duality Viewが満たすべき条件が説明されています。

リードオンリーであれば、Join collectionsとして表を元にしたコレクションを作成できます。Join collectionは、JSON Duality Viewではなく、列DATAとしてJSONを返す通常のビューとして作成されます。


今回の記事は以上になります。

すでに作成済みの環境を使って、Oracle Backend for FirebaseのLiveLabsを試してみましょう。