自分のキャリアをあれこれ考えながら、Pythonで様々なデータを分析していくブログです

[docker] oracleデータベースXE環境を準備する3つの方法

Database
Database

どうもヒノマルクです。

pandasからOracle DBのデータを取得する記事を書こうと思ったのですが、そもそもOracleデータベースの環境がなかったので作成することにしました。

Macでの環境構築になります。dockerを使っているためWindowsやLinuxでも流用できる部分は多いと思います。

スポンサーリンク

Oracleデータベース環境を準備する

あまり個人でOracleデータベースを操作する環境を準備する方はいないかもしれませんが、Pythonから読み込むために必要なので準備します。

今回は個人で動作確認や勉強に使うだけなので、Express Edition (XE)をインストールしようと思います。(Oracle Bronze勉強のときにインストールしたことがあるのが十年くらい前でしょうか)

Oracle Express Edition とは?

Oracle Database Express Edition (Oracle Database XE)は、無償の小規模版のOracle Databaseです。Oracle Database XEは、簡単にインストールして簡単に管理できます。
出典: Oracle Database XEの概要

今回はdockerでOracleデータベースのコンテナを用意します。

VMwareやVirtualboxで仮想マシンを作成してOracle環境を準備してもよいですが、使い勝手がよいdockerを使ってコンテナの仮想環境上にOracleデータベース XEをインストールしようと思います。

docker環境は事前に準備されていると仮定します。

dockerのバージョン確認
docker --version
Out[0]
Docker version 19.03.1, build 74b1e89

Oracleデータベースのイメージを準備する方法ですが、色々と調べた結果3つの方法がありました。

方法1 Oracle Cloud Infrastructure Container Registry を利用する。

dockerイメージが既にビルドされて用意されている(ただしversionはXE18c)

>2022/11/30追記
本日確認したらXE21cが使えるようになっていました。
イメージのダウンロード
docker pull container-registry.oracle.com/database/express:latest
Out[0]
latest: Pulling from database/express
35defbf6c365: Pull complete
249027472f46: Pull complete
67ae3dfc2d41: Pull complete
Digest: sha256:b17a93fb201562ad142d267c0ac3eecb0e6207debafd6ed51a1da157b9cacab8
Status: Downloaded newer image for container-registry.oracle.com/database/express:latest
container-registry.oracle.com/database/express:latest
コンテナを起動
docker run \
-p 1521:1521 \
-p 5500:5500 \
-e ORACLE_PWD=hinomaruc \
--name oracledb \
container-registry.oracle.com/database/express:latest

公式ドキュメントは下記URLから Database → express を選択すると閲覧できます。
https://container-registry.oracle.com/

方法2 Oracle公式のdockerイメージ作成ツール を利用する。

簡単に様々なバージョンのOracleデータベース XEのイメージを作成できる。

資材をダウンロード
git clone https://github.com/oracle/docker-images.git
dockerイメージを作成する。下記の例だと Oracleデータベース XE 21.3.0のイメージをビルドする
cd docker-images/OracleDatabase/SingleInstance/dockerfiles/
sh buildContainerImage.sh -x -v 21.3.0
Out[0]
・・・省略・・・
Successfully built 00884d48b88e
Successfully tagged oracle/database:21.3.0-xe

  Oracle Database container image for 'xe' version 21.3.0 is ready to be extended:

    --> oracle/database:21.3.0-xe

  Build completed in 3558 seconds.

oracle/database:21.3.0-xe というイメージが作成されました。

コンテナ起動
docker run --name oracledb -it \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_PWD=hinomaruc \
oracle/database:21.3.0-xe

方法3 自分でOracleデータベース環境を準備する

もしかしたら方法2のdockerfileの中身とやっていることはあまり変わらないかも知れません。
ただ、dockerがなくてもオンプレでもクラウドでもlinux環境を準備できれば同じような手順でインストールできると思います。
(※ Linux distributionによる)

手順は下記に記載があります。

Oracle Database Express Edition (XE) Downloads
Oracle Database Express Edition (XE) Downloads
コンテナ起動 (oraclelinux8.5の環境を準備)
docker run -it -d -p 1521:1521 --name oraclelinux oraclelinux:8.5
Out[0]
Unable to find image 'oraclelinux:8.5' locally
8.5: Pulling from library/oraclelinux
b791d4160c6a: Pull complete
Digest: sha256:4126784fc096fa59538deae1917a143b9c40f9712a76b17f1d7c599b7953d33a
Status: Downloaded newer image for oraclelinux:8.5
5654a57c4df1a743569dac42466a405e3a14273138cfef4b9cb463411b2cc813
コンテナにアクセス
docker exec -it oraclelinux /bin/bash

ここからはサーバーの中に入ってインストール作業をするのと変わりません。

