【Oracle on EC2】EC2にOracleDatabaseXEをインストールしてみた(RHEL8)

2022/11/22

(最終更新: 2022/11/22

アイキャッチ画像

はじめに

リレーショナルデータベースとして有名なOracle DatabaseをAWS EC2上に構築する。

以下チュートリアルを参考に実施する。多数つまずいたため、その点も記載する。 手順は多くないが、一から勉強していたため、所要時間は4時間ほどかかっている。

前提条件

構成イメージ

EC2インスタンスを作成して、OracleDatabaseXEをインストールし、データベースを1つ作成する。

冗長構成は無し。

OracleDBonEC2構成図

環境

  • Windows11
  • Amazon EC2(Linux RHEL 8)
  • Oracle Database XE 21cをインストール

Oracleのバージョン、エディションについて

バージョンについて、2022/11現在Oracleのバージョンは19cがLTS21cが最新版とのこと。

また、用途によってエディションがあり、すごくざっくりまとめると以下のようになる。学習用にはXEで良さそうなのでXEをインストールする。

エディション価格用途
XE(Express Edition)無料学習、試用
EE(Enterprise Edition)有料商用
Oracle CloudOracleCloudに含まれる商用

EC2作成

まずはEC2を作成する。公式ページの「要件」を見ると、主に以下の要件が記載されているため、従うこととする。

  • OS:
    • Oracle Linux 8.2以降
    • Red Hat Enterprise Linux 8.2以降
    • SUSE Linux Enterprise Server 15 SP1: 4.12.14-197.29-default
  • RAM:最低1GB以上、推奨は2GB
  • ディスク:10GB以上

今回作成したEC2のスペックは以下の通り。 Oracle DatabaseがRED Hat Enterprise Linux 9(RHEL9)以降には対応していないとの情報が多かったので、RHEL8で実施する。

  • AMI ID:ami-0f903fb156f24adbf(Red Hat Enterprise Linux 8)
    RED HAT 8で検索すると出てくる
  • インスタンスタイプ:m5.large
    (※1日3ドル程の料金がかかるので注意。)
  • VPC:以前作成したもの(10.0.0.0/16
  • サブネット:パブリックサブネット(1a)
    (※データベースをパブリックサブネットに置くことは無いと思うが、練習用なのでOKとする)
  • パブリックIPの自動割り当て:有効化
  • セキュリティグループは新規作成し、sshHTTPのアクセスを受け付ける。
    (※セキュリティが緩いが練習用なのでOKとする)
  • ストレージ:15GiB、gp2(EBSの汎用ボリューム)
    (※ここでは15GiBとしたが、のちに20GiBに変える必要が出てきてしまった。最初から20GiBで作るほうが良いと思う。)

EC2の作成方法は、【AWSに入門してみた】EC2でサーバを立ち上げて、SSHアクセスする | エンジニアを目指す日常ブログにまとめている。

インスタンスを起動出来たら、sshで接続する。

SSH接続方法メモ

以下のコンフィグファイルを、ホストOSのC\:Users\ユーザ名\.ssh\configというファイル名で用意した上で、

~/.ssh/config
Host redhat
    HostName xx.xx.xx.xx # パブリックIPアドレス
    User ec2-user
    Port 22
    IdentityFile "C:\Users\xxx\rsa.pem" # 秘密鍵の絶対パス

PowerShellで以下コマンドを実行する。

> ssh redhat

インストール

EC2にOracleDatabaseをインストールする。大きくは3つの手順となる。

  1. 事前準備パッケージ(oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm)をインストールする
  2. Oracle Database XE をインストールする
  3. データベース作成(/etc/init.d/oracledb_ORCLCDB-19cを利用)※サンプルデータベースを作成できる。

参考:https://www.oracle.com/database/technologies/appdev/xe/quickstart.html

1.事前準備パッケージのインストール

実行手順

事前準備パッケージを公式ページからローカルにダウンロードする。(2022/11/20現在は、「oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm」)

scp等を利用し、ローカルからEC2のホームディレクトリに転送する。

PS C:\Users\user\Downloads> scp oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm redhat:~

EC2にSSHログインし、管理者ユーザでdnf installを実施する。

$ sudo -s
# dnf -y localinstall oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm

メモ

  • scpコマンドの構文:scp [ファイルパス] [接続先IPアドレス:ディレクトリ]
  • dnf:パッケージ管理ソフトyumの後継。
  • RHEL:RED Hat Enterprise Linuxの略。

つまずいた部分①:ファイル間違い

  • 事象:必要なパッケージが足りない旨のエラー。
  • 原因:REDHATのLinuxバージョン(RHEL7)と、インストールしたファイルのバージョン(EL8用)が不整合だった。
  • 解決:EC2を作り直してREDHATのLinuxバージョンをRHEL8に変更した。

元々RHEL7でEC2を立ち上げていたのだが、そこにRHEL8用のrpmファイルをインストールしようとしてしまったため、事前準備パッケージのインストールに失敗した。

# yum -y localinstall oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm

Error: Package: oracle-database-preinstall-21c-1.0-1.el8.x86_64 (/oracle-database-preinstall-21c-1.0-1.el8.x86_64)
           Requires: compat-openssl10
Error: Package: oracle-database-preinstall-21c-1.0-1.el8.x86_64 (/oracle-database-preinstall-21c-1.0-1.el8.x86_64)
           Requires: policycoreutils-python-utils
Error: Package: oracle-database-preinstall-21c-1.0-1.el8.x86_64 (/oracle-database-preinstall-21c-1.0-1.el8.x86_64)
           Requires: libnsl
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

つまずいた部分② サブスクリプションマネージャを使えというエラーが出る

  • 事象:REDHATエラーが出てインストール完了しない。
  • 原因:REDHAT Linuxを使う際はサブスクリプション契約が必要でその設定がされていないことになっている。
  • 解決:コンフィグファイルを書き換えた。EC2でREDHATを使う場合、REDHATのLinuxサブスクリプションはEC2利用料に含まれているので問題ないらしいため、サブスクリプションを利用しない設定とする。

エラー内容は以下。

# dnf -y localinstall oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Red Hat Enterprise Linux 8 for x86_64 - AppStream from RHUI (RPMs)                      111 MB/s |  51 MB     00:00
Red Hat Enterprise Linux 8 for x86_64 - BaseOS from RHUI (RPMs)                          89 MB/s |  55 MB     00:00
Red Hat Ansible Engine 2 for RHEL 8 (RPMs) from RHUI                                     31 MB/s | 2.5 MB     00:00
RHUI Client Configuration Server 8                                                       48 kB/s | 2.3 kB     00:00
Last metadata expiration check: 0:00:01 ago on Sat 19 Nov 2022 11:40:02 AM UTC.
Can not load RPM file: oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm.
Could not open: oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm

/etc/yum/pluginconf.d/subscription-manager.confを書き換えることで解決した。

subscription-manager.conf
[main]
enabled=0

つまずいた部分③rpmがローカルインストールできない(プリインストール)

  • 事象:Can not load RPMといったエラーが出て、インストール完了しない。
  • 原因:不明。
  • 解決:既存のパッケージを最新化した。

エラー内容は以下。

# dnf -y localinstall oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm
Last metadata expiration check: 0:09:32 ago on Sat 19 Nov 2022 01:53:54 PM UTC.
Can not load RPM file: oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm.
Could not open: oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm

dnf自体の再インストールと、他パッケージのアップグレードを実施した。

①dnf再インストール

# sudo dnf reinstall '*dnf*'

②他パッケージのアップグレード

# dnf upgrade

②の効果があり解決した。(真因はわからず。)

2.Oracle DB XEをインストール

以下の公式ページからローカルにrpmファイルをダウンロードする。今回、RHEL8環境のため、 Oracle Database 21c Express Edition for Linux x64 ( OL8 ) をダウンロードした。

https://www.oracle.com/database/technologies/xe-downloads.html

ローカルからEC2のホームディレクトリにscpする。

Powershell
> scp oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm redhat:~

EC2の/home/ec2-user配下でlocalinstallを実行する。

EC2
# dnf -y localinstall oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm

特に問題なく実行できた。

3.サンプルデータベースを作成

データベースを作るのは、DBCAと呼ばれるデータベース作成補助ツールを使うのが一般的のようだが、OracleDatabase18以降、簡単にサンプルデータベースを作成できるコマンドが出てきたとのことで、コマンドを使ってサンプルデータベースを作成する。

ここで「データベース」と言っているのはこの部分で、「インスタンス」と「データベースファイル」のセット。

インスタンスとデータベース

  • 「データベース」は、通常は、OracleDatabaseのソフトウェアをインストールした時に一緒に作るが、インストールした後でも作れる。
  • データベース作成には以下方法がある。
    • DBCA(GUI)
    • SQLでCREATE DATABASE文を実行する
    • /etc/init.d/oracle-xe-21cコマンドを使う(コマンドの中でDBCAを実行している)

参考:Oracle Databaseの作成および構成

実行手順

下記コマンドを実行すると、設定の対話プロンプトが始まるので、管理者ユーザのパスワードを設定する。

# /etc/init.d/oracle-xe-21c configure

つまずいた部分:ディスク容量不足

  • 事象:ディスク容量が足りないエラーで、データベース作成を実行できない。
  • 原因:EBSのディスク容量が足りなくなっていた。
  • 解決:EBS容量を拡張し、マウント先のファイルシステムを拡張した。

以下のエラーが発生していた。

# /etc/init.d/oracle-xe-21c configure

The location '/opt/oracle' specified for database files has insufficient space.
Database creation needs at least '4.5GB' disk space.
Specify a different database file destination that has enough space in the configuration file '/etc/sysconfig/oracle-xe-21c.conf'.

ファイルシステムの残容量を見ると、マウントしたEBSの容量が3.9GBしか残っていなかった。実際は、4.5GBの容量が必要になる。

# df -h

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.7G     0  3.7G   0% /dev
tmpfs           3.7G     0  3.7G   0% /dev/shm
tmpfs           3.7G   17M  3.7G   1% /run
tmpfs           3.7G     0  3.7G   0% /sys/fs/cgroup
/dev/nvme0n1p2   15G   12G  3.9G  75% /tmpfs           747M     0  747M   0% /run/user/1000

そこで、EBSの容量を拡張した。実施内容は以下の記事に記載した。

【AWS】EC2にマウントしているEBSの容量を拡張する

【AWS】EC2にマウントしているEBSの容量を拡張する

リレーショナルデータベースとして有名なOracle DatabaseをAWS EC2上に構築する。

https://bunsugi.com/ebs-expand-on-ec2

作業実施後ファイルシステムを確認すると、空き容量が増えていた。このあと無事にOracleのデータベース作成処理を実行できた。

# df -h

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.7G     0  3.7G   0% /dev
tmpfs           3.7G     0  3.7G   0% /dev/shm
tmpfs           3.7G   17M  3.7G   1% /run
tmpfs           3.7G     0  3.7G   0% /sys/fs/cgroup
/dev/nvme0n1p2   20G   12G  8.9G  56% /tmpfs           747M     0  747M   0% /run/user/1000

データベースにアクセスしてみる

Oracle Databaseがインストールできており、以下のようなフォルダが作成された。

  • /opt/oracle:Oracleベースと呼ばれる。ルートフォルダ。
  • /opt/oracle/product/21c/dbhomeXE:Oracle Databaseがインストールされている場所で、ホームディレクトリと呼ばれる。
  • /opt/oracle/oradata/XE:データベースの値を格納するファイル群が保管される。

実際にデータベースへのアクセスを行なう。

ユーザをスイッチする

自動的にLinuxにoracleというユーザが作られ、SYSDBA権限(最も強力な権限)が与えられているそうなので、oracleにスイッチユーザする。パスワードはわからないので、管理者権限からスイッチする。

# su - oracle

環境変数を設定

ユーザにログインした時に毎回実行される~/.bash_profileに環境変数を書く。

.bash_profileの開き方

※以下 oracle ユーザで実施
$ cd ~
$ pwd
/home/oracle
$ ls -a
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .kshrc
$ vi .bash_profile

もともとある記載の最下部に以下の行を追記する。

~/.bash_profile
export ORACLE_SID=XE
export ORAENV_ASK=NO
. /opt/oracle/product/21c/dbhomeXE/bin/oraenv
export NLS_LANG=Japanese_Japan.AL32UTF8 # 日本設定
export PATH=$ORACLE_HOME/bin:$PATH # sqlplusコマンドを使うためのパス設定

SIDとは データベースの「インスタンス」の名前。今回のサンプルデータベースではデフォルトで「XE」という名前で作られている。環境変数に「XE」を設定しておくことで、XEインスタンスにログインできる。

参考:Oracleのグローバルデータベース名とSIDとは | Oracle初心者でもスッキリわかる

Linuxメモ

  • exportは環境変数を定義するコマンド。ターミナルを閉じると消えてしまう環境変数。
  • .は現行環境で、指定されたシェル・スクリプトを実行するコマンド。

データベースにログインする

$ sqlplus / as sysdba※パスが通っていない場合は $ /opt/oracle/product/21c/dbhomeXE/bin/sqlplus / as sysdba

SQL*Plus: Release 21.0.0.0.0 - Production on Sun Nov 20 08:11:16 2022
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.


Connected to:
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

SID(インスタンスの名前)と、グローバルネーム(データベースファイル)の名前を取得するコマンドを叩く。

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
XE
SQL> SELECT global_name FROM global_name;

GLOBAL_NAME
----------------------------------------------
XE

それぞれの値を確認することができた。

まとめ

Oracle Database XE 21cをEC2上にインストールすることができた。 実際に手を動かしたほうが理解できることもあると思うので、今後使っていく予定。(今日はインストールで力尽きた。)



個別連絡はこちらへ→Twitterお問い合わせ

プロフィール

プロフィールイメージ

はち子

事業会社のシステム部門に異動して4年目の会社員。システム企画/要件定義/システムアーキテクチャ等。

Twitter→@bun_sugi

過去の記事について

はてなブログに掲載の記事(主にプログラミングメモ)についてはこちらに掲載しております。(本ブログに移行中)

タグ一覧

関連記事

Copyright© 2022, エンジニアを目指す日常ブログ

お問い合わせ|プライバシーポリシー