Hacking Oracle Database XE 18c インストール編


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. 参考資料

手始めにこのあたりのドキュメントをあさってみよう。

2. Oracle Database XEをダウンロードする

Oracle Database XEをダウンロードするには次の方法がある。

  1. OracleのWebサイトにログインし、ライセンスに同意してダウンロードする
  2. OracleのWebサイトから直接ダウンロードする(2020年2月から可能)
  3. 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を手動でインストールしている。

RHEL7のインストール手順
# 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セクションの一部
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にも対応しているのか?

preinstallセクションの一部。続き
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

インストールログを見ると、興味深いことは書かれていなかった。

/var/log/oracle-database-xe-18c/results/oraInstall.log
[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:★確認のためのパスワード入力
/etc/sysconfig/oracle-xe–18c.conf
#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

同時に他のターミナルでtopiotopを立ち上げておくと、動いているのがよく分かって面白いかも知れない。

6. おわりに

何か面白いことが発見できるかと思ったけれど特になし。このあとの続きを書くべきか。うーん。