まずはpreinstallパッケージをインストールします。
oracleデータベースをインストールするために必要なパッケージを
事前にインストールしてくれるパッケージのようです。

oraclelinux 8.5でインストール可能なoracle preinstallのバージョンを確認。
[root@5654a57c4df1 /]# yum search oracle-database-preinstall
Out[0]
Last metadata expiration check: 0:03:51 ago on Sun Dec 12 12:50:14 2021.
============================================= Name Matched: oracle-database-preinstall ==============================================
oracle-database-preinstall-19c.src : Oracle Database Preinstallation RPM
oracle-database-preinstall-19c.x86_64 : Oracle Database Preinstallation RPM
oracle-database-preinstall-21c.src : Oracle Database Preinstallation RPM
oracle-database-preinstall-21c.x86_64 : Oracle Database Preinstallation RPM

oracle 19cと oracle 21cが選択できるようです。

インストールします。
[root@5654a57c4df1 /]# yum install oracle-database-preinstall-21c
Out[0]
Last metadata expiration check: 0:05:28 ago on Sun Dec 12 12:50:14 2021.
Dependencies resolved.
=====================================================================================================================================
 Package                                 Architecture    Version                                    Repository                  Size
=====================================================================================================================================
Installing:
 oracle-database-preinstall-21c          x86_64          1.0-1.el8                                  ol8_appstream               30 k
Installing dependencies:
 bc                                      x86_64          1.07.1-5.el8                               ol8_baseos_latest          129 k
 bind-libs                               x86_64          32:9.11.26-6.el8                           ol8_appstream              174 k
 bind-libs-lite                          x86_64          32:9.11.26-6.el8                           ol8_appstream              1.2 M
・・・省略・・・
 tar                                     x86_64          2:1.30-5.el8                               ol8_baseos_latest          838 k
 unzip                                   x86_64          6.0-45.el8_4                               ol8_baseos_latest          195 k
 xorg-x11-utils                          x86_64          7.5-28.el8                                 ol8_appstream              136 k
 xorg-x11-xauth                          x86_64          1:1.0.9-12.el8                             ol8_appstream               39 k
 xz                                      x86_64          5.2.4-3.el8                                ol8_baseos_latest          153 k

Transaction Summary
=====================================================================================================================================
Install  81 Packages

・・・省略・・・

Complete!

oracle databaseをコンテナ内部からダウンロードするため、wgetというツールをインストールします。

wgetをインストール
[root@5654a57c4df1 /]# yum install wget
Out[0]
Last metadata expiration check: 23:09:00 ago on Sun Dec 12 12:50:14 2021.
Dependencies resolved.
=====================================================================================================================================
 Package                      Architecture            Version                               Repository                          Size
=====================================================================================================================================
Installing:
 wget                         x86_64                  1.19.5-10.0.1.el8                     ol8_appstream                      734 k
Installing dependencies:
 libmetalink                  x86_64                  0.1.3-7.el8                           ol8_baseos_latest                   32 k

Transaction Summary
=====================================================================================================================================
Install  2 Packages

・・・省略・・・

Complete!
oracle database xe 21cをダウンロード
# tmpフォルダ以下にダウンロードする
[root@5654a57c4df1 /]# cd /tmp

# ダウンロードする前にOracleの規約などは読んでおくこと。商用利用可能なのかなど一読しておく。
[root@5654a57c4df1 tmp]# wget https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
Out[0]
--2021-12-13 11:59:25--  https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
Resolving download.oracle.com (download.oracle.com)... 210.132.236.148
Connecting to download.oracle.com (download.oracle.com)|210.132.236.148|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://edelivery.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm [following]
--2021-12-13 11:59:25--  https://edelivery.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
Resolving edelivery.oracle.com (edelivery.oracle.com)... 104.102.150.132, 2600:140b:a800:a8d::366, 2600:140b:a800:a95::366
Connecting to edelivery.oracle.com (edelivery.oracle.com)|104.102.150.132|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm?AuthParam=1639397661_f14bd6a0d812fdaaf27556031cb4707b [following]
--2021-12-13 11:59:27--  https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm?AuthParam=1639397661_f14bd6a0d812fdaaf27556031cb4707b
Connecting to download.oracle.com (download.oracle.com)|210.132.236.148|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2339651768 (2.2G) [application/x-redhat-package-manager]
Saving to: 'oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm'

oracle-database-xe-21c-1.0-1.ol8. 100%[==========================================================>]   2.18G  7.69MB/s    in 6m 8s

