Podman で Oracle Database 23c Free


はじめに

Oracle 23c から Docker コンテナイメージが提供されるようになりました。 旧来の Oracle express edition では、シェルスクリプトでイメージを自身でビルドする必要がありましたが、Oracle 23c からは Free edition としてイメージが公開されています。

ここでは、Oracle 23c Free コンテナの起動手順をまとめておきます。


Oracle 23c コンテナの起動

Oracle 23c コンテナの典型的な起動例は以下のようになります(起動時に初期化を行うため、初回は時間がかかります)。

$ podman run -d --name oracle23c -p 1521:1521 -e ORACLE_PWD=mysecretpassw0rd -v oradata_volume:/opt/oracle/oradata container-registry.oracle.com/database/free:latest

パラメータは以下の指定が可能です。

  • -e ORACLE_PWD=<passwords> SYS, SYSTEM, PDB_ADMIN のパスワードを指定
  • -e ORACLE_CHARACTERSET キャラクタセットを指定(デフォルト:AL32UTF8)
  • -v <host mount point>:/opt/oracle/oradata データベース用のデータボリューム
  • -v <host mount point>:/opt/oracle/scripts/setup データベースのセットアップ後に実行するカスタム・スクリプトを含むボリューム
  • -v <host mount point>:/opt/oracle/scripts/startup データベースの起動後に実行するカスタム・スクリプト(データベースのセットアップが初めて完了した後に実行される)を含むボリューム

ORACLE_SIDFREE となり、デフォルトのPDB(Pluggable Database) として FREEPDB1 が作成されます。

アラートログは以下で確認できます。

$ podman logs oracle23c

後片付けは以下となります。

$ podman stop oracle23c
$ podman rm oracle23c
$ podman volume rm oradata_volume

データボリュームにホストのディレクトリ ./oradata を利用する場合は以下のようになります。

$ podman run -d --name oracle23c -p 1521:1521 -e ORACLE_PWD=mysecretpassw0rd -v ${pwd}/oradata:/opt/oracle/oradata container-registry.oracle.com/database/free:latest


カスタム・スクリプト

カスタム・スクリプトでデータベースの初期設定を行うことができます。

カスタム・スクリプトは .sh および .sql ファイルが使用可能です(SQL スクリプトは SYSDBA として実行されます)。 順序性が必要な場合は 01_users.sql02_permissions.sql のようにファイル名の先頭に番号を付与します。

ユーザ作成してテーブル追加する例として ./startup-scripts/init.sql として以下のようにスクリプトを作成し、

alter session set container = FREEPDB1;

CREATE USER ora_user IDENTIFIED BY ora_user_passw0rd DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
GRANT DBA TO ora_user;
ALTER USER ora_user QUOTA UNLIMITED ON users;
ALTER PROFILE DEFAULT LIMIT password_life_time UNLIMITED;

CREATE TABLE ora_user.employees ( employee_id number(10) NOT NULL, employee_name varchar2(50) NOT NULL, city varchar2(50) );

以下のようにコンテナを起動できます。

$ podman run -d --name oracle23c -p 1521:1521 -e ORACLE_PWD=mysecretpassw0rd -v ${pwd}/startup-scripts:/opt/oracle/scripts/startup -v oradata_volume:/opt/oracle/oradata container-registry.oracle.com/database/free:latest


コンテナ内から sqlplus で接続

デフォルトのPDB(Pluggable Database)に接続(通常はこちらを使っておけばOK)

$ podman exec -it oracle23c sqlplus pdbadmin/mysecretpassw0rd@FREEPDB1

前述の初期化スクリプトでユーザを作成した場合は以下のようになります。

$ podman exec -it oracle23c sqlplus ora_user/mysecretpassw0rd@FREEPDB1

ルート・コンテナに接続する場合は以下

$ podman exec -it oracle23c sqlplus / as sysdba
$ podman exec -it oracle23c sqlplus sys/mysecretpassw0rd@FREE as sysdba
$ podman exec -it oracle23c sqlplus system/mysecretpassw0rd@FREE


コンテナ外から sqlplus で接続

デフォルトのPDB(Pluggable Database)に接続(通常はこちらを使っておけばOK)

$ sqlplus pdbadmin/mysecretpassw0rd@//localhost:1521/FREEPDB1

初期化スクリプトでユーザ作成した時は以下

$ sqlplus ora_user/mysecretpassw0rd@//localhost:1521/FREEPDB1

ルート・コンテナに sysdba で接続

$ sqlplus sys/mysecretpassw0rd@//localhost:1521/FREE as sysdba

ルート・コンテナに 非 sysdba で接続

$ sqlplus system/mysecretpassw0rd@//localhost:1521/FREE

JDBC経由での接続時のURL指定は以下

  • jdbc:oracle:thin:@localhost:1521/FREEPDB1
  • jdbc:oracle:thin:@localhost:1521:FREE (ルート・コンテナ)


Pod 化

Pod作成します。

$ podman pod create -p 1521:1521 --name oracle23c-pod
$ podman volume create oracle23c_volume
$ podman run -d --name oracle23c -e ORACLE_PWD=mysecretpassw0rd -v ${pwd}/startup-scripts:/opt/oracle/scripts/startup -v oracle23c_volume:/opt/oracle/oradata container-registry.oracle.com/database/free:latest

k8s YAMLファイルを生成します。

$ podman generate kube oracle23c-pod > oracle23c-pod.yaml
$ podman pod stop oracle23c-pod
$ podman pod rm oracle23c-pod

起動~停止

$ podman play kube oracle23c-pod.yaml

...

$ podman play kube --down oracle23c-pod.yaml