はじめに
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_SID
は FREE
となり、デフォルトの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.sql
、02_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