どうもヒノマルクです。
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 --version
Docker version 19.03.1, build 74b1e89
Oracleデータベースのイメージを準備する方法ですが、色々と調べた結果3つの方法がありました。
方法1 Oracle Cloud Infrastructure Container Registry を利用する。
dockerイメージが既にビルドされて用意されている(ただしversionはXE18c)
本日確認したらXE21cが使えるようになっていました。
docker pull container-registry.oracle.com/database/express:latest
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
cd docker-images/OracleDatabase/SingleInstance/dockerfiles/
sh buildContainerImage.sh -x -v 21.3.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による)
手順は下記に記載があります。
docker run -it -d -p 1521:1521 --name oraclelinux oraclelinux:8.5
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データベースをインストールするために必要なパッケージを
事前にインストールしてくれるパッケージのようです。
[root@5654a57c4df1 /]# yum search oracle-database-preinstall
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
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というツールをインストールします。
[root@5654a57c4df1 /]# yum install wget
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!
# 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
--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]
[root@5654a57c4df1 tmp]# yum -y localinstall oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
・・・省略・・・ [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
・・・省略・・・ [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
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
最後に環境変数の設定をします。
[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ポートにしても接続できなかったりしたのでお困りの時は確認してみてください。