1. 久しぶりにOracle Database XEがリリース
長年11.2でバージョンが止まっていたOracle Database Express Edition(以降Oracle Database XEもしくはOracle XE)。ニューバージョンが待たれるなか、ようやく昨年2018年10月に「Oracle Database 18c Express Edition」としてリリースされた。
詳しいことは「Oracle Database XE公式サイト」などを見てもらうとして、 今回はその中身を少し探ってみたい。今回はインストール編。
1-1. 動作確認環境
Oracle Database XEはOracle Linux 6/7やRed Hat Enterprise Linux 6/7などのLinuxと、Windows 7以降(64bit)に対応している。今回はOracle Linux 7を使用する。
1-2. 参考資料
手始めにこのあたりのドキュメントをあさってみよう。
- Oracle Database XE英語サイト
- Oracle Database 18c XE Installation Guide for Linux x86-64
- Oracle Database XE日本語サイト
- Oracle Database 18c XE インストレーション・ガイドfor Linux x86-64
2. Oracle Database XEをダウンロードする
Oracle Database XEをダウンロードするには次の方法がある。
- OracleのWebサイトにログインし、ライセンスに同意してダウンロードする
- OracleのWebサイトから直接ダウンロードする(2020年2月から可能)
- OCIのol7_oci_includedリポジトリからダウンロードする(OCIのみ)
1は従来の方法で、OCI Computeに限り3の方法が可能だった。そして2020年2月にOracle Database XEのライセンス条項が改訂され、OCI以外でも直接ダウンロード/インストールできるようになった(参考)。
今回は後続作業の都合で、一度ダウンロードしてからインストールする。OCIか、それ以外かで手順が異なるので適切な方法で実施してほしい。
2-1. OCI Computeでダウンロードする
OCI Computeではol7_oci_includedリポジトリにXEが含まれている。そのため直接ダウンロード/インストールできる。
ダウンロードするとき
yumdownloader oracle-database-xe-18c
直接インストールするとき
yum install oracle-database-xe-18c
2-2. OCI以外の環境で直接ダウンロードする
ファイルが見つからない等のエラーが出たときはOracle Database XE DownloadsページでURIを確認すること。
ダウンロードするとき
wget https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm
直接インストールするとき
yum install https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm
3. Oracle Database XEのRPMを調べてみる
マニュアルを読みつつ、インストールする前にOracle Database XEのRPMを調べてみよう。
3-1. なぜOracle LinuxとRHELではインストール手順が違う?
はじめに以下のマニュアルを見て気づくのは、Oracle LinuxとRHELでは、わずかにインストール手順が違うこと。RHELではoracle-database-preinstall-18c
を手動でインストールしている。
oracle-database-preinstall-18c
は「Oracle Preinstallation RPM」もしくは「Database Preinstallation RPM」と呼ばれるもので、カーネルパラメータの設定やユーザー作成など、インストールの前準備をするパッケージだ。
RHELではOracle Database XEをインストールする前にoracle-database-preinstall-18c
を手動でインストールしている。
# curl -o oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
# yum -y localinstall oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
Oracle Database XE本体の依存性を確認する。--requires
では、このパッケージが必要としているパッケージやファイルを表示できる。
oracle-database-preinstall-18c
があり、Oracle LinuxのYumリポジトリに含まれているので自動インストールされる。
$ rpm -qp --requires oracle-database-xe-18c-1.0-1.x86_64.rpm
file
net-tools
oracle-database-preinstall-18c ★ここにある
/bin/sh
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1
逆にRHELのYumリポジトリにはoracle-database-preinstall-18c
が含まれないので手動インストールする必要があったのだ。
そういえば昔のバージョンの「Oracle Preinstallation RPM」はOracle Linuxのリポジトリだけにあるkernel-uek
をrequireしていて、そもそもRHELでは使えなかったことを思い出した。当時は
「ずいぶん、いじわるなことをしている」
と思ったっけ。
3-2. RPMパッケージの中身を調べてみる
いくつのファイルが含まれているのだろうと思い調べてみると、なんと2万ファイル以上! 調べる気が無くなる。
$ rpm -qlp oracle-database-xe-18c-1.0-1.x86_64.rpm | wc -l
22683
といいつつ、Oracle Database本体関連を除外してみると、たったの3つ。ファイル名から判断すると「起動スクリプト」と「設定ファイル」、「ライセンスのREADME」。
$ rpm -qlp oracle-database-xe-18c-1.0-1.x86_64.rpm | grep -v /opt/oracle/product
---以下出力---
/etc/init.d/oracle-xe-18c
/etc/sysconfig/oracle-xe-18c.conf
/usr/share/doc/oracle-xe-18c/LICENSE
そして得意の--scripts
攻撃。RPMインストールの前後で実行されるシェルスクリプトを表示できる。
$ rpm -qp --scripts oracle-database-xe-18c-1.0-1.x86_64.rpm
すごく長いのでステップ数を調べてみると600行近い。まったく無いものや数十行程度のものが多いなか、これまた読む気が無くなる。
$ rpm -qp --scripts oracle-database-xe-18c-1.0-1.x86_64.rpm | wc -l
582 ★行数をカウント
まずはpreinstallセクションを見るのが鉄則。/var/log/oracle-database-xe-18c/results/oraInstall.log
というインストールログを生成しているようだ。
preinstall scriptlet (using /bin/sh):
#!/bin/sh
#execute pre install validations
#Create the corresponding log for the RPM installation
RPM_LOG_LOCATION=/var/log/oracle-database-xe-18c/results
RPM_LOG_FILE=$RPM_LOG_LOCATION/oraInstall.log
面白そうなのは、この箇所。実はDebienやUbuntuにも対応しているのか?
if [ -f /etc/debian_version ]; then
DISTRO='DEBIAN'
elif [ -f /etc/ubuntu_version ]; then
DISTRO='UBUNTU'
elif [ -f /etc/redhat-release ]; then
DISTRO='REDHAT'
elif [ -f /etc/lsb-release ]; then
DISTRO_NAME=$(lsb_release -si)
DISTRO="$(tr [a-z] [A-Z] <<< $DISTRO_NAME)"
else
DISTRO=$(uname -s)
fi
# RPM upgrade check applicable only when running RPM installation
if [ "$DISTRO" != 'DEBIAN' ] && [ "$DISTRO" != 'UBUNTU' ]; then
# In case of upgrade skip the pre install checks
if [ "$1" != "1" -o -n "$2" ]
then
exit 0
fi
else
# On debian based distros the following steps are needed
ln -s /usr/bin/awk /bin/awk
mkdir -p /var/lock/subsys
touch /var/lock/subsys/listener
chmod 755 /var/lock/subsys/listener
fi
4. Oracle Database XEをインストールしてみる
そこそこに切り上げて、マニュアル通りにインストールしてみる。なお/opt
に約10GBytesのサイズが必要なので、十分なディスク領域があることを確認すること。SSD搭載のマシンだったせいか、10分もかからずに終了。
$ sudo -s
# yum -y localinstall oracle-database-xe-18c-1.0-1.x86_64.rpm
インストールログを見ると、興味深いことは書かれていなかった。
[INFO] Starting the installation process of the Oracle Database...
2019年05月23日-午前03時27分58秒
[INFO] Registering Oracle home to the Oracle inventory...
[INFO] Oracle home registered to the Oracle inventory.
[INFO] Executing post installation scripts...
[INFO] Setting up inventory as it has not been setup on this machine.
[INFO] Configuring ADR directories...
[INFO] ADR directories configured.
[INFO] Post installation scripts executed successfully.
[INFO] Oracle home installed successfully and ready to be configured.
実は「Oracle Preinstallation RPM」にもログがある。長いので中身は紹介しないが、興味のある人は見てほしい。
/var/log/oracle-database-preinstall-18c/results/orakernel.log
5. データベースを作成してみる
いままでDBCAでやっていたデータベースの作成は/etc/init.d/oracle-xe-18c configure
で開始できる。パスワードの要件が表示されるので注意して入力すること。
なおポート番号やキャラクタセットを変更するときは、事前に/etc/sysconfig/oracle-xe–18c.conf
ファイルを修正しておくこと。
# /etc/init.d/oracle-xe-18c 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 u
ppercase 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:★確認のためのパスワード入力
#This is a configuration file to setup the Oracle Database.
#It is used when running '/etc/init.d/oracle-xe-18c configure'.
# LISTENER PORT used Database listener, Leave empty for automatic port assignment
LISTENER_PORT=
# EM_EXPRESS_PORT Oracle EM Express URL port
EM_EXPRESS_PORT=5500
# Character set of the database
CHARSET=AL32UTF8
# Database file directory
# If not specified, database files are stored under Oracle base/oradata
DBFILE_DEST=
# SKIP Validations, memory, space
SKIP_VALIDATIONS=false
パスワードの確認が終わるとデータベースの作成がはじまる。以下の出力にはパスワード入力のような表示もあるが、実際にはプログラム内で設定され、何も入力は必要なかった。
SSDパワーの恩恵もあって、これも10分くらいで終了。
Listener configuration succeeded.
Configuring Oracle Database XE.
SYSユーザー・パスワードを入力してください:
*********
SYSTEMユーザー・パスワードを入力してください:
********
PDBADMINユーザー・パスワードを入力してください:
**********
DB操作の準備
7%完了
データベース・ファイルのコピー中
29%完了
Oracleインスタンスの作成および起動中
30%完了
31%完了
34%完了
38%完了
41%完了
43%完了
データベース作成の完了
47%完了
50%完了
プラガブル・データベースの作成
54%完了
71%完了
構成後アクションの実行
93%完了
カスタム・スクリプトを実行中
100%完了
データベースの作成が完了しました。詳細は、次の場所にあるログ・ファイルを参照してください:
/opt/oracle/cfgtoollogs/dbca/XE。
データベース情報:
グローバル・データベース名:XE
システム識別子(SID):XE
詳細はログ・ファイル"/opt/oracle/cfgtoollogs/dbca/XE/XE.log"を参照してください。
Connect to Oracle Database using one of the connect strings:
Pluggable database: ol7-oradbxe/XEPDB1
Multitenant container database: ol7-oradbxe
Use https://localhost:5500/em to access Oracle Enterprise Manager for Oracle Database XE
同時に他のターミナルでtop
とiotop
を立ち上げておくと、動いているのがよく分かって面白いかも知れない。
6. おわりに
何か面白いことが発見できるかと思ったけれど特になし。このあとの続きを書くべきか。うーん。