Oracle Database 23c の JSON Relational Duality とはなんぞや?ってことになり、体験するには、下記の記事が素晴らしい内容でした。ありがとうございます!
ただ、これを体験するために Oracle Rest Data Service (ORDS) なるものをインストールするのですが、ついでに、ORDS をもう少し遊べるように、ORDS のインストール部分にフォーカスした内容を書いてみました。
ORDS を CDB へインストールすることで、PDB Lifecycle Management (REST API で PDB の作成や操作が可能になる)機能なども利用できるようになるのですが、少し複雑になるため本記事では触れません。また、ORDS は、APEX と組み合わせて利用されたり、MongoDB API を提供してくれたりします。
色々と機能を持っており、Oracle Database 23c Free + APEX + ORDS の組み合わせで、また違う世界に触れることができるようになるので、チャレンジをお勧めしたいところではあります(若干、挫折中...)
と言うわけで、JSON Relational Duality の記事で勉強する過程で、ちょっと強めの権限を付与したユーザで Databas Actions も利用できるようにしておくと、色々と新しい発見があったり便利になるかと思います。
前提条件
前提は、OCI 上の Oracle Linux 8 が稼働する compute instance となりますが、それ以外でも構いません。とにかく、Oracle Database 23c Free が動作しており、port 1521, 8080 にアクセスできる環境であれば良いです。
本記事では、ORDS を 23c Free が動作する環境にインストールする内容となっていますが、ORDS 自体は、shell script と WAR (Web Archive Resources) ファイルなので、Java 11 以降を動かせる OS であれば、外部に出して稼働させることも可能ですので、ORDS と 23c Free を別々の環境で動作させることもできます。(macOS では、colima で docker image を動作させつつ、macOS 側で ORDS を稼働させるなどしています)
- Database 23c Free のインストールが完了済みかつ起動していること
- port 1521, 8080 への接続を許可していること
- public IP を確認しておくこと
- パスワードは、welcome1 を前提としています。(異なる場合は、読み替えて実行してください)
Oracle Linux 8 へのインストールは、下記の記事が参考になります。ありがとうございます:
ORDS のインストール
Database 23c Free のインストールが完了したら、ORDS を PDB (freepdb1) にインストールします。
※この手順は、検証目的となり standalone mode を前提としています。
compute instance にて、下記を実行していきます:
1. ORDS のインストール
compute instance で、下記を実行:
$ sudo su -
# dnf -y install ords
# dnf install jdk-17.x86_64
2. 続いて、PDB: freepdb1 へ ORDS をインストール
# ords --config /etc/ords/config install
🐱 マークが、入力を促される部分となります:
# ords --config /etc/ords/config install
ORDS: Release 23.1 Production on Fri Apr 21 14:04:50 2023
Copyright (c) 2010, 2023, Oracle.
Configuration:
/etc/ords/config/
The configuration folder /etc/ords/config does not contain any configuration files.
Oracle REST Data Services - Interactive Install
Enter a number to select the type of installation
[1] Install or upgrade ORDS in the database only
[2] Create or update a database pool and install/upgrade ORDS in the database
[3] Create or update a database pool only
🐱 Choose [2]: エンター
Enter a number to select the database connection type to use
[1] Basic (host name, port, service name)
[2] TNS (TNS alias, TNS directory)
[3] Custom database URL
🐱 Choose [1]: エンター
🐱 Enter the database host name [localhost]: エンター
🐱 Enter the database listen port [1521]: エンター
🐱 Enter the database service name [orcl]: freepdb1 (※PDB のサービス名)
Provide database user name with administrator privileges.
🐱 Enter the administrator username: sys (SYSDBA 権限を利用します)
🐱 Enter the database password for SYS AS SYSDBA: パスワード (※welcome1)
Connecting to database user: SYS AS SYSDBA url: jdbc:oracle:thin:@//localhost:1521/freepdb1
Retrieving information.
Enter the default tablespace for ORDS_METADATA and ORDS_PUBLIC_USER [SYSAUX]: エンター
Enter the temporary tablespace for ORDS_METADATA and ORDS_PUBLIC_USER [TEMP]: エンター
Enter a number to select additional feature(s) to enable:
[1] Database Actions (Enables all features)
[2] REST Enabled SQL and Database API
[3] REST Enabled SQL
[4] Database API
[5] None
🐱 Choose [1]: エンター
Enter a number to configure and start ORDS in standalone mode
[1] Configure and start ORDS in standalone mode
[2] Skip
🐱 Choose [1]: エンター
Enter a number to select the protocol
[1] HTTP
[2] HTTPS
🐱 Choose [1]: エンター
🐱 Enter the HTTP port [8080]: エンター
The setting named: db.connectionType was set to: basic in configuration: default
The setting named: db.hostname was set to: localhost in configuration: default
The setting named: db.port was set to: 1521 in configuration: default
The setting named: db.servicename was set to: freepdb1 in configuration: default
The setting named: db.username was set to: ORDS_PUBLIC_USER in configuration: default
The setting named: db.password was set to: ****** in configuration: default
The setting named: feature.sdw was set to: true in configuration: default
The global setting named: database.api.enabled was set to: true
The setting named: restEnabledSql.active was set to: true in configuration: default
The setting named: security.requestValidationFunction was set to: ords_util.authorize_plsql_gateway in configuration: default
The global setting named: standalone.http.port was set to: 8080
The global setting named: standalone.context.path was set to: /ords
The global setting named: standalone.doc.root was set to: /etc/ords/config/global/doc_root
2023-04-21T14:05:46.508Z INFO Installing Oracle REST Data Services version 23.1.0.r0861423 in FREEPDB1
------------------------------------------------------------
Date : 21 Apr 2023 14:05:46
Release : Oracle REST Data Services 23.1.0.r0861423
Type : ORDS Install
Database : Oracle Database 23c Free,
DB Version : 23.2.0.0.0
------------------------------------------------------------
Container Name: FREEPDB1
Executing scripts for core
------------------------------------------------------------
:
:
2023-04-21T14:06:08.276Z INFO Oracle REST Data Services initialized
Oracle REST Data Services version : 23.1.0.r0861423
Oracle REST Data Services server info: jetty/10.0.12
Oracle REST Data Services java info: Java HotSpot(TM) 64-Bit Server VM 17.0.5+9-LTS-191
ORDS は、このまま起動している状態となります。ここで、一度、Ctrl+C で終了させます
3. ORDS を起動
ORDS を background で起動しておきます:
# /etc/init.d/ords start
INFO: Starting Oracle REST Data Services...
INFO: Oracle REST Data Services started with PID 122545
INFO: Obtaining the port binding information...
INFO: Oracle REST Data Services is bounded to ports 8080
ブラウザから、 http://<public_IP>:8080/ords/sql-developer
にアクセスすると、なんかそれっぽいものが出てくるかと思います。
これが、Database Actions (SQL Developer Web と呼ばれていたもの)への入り口となります。
が、このままでは誰もログインできないので、次のステップでは、ORDS を利用できるユーザを設定したり作成したりして行きます。
pdbadmin に権限を付与して Database Actions を利用可能にする
ORDS のインストールが完了したら、Database Actions へログイン可能なユーザを作成します。
新規ユーザを作成することもできますが、本記事では、pdbadmin ユーザを利用することにします。
※ 本記事は、検証を目的としているため、pdbadmin を利用しています。実際の運用ではセキュリティを考慮する必要がありますので、ご注意ください
- pdbadmin に権限を付与し、ORDS の Database Actions を利用できるようにする
1. SYSDBA で pdb へ接続:
# sudo su - oracle
$ sqlplus sys/welcome1@localhost:1521/freepdb1 as sysdba
2. pdbadmin へ権限を付与するため、下記の sql を実行:
GRANT DBA TO pdbadmin CONTAINER=CURRENT;
GRANT inherit privileges on user pdbadmin to ORDS_METADATA;
3. pdbadmin に切り替えて接続し、REST enabled にするための SQL を実行:
$ sqlplus pdbadmin/welcome1@localhost:1521/freepdb1
pdbadmin を REST enabled にするために投入する PL/SQL:
BEGIN
ORDS.ENABLE_SCHEMA(p_enabled => TRUE,
p_schema => 'pdbadmin',
p_url_mapping_type => 'BASE_PATH',
p_url_mapping_pattern => 'pdbadmin',
p_auto_rest_auth => FALSE);
commit;
END;
/
5. ブラウザから、Database Actions へ接続
ブラウザから、 http://<public_IP>:8080/ords/sql-developer
にアクセスします。
6. pdbadmin ユーザでログインします
Username: pdbadmin
Password: welcome1
ここまでが、ORDS の基本的なインストール手順となります。
pdbadmin で利用できる Database Actions では、ユーザ作成や権限割り当て、REST 有効化などのアクションが可能な DATABSE USERS
が利用できるようになります。
JSON Relational Duality を触ってみるユーザを作成
そろそろ下記の記事に合流したいので、記事にあわせ JRD
と言う名前のユーザを作成します:
1. SYSDBA で PDB: freepdb1 へ接続
sqlplus sys/welcome1@localhost:1521/freepdb1 as sysdba
2. JRD ユーザの作成
ユーザを作成するために、下記の SQL を実行:
-- USER SQL
CREATE USER JRD IDENTIFIED BY welcome1;
-- ADD ROLES
GRANT CONNECT TO JRD;
GRANT CTXAPP TO JRD;
GRANT RESOURCE TO JRD;
ALTER USER JRD DEFAULT ROLE CONNECT,CTXAPP,RESOURCE;
-- QUOTA
ALTER USER JRD QUOTA UNLIMITED ON USERS;
3. 作成した JRD
ユーザでの接続確認と Role の確認をします:
$ sqlplus jrd/welcome1@localhost:1521/freepdb1
SQL> select role from session_roles;
ROLE
--------------------------------------------------------------------------------
CONNECT
RESOURCE
SODA_APP
CTXAPP
- 続けて、下記の PL/SQL を実行し、JRD ユーザを REST enabled にします:
-- ENABLE REST
BEGIN
ORDS.ENABLE_SCHEMA(
p_enabled => TRUE,
p_schema => 'JRD',
p_url_mapping_type => 'BASE_PATH',
p_url_mapping_pattern => 'jrd',
p_auto_rest_auth=> TRUE
);
commit;
END;
/
sqlplus でやっていますが、Database Actions に pdbadmin で login し、DATABASE USERS
メニューから実行することも可能です。
5. ブラウザから、Database Actions へ接続
ブラウザから、 http://<public_IP>:8080/ords/sql-developer
にアクセスします。
6. JRD ユーザでログインします
Username: JRD
Password: welcome1
以上で、Database Actions が利用できる環境を整えました。
Database Actions の SQL (monaco を利用した code editor) で、SQL を投入してみたり、JSON Relational Duality View の作成後に、REST
メニューをみてみたりすると Auto Rest 項目が増えていたりと、少しだけ学習が楽しくなるかと思います。
ORDS は、Oracle Database に興味深い機能を追加してくれるソフトウェアとなり、Cloud サービスではなく、単体のソフトウェアとして実装されているものとなるほか、対応する Database も 11g R2 以降 (Database のバージョンにより利用できる機能が異なる)で利用可能です。
ORDS 23.1 の Database Actions には、MLE JS (Oracle Database Multilingual Engine) が追加されており、GraalVM を用意することで、Oracle Database 上で JavaScript の実行もできようです。
参考までに、ORDS の構成などに関する推奨項目などは、下記に掲載されています: