2024年12月17日火曜日

コンテナ・イメージより作成したローカルのAPEX環境のORDSをアップグレードする

以前の記事「podmanを使ってOracle Database FreeとOracle REST Data Servicesをコンテナとして実行する」では、Oracle REST Data ServicesとOracle Database 23ai Freeの2つのコンテナを作成して、ローカルPCにOracle APEXの環境を作成しています。

Oracle APEXはデータベースにインストールされるデータベース・オブジェクトやデータなので、データ・ファイルさえコンテナの外に置いてあれば、コンテナの置き換えの影響は受けません。

コンテナとして実装したOracle REST Data Servicesでは、構成ファイルをコンテナの外に置いてあれば、コンテナの置き換えだけでOracle REST Data Servicesとしてはアップデートされますが、Oracle REST Data Servicesの接続先のデータベースに作成されたスキーマは、自動的にはアップデートされません。

Oracle Database 23ai Freeのコンテナとしてapex-db、ORDSのコンテナとしてapex-ordsが作成されている環境で、ORDS 24.3からORDS 24.4へアップグレードした作業を、以下より紹介します。

最初にOracle Database 23ai FreeにインストールされているORDSのバージョンを確認します。

コンテナapex-dbに接続して、SQL*Plusを実行します。ORDSはFREEPDB1にインストールされている前提です。

podman exec -it apex-db bash
sqlplus / as sysdba
alter session set container = freepdb1;

% podman exec -it apex-db bash

bash-4.4$ sqlplus / as sysdba


SQL*Plus: Release 23.0.0.0.0 - Production on Tue Dec 17 01:30:23 2024

Version 23.5.0.24.07


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



Connected to:

Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free

Version 23.5.0.24.07


SQL> alter session set container = freepdb1;


Session altered.


SQL> 


SYSやSYSTEMといったDBA権限を持ったユーザーでデータベースに接続している場合は、以下のコマンドでデータベースにインストールされたORDSのバージョンを確認します。

select ords_metadata.ords_admin.installed_version from dual;

SQL> select ords_metadata.ords_admin.installed_version from dual;


INSTALLED_VERSION

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

24.3.0.r2620924


SQL> 


パッケージORDSの実行権限を持つデータベース・ユーザーで接続している場合は、以下のコマンドでORDSのバージョンを確認できます。

select ords.installed_version from dual;

SQL> select ords.installed_version from dual;


INSTALLED_VERSION

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

24.3.0.r2620924


SQL> 


以上より、データベースにインストールされているORDSのバージョンが24.3.0.r2620924であることが確認できました。

次にORDSのコンテナapex-ordsに接続し、ORDSのバージョンを確認します。

podman exec -it apex-ords bash

% podman exec -it apex-ords bash

[oracle@apex ords]$


ORDSのコンテナに含まれるNOTICE.txtに、コンテナに含まれているORDSのバージョンが記載されています。ファイルの内容を確認します。

more NOTICE.txt

[oracle@apex ords]$ more NOTICE.txt 

Release Notes for Oracle REST Data Services 24.3.0.r2620924

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


The release notes are available at 

https://www.oracle.com/tools/ords/ords-relnotes-24.3.0.html

[oracle@apex ords]$ 


コンテナに含まれているORDSが24.3.0.r2620924であることが確認できます。

念の為、インストールされているORDSを呼び出してバージョンを確認します。

ords --config /etc/ords/config --version

[oracle@apex ords]$ ords --config /etc/ords/config --version


ORDS: Release 24.3 Production on Tue Dec 17 01:40:21 2024


Copyright (c) 2010, 2024, Oracle.


Configuration:

  /etc/ords/config


Oracle REST Data Services 24.3.0.r2620924

[oracle@apex ords]$ 


NOTICE.txtと同様に、バージョンが24.3.0.r2620924であることが確認できます。

Oracle Container Registryにあるordsのコンテナ・イメージを確認します。以下にアクセスします。
https://container-registry.oracle.com/ords/ocr/ba/database/ords

ARM64およびAMD64ともに、最新のリリースが24.4.0であることが確認できます。


最新のORDSのコンテナ・イメージをpullします。

podman pull container-registry.oracle.com/database/ords:latest

% podman pull container-registry.oracle.com/database/ords:latest

Trying to pull container-registry.oracle.com/database/ords:latest...

Getting image source signatures

Copying blob sha256:6b2276e7c34502084ba45359f48945cb1f8e9be0dae02b54d2e7601e9e16887b

Copying blob sha256:ff2d62e0124d4c22a72b692d4ec2bc8e513a3ea8d0eeabf5039b640051211857

Copying blob sha256:7283ff96fa7bfbeca82e3ad7f93286e1b237e58696803d40028e357fe2dce3b9

Copying blob sha256:8e8398ae8996e610aeafa80ea44d503b7d34e69aaac8adb3d5a01773ab89ae84

Copying blob sha256:3918d843340022050fe95bfd4844a8b67e27be90377c46506a4ff03fd166d375

Copying blob sha256:a02d370031d9594cdbdd916e412d7239de66e1c503a9225017ce73b98b1526b7

Copying blob sha256:3da2537959fce36986a78d991c7a1e90afc352dfb7d9ce4edc63ecbdd3d35b62

Copying blob sha256:0300cc03546fa58d9129eabad7d85fd76cfdc4f3f1f3117cec917e55ce21f338

Copying blob sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1

Copying config sha256:fd63c34a0d88d8279ef7f36e854993757216c9f8fdf42fe3c276d22480fcebf8

Writing manifest to image destination

fd63c34a0d88d8279ef7f36e854993757216c9f8fdf42fe3c276d22480fcebf8

% 


pullされたイメージIDを確認します。

podman images

% podman images               

REPOSITORY                                    TAG               IMAGE ID      CREATED        SIZE

container-registry.oracle.com/database/ords   latest            fd63c34a0d88  5 hours ago    2 GB

ghcr.io/berriai/litellm                       main-v1.54.1      b3a579138ec2  7 days ago     1.4 GB

ghcr.io/berriai/litellm                       main-latest       b3a579138ec2  7 days ago     1.4 GB


podとして作成しているapexをコンテナごと作り変えます。apex.yamlにはコンテナapex-ordsの作成にcontainer-registry.oracle.com/database/ords:latestを使うように記載されているので、作り直した時点での最新のバージョンのORDSに置き換わります。

podman pod stop apex
podman pod rm apex
podman kube play apex.yaml

% podman pod stop apex

apex

% podman pod rm apex

bbbc7882ccda851c3c8a76360913f4598fe35d25d75362d1f3fa56795011698c

% podman kube play apex.yaml

Pod:

3350365e1306d499fa969f6f31d899b4ae5b6185bee01948a75dea99deee89d3

Containers:

6d1d42af1c1a694d2d38140557edabc37d89a5b69a38b2706458bb15f91f1a9d

40e4da61fbd649892aab5153103c7e1cbd00bf610796e00eb34e7b2a8aea5aed


% 


作り直されたORDSのコンテナに接続し、ORDSのバージョンを確認します。

% podman exec -it apex-ords bash

[oracle@apex ords]$ cat NOTICE.txt 

Release Notes for Oracle REST Data Services 24.4.0.r3451601

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


The release notes are available at 

https://www.oracle.com/tools/ords/ords-relnotes-24.4.0.html

[oracle@apex ords]$ ords --config /etc/ords/config --version


ORDS: Release 24.4 Production on Tue Dec 17 02:00:21 2024


Copyright (c) 2010, 2024, Oracle.


Configuration:

  /etc/ords/config


Oracle REST Data Services 24.4.0.r3451601

[oracle@apex ords]$ 


ORDSのコンテナとしては、バージョンが24.4.0.r3451601になっていることが確認できます。

データベースにインストールされたORDSのバージョンを確認します。

% podman exec -it apex-db bash

bash-4.4$ sqlplus / as sysdba


SQL*Plus: Release 23.0.0.0.0 - Production on Tue Dec 17 02:02:06 2024

Version 23.5.0.24.07


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



Connected to:

Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free

Version 23.5.0.24.07