2021-12-13 12:05:35 (6.07 MB/s) - 'oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm' saved [2339651768/2339651768]
ダウンロードした oracleデータベースXE 21cをインストールします。
[root@5654a57c4df1 tmp]# yum -y localinstall oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
Out[0]
・・・省略・・・
[SEVERE] The su command is not configured properly or the oracle user
does not have the required privileges to install the Oracle database.
If you are running in a container environment,
ensure to set the environment variable ORACLE_DOCKER_INSTALL=true and try again.
error: %prein(oracle-database-xe-21c-1.0-1.x86_64) scriptlet failed, exit status 1

Error in PREIN scriptlet in rpm package oracle-database-xe-21c
error: oracle-database-xe-21c-1.0-1.x86_64: install failed

・・・省略・・・

Error: Transaction failed

エラーになってしまいました。
コンテナ環境で実行している場合は
export ORACLE_DOCKER_INSTALL=true
を実行してくださいと書いてあるので実行してみます。

もう一度インストール
[root@5654a57c4df1 tmp]# export ORACLE_DOCKER_INSTALL=true
[root@5654a57c4df1 tmp]# yum -y localinstall oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
Out[0]
・・・省略・・・
[INFO] Oracle home installed successfully and ready to be configured.
To configure Oracle Database XE, optionally modify the parameters in
 '/etc/sysconfig/oracle-xe-21c.conf' and then
 execute '/etc/init.d/oracle-xe-21c configure' as root.

・・・省略・・・

Installed:
  oracle-database-xe-21c-1.0-1.x86_64

Complete!

今度は成功しました。
次は execute '/etc/init.d/oracle-xe-21c configure' as root.
と書いてあるので実行します。

サービス構成スクリプトを実行します。
[root@5654a57c4df1 tmp]# /etc/init.d/oracle-xe-21c configure
Out[0]
Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts:
Confirm the password:
Configuring Oracle Listener.
Listener configuration succeeded.
Configuring Oracle Database XE.
Enter SYS user password:
********
Enter SYSTEM user password:
************
Enter PDBADMIN User Password:
*********
Prepare for db operation
7% complete
Copying database files
29% complete
Creating and starting Oracle instance
30% complete
33% complete
37% complete
40% complete
43% complete
Completing Database Creation
47% complete
50% complete
Creating Pluggable Databases
54% complete
71% complete
Executing Post Configuration Actions
93% complete
Running Custom Scripts
100% complete
Database creation complete. For details check the logfiles at:
 /opt/oracle/cfgtoollogs/dbca/XE.
Database Information:
Global Database Name:XE
System Identifier(SID):XE
Look at the log file "/opt/oracle/cfgtoollogs/dbca/XE/XE.log" for further details.

/etc/init.d/oracle-xe-21c: line 367: /bin/hostname: No such file or directory
Connect to Oracle Database using one of the connect strings:
     Pluggable database: /XEPDB1
     Multitenant container database:
Use https://localhost:5500/em to access Oracle Enterprise Manager for Oracle Database XE

最後に環境変数の設定をします。

OracleデータベースXEの環境変数の設定
[root@5654a57c4df1 dbhomeXE]# export ORACLE_SID=XE
[root@5654a57c4df1 dbhomeXE]# export ORAENV_ASK=NO
[root@5654a57c4df1 dbhomeXE]# . /opt/oracle/product/21c/dbhomeXE/bin/oraenv

出典: https://docs.oracle.com/cd/E96517_01/xeinl/connecting-oracle-database-xe.html

スポンサーリンク

sql developerでOracleデータベースとの接続確認をする

sql developerはインストール済みだと仮定します。
インストールしても起動しなかった場合、今インストールされているjavaのバージョンによってはsql developerで利用するJAVA_HOMEの設定を直接変更する対応が必要です。

私は下記記事を参考にしました。
https://stackoverflow.com/questions/50708608/oracle-sqldeveloper-on-macos-wont-open-after-installation-of-correct-java

sql developerの接続情報は下記を設定しています。
ユーザー名: SYSTEM
パスワード: hinomaruc
ホスト名: localhost
ポート: 1521
SID: XE

テストボタンを押して、画像のように左下に「ステータス 成功」と表示されればdockerコンテナのoracleデータベース XEに接続されています。

スポンサーリンク

docker toolboxを使っている場合

古いWindowsやMacをお使いの方はdocker desktopではなく、docker toolboxをインストールしている方もいるかも知れません。
その場合、裏ではvirtualBoxの仮想マシンがdockerを使うために動いているかと思います。
(ヒノマルクもdocker toolboxを利用していてvirtualBoxでdefaultという名前の仮想マシンが動いていることを確認)

メモリの割り当てやポートフォワードの設定などはvirtualBoxの仮想マシンで設定しないとインストール作業がメモリ不足で進まなかったり、Oracleデータベースへの接続がlocalhostの1521ポートにしても接続できなかったりしたのでお困りの時は確認してみてください。

タイトルとURLをコピーしました