-
2024-09-10 PostgreSQL脱 Oracle
Dockerコンテナを利用したOracle環境の構築
OracleDB環境の構築
システム運用の形態によっては、PostgreSQL から OracleDatabase(以下、OracleDB) にあるデータを参照している場合があります。また、OracleDB で稼働しているものを PostgreSQL に移行したい、ora2pg の挙動を確かめたいなど、OracleDB から PostgreSQL への移行(脱 Oracle)や連携に関する要望もよく聞きます。
そういった理由で、PostgreSQL のチューニングを専業としているインサイトでも検証用に操作できる OracleDB 環境が欲しい場合もあるのですが、OracleDB をインストールするための環境設定や必要なモジュールのインストールなどに時間を取られることが多々があります。
脱 Oracle のために行う Oracle 環境構築に時間を取られるというのも本末転倒な感じがします。もっと OracleDB を簡単に構築できないかと色々と探していましたら、以下のサイトに Docker コンテナで OracleDB を稼働させるための手順などの情報が記載されていました。
【 Oracle Container Registry 】
https://container-registry.oracle.com/
本記事では、実際に OracleDB が稼働する Docker コンテナを作成した際の手順や注意点などを紹介します。
OracleDB をインストールする際の注意点
OracleDB は複数のライセンスが用意されています。
ライセンスによっては
- 有償でのみ利用可能(無償での利用不可)
- 検証目的でのみ利用可能(商用利用不可)
- 使用できるシステムリソースに上限あり
などの制限があります。ライセンスの制限や詳細については、本記事では解説はいたしませんので、インストールの前に必ず Oracle 社の提供する情報を確認してください。
本ブログは、インサイトの社内環境で実際に OracleDB 環境を構築した際の手順などについて、情報提供することを目的としております。本ブログの内容によって生じた損害等ついては責任を負いかねますので予めご了承ください。
OracleDB が稼働する Docker コンテナを作成する
環境
今回の検証を行った環境は下記となります。
- RockeyLinux 9.4
- Docker 27.1
手順
1. リポジトリの詳細ページを開く
リポジトリサイト ( https://container-registry.oracle.com/ ) にアクセスし、「Database」をクリックすると、リポジトリの一覧が表示されます。その一覧から稼働させたい OracleDB に該当するものを選択することで、詳細ページが開きます。
今回は Oracle Database Free を選択しました。
2. pull コマンドを実行する
Docker イメージを pull するためのコマンドが、画面右側の「Pull Command for Latest」に記載されていますので、コピーして実行します。
$ docker pull container-registry.oracle.com/database/free:latest
有償ライセンスの場合
Oracle Database Enterprise Edition などの有償ライセンスに該当する Docker イメージを pull するには、docker login コマンドでのリポジトリサイトへのログインと Oracle の利用規約への同意が必要になりますので、注意してください。
利用規約への同意は、リポジトリサイトにサインインした状態で該当のリポジトリの詳細ページで行えます(画面右側のインフォメーションマーク)。
$ docker pull container-registry.oracle.com/database/enterprise:latest
Error response from daemon: Head "https://container-registry.oracle.com/v2/database/enterprise/manifests/latest": unauthorized: Auth failed.
docker login コマンドでのログインがされていない場合、上記のようなエラーが発生します。下記のように docker login コマンドで、事前にログインしている必要があります。
$ docker login container-registry.oracle.com
※ ここで求められるパスワードは、リポジトリサイトにサインインした状態で画面右上に表示されるユーザ名をクリックすると選択できる「Auth Token」で作成したものとなります。
3. Docker コンテナを作成する
詳細ページのコマンド例では podman で Docker コンテナを作成するコマンドが記載されていますので、docker に読み替えて実行しました。
$ docker run -d --name oracle-db -e ORACLE_PWD=<管理者パスワード> container-registry.oracle.com/database/free:latest
詳細ページの「Custom Configurations」に、その他のオプションについての説明が記載されていますので、合わせて参照してください。
起動確認
作成したコンテナが無事に起動しているかを docker ps コマンドで確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
636b7929c21e container-registry.oracle.com/database/free:latest "/bin/bash -c $ORACL…" 15 seconds ago Up 15 seconds (healthy) 1521/tcp oracle-db
無事に起動できていることを確認できました。
もし、docker ps コマンドの結果に作成したコンテナが表示されない場合、コンテナが停止していることを表します。その場合には、docker logs コマンドでログを確認し、原因特定を行います。
実際に検証環境を作成している際に、「library initialization failed - unable to allocate file descriptor table - out of memory」というエラーが発生してことがあります。
このエラーが発生した場合には、下記のように docker run コマンドに --ulimit オプションをつけて、システムリソースの制限を緩和することでエラーが解消できました。
docker run -d --name oracle-db -e ORACLE_PWD=<管理者パスワード> --ulimit nofile=65535:65535 --ulimit nproc=65535:65535 <dockerイメージ>
4. sqlplus で OracleDB に接続する
詳細ページの「Connecting from Within the Container」に記載の docker exec コマンドを参考にして、起動したコンテナで稼働している OracleDB に接続します。
$ docker exec -it oracle-db sqlplus sys/<管理者パスワード>@localhost:1521/FREE as sysdba
また、OS 認証でも接続できます。
docker exec -it oracle-db sqlplus / as sysdba
接続が成功すれば、あとは好きな感じに SQL コマンドします。
まとめ
以上の手順で OracleDB を操作できる環境を用意することができました。環境が不要になれば、Docker コンテナを破棄するだけですので、非常に便利です。
サンプルスキーマの作成手順なども手順を紹介しようと思いましたが、PostgreSQL とは関係がなさすぎる気がしましたので省略させていただきました。
最後に、繰り返しとなりますが、OracleDB はライセンスによって有償であったり、商用利用できないものがありますので、Oracle 社の提供する情報をよく確認した上で OracleDB 環境を構築してください。