SQL> alter session set container = freepdb1; 


Session altered.


SQL> select ords_metadata.ords_admin.installed_version from dual;


INSTALLED_VERSION

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

24.3.0.r2620924


SQL> 


データベースにインストールされているORDSのスキーマのバージョンは変わらず24.3.0.r2620924です。ミドルティアにインストールされているORDSを入れ替えただけでは、データベースにイントールされたORDSのスキーマはアップデートされません。

ORDSのinstallコマンドを実行し、データベースのスキーマをアップデートします。

ORDSのコンテナを停止します。

podman stop apex-ords

% podman stop apex-ords

apex-ords

% 


installコマンドを実行します。以下では対話形式のインストールを実行しています。
podman run --pod apex --name ords-update --rm -it \
-v ords_config:/etc/ords/config container-registry.oracle.com/database/ords:latest install
DBの接続先であるプールを選択し(通常はdefault - 1です)、SYSとそのパスワードを入力します。

% podman run --pod apex --name ords-update --rm -it \  

> -v ords_config:/etc/ords/config container-registry.oracle.com/database/ords:latest install

2024-12-17T02:09:27Z INFO   ORDS has not detected the option '--config' and this will be set up to the default directory.


ORDS: Release 24.4 Production on Tue Dec 17 02:09:28 2024


Copyright (c) 2010, 2024, Oracle.


Configuration:

  /etc/ords/config


Oracle REST Data Services - Interactive Install


  Enter a number to select the database pool to upgrade ORDS or create an additional database pool

    [1] default      jdbc:oracle:thin:@//localhost:1521/freepdb1

    [C] Create an additional database pool

  Choose [1]: 

  Provide database user name with administrator privileges.

    Enter the administrator username: sys

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


Retrieving information.

Connecting to database user: ORDS_PUBLIC_USER url: jdbc:oracle:thin:@//localhost:1521/freepdb1

2024-12-17T02:09:33.182Z INFO        Created folder /opt/oracle/ords/logs

2024-12-17T02:09:33.183Z INFO        The log file is defaulted to the current working directory located at /opt/oracle/ords/logs

2024-12-17T02:09:33.208Z INFO        Upgrading Oracle REST Data Services schema 24.3.0.r2620924 to version 24.4.0.r3451601 in FREEPDB1

2024-12-17T02:09:36.773Z INFO        Completed upgrade for Oracle REST Data Services version 24.4.0.r3451601. Elapsed time: 00:00:03.548 


2024-12-17T02:09:36.774Z INFO        Log file written to /opt/oracle/ords/logs/ords_upgrade_2024-12-17_020933_18358.log



ログには以下のようにアップグレードが完了したと出力されます。

2024-12-17T02:09:36.773Z INFO Completed upgrade for Oracle REST Data Services version 24.4.0.r3451601. Elapsed time: 00:00:03.548

なぜかpodmanコマンドが終了しないので、別のターミナルよりコンテナords-updateを停止します。

podman stop ords-update

% podman stop ords-update

ords-update

% 


以上でORDSスキーマのアップグレードが完了したら、ORDSのコンテナを起動します。

podman start apex-ords

% podman start apex-ords                             

apex-ords

% 


データベースに接続し、ORDSのスキーマのバージョンを確認します。

% podman exec -it apex-db bash                       

bash-4.4$ sqlplus / as sysdba


SQL*Plus: Release 23.0.0.0.0 - Production on Tue Dec 17 02:18:24 2024

Version 23.5.0.24.07


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



Connected to:

Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free

Version 23.5.0.24.07


SQL> alter session set container = freepdb1;


Session altered.


SQL> select ords_metadata.ords_admin.installed_version from dual;


INSTALLED_VERSION

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

24.4.0.r3451601


SQL> 


スキーマのバージョンが24.4.0.r3451601に上がっていることが確認できます。

ORDSのスキーマのアップグレードはpodman runコマンドでコンテナを作成した上でinstallを実行する代わりに、作成済みのコンテナapex-ordsを起動し接続した上で、コンテナ内でords --config /etc/ords/config installを実行しても、アップグレードできます。

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