自宅のWindows10にHyper-Vを導入しOracle Linux上にOracle DBを立ててみる
まえがきと目的
インフラSEとして働く中で、なんとなく「勉強して新しい知識を得なければ!」と思いつつも実現したいものが自分の中にないのでモチベーションが続かなかった。
そんな折、顧客の要望でOracle LinuxとOracle DBの組み合わせで構築が必要になった案件が出てきた。
その顧客では元々、SPARCサーバのSolaris上にOracle DBを構築して利用していたのだが、御存知の通りSPARCは次期モデルは販売されず、シリーズの終息が決まっている。
つまり次のハードウェアリプレイスでは別のサーバにする必要がある。
DBサーバは複数台あるため、コストメリットを考えるとVMを構築して運用したい。
VMならばまず候補の筆頭に挙げられるのはVMware vShpereになるが、Oracle DBのライセンスがソフトウェアパーティショニング扱いのため、会社のネットワーク上に複数のvShpereがある場合、全て遷移可能な筐体と判断されライセンス価格がとんでもないことになる。
https://www.oracle.com/assets/partitioning-jp-168078-ja.pdf
(申請することで例外を認められることもあるが、事例としては非常に少ないらしく、この案は絶望的である。)
その次の案として、RHELのKVMで仮想化がある……と言いたいところだが、残念ながらRHELのKVMで仮想化されたサーバではOracle DBがサポートされていない。
厳密に言えば、使用することは禁じられていないが何らかの障害が起きたときに過去のナレッジを元でしか調査はできず、未知の障害にはサポート対応が得られない。
で、本題となるOracle Linuxを採用する方針になった。Oracle LinuxのKVMであれば、Oracle DBのサポートを受けられ、仮想化によってハードウェアの削減も期待できる。Oracle DBの需要が減らないのであれば、今後Oracle LinuxとOracle DBの組み合わせの案件は増えるのではないかと勝手に予想している。ちなみに、学習目的であればOracle DBは無償で使うことが出来る。(OTNライセンス)
使う方針になったはいいものの、これまでLinuxはRHEL(とCentOS)しかまともに使ってこなかったため、いい機会なので勉強しようというわけだ。
Hyper-V上に構築しようと思ったのは特に理由はなく、ぶっちゃけ使ったことのあるVMware PlayerやOracleが出している仮想環境のVertual Boxでもいいのだが、Hyper-Vはこれまであまり使ってこなかったため、こちらもついでに勉強しようと思い至った。
え?Oracle Linux KVM上にVMを立てたほうが学びになるのではって?
……前置きは長くなったが、以下メモがてら記載していく。
環境
ホストOS:Windows 10 Pro (22H2)
CPU:AMD Ryzen 7 2700X Eight-Core Processor 3.70 GHz
メモリ:32GB
ディスク:800GBくらいの空き
※Windows 10 HomeはHyper-Vをインストールできないので諦めてVMware PlayerかOracle VM VirtualBoxを使おう。
ネットワーク:有線LAN インターネット接続あり proxyなし
※会社のネットワークで色々制限がある場合を考慮していないので要注意
Hyper-Vのインストール
特に語ることもなく、Microsoftの下記記事を参照。
インストールが完了し、再起動後にWindowsのスタートメニューを開く(Windowsのマークを左クリックすると出るやつ)と「Hyper-V マネージャ」が出てくる。
せっかくなので「Hyper-V マネージャ」を右クリックして「スタートにピン留めする」をして、スタートメニューから起動しやすくしておこう。お好みでタスクバーにピン止めや、デスクトップにショートカット作成でもいいだろう。
Oracle Linuxのインストール
まずは下記からイメージファイルをダウンロードする。
少し先の話をすると、インストールするOracle DBのバージョンは2023年7月現在最新の長期サポートバージョンである19cにしたい。
19cをサポートするOracle Linuxは7系のバージョンなので、今回は7.9のイメージをダウンロードしよう。
(厳密に言えばOracle DBのパッチであるRU19.7を適用すればOracle Linux8でも使えるのだが、有償サポート契約が必要である)
ちなみにOracle Linux 7のサポート期限は2024/7なので、Oracle Linux 8を使いたい場合はOracle DB 23cを使おう。
ここでは「OracleLinux-R7-U9-Server-x86_64-dvd.iso」をクリックしてダウンロードする。
「Hyper-V マネージャ」を起動すると下記画面が表示されるので、右メニューの「新規」をクリックして「仮想マシン」を選択。
「仮想マシンの新規作成のウィザード」の画面が出るので、次へを選択。(お好みでこのメッセージを表示しないをチェック)
適当な名前を入力し、必要であれば別の場所を指定して次へを選択。
世代の指定が出るが、Oracle Linux7は第2世代でいいらしい。「第2世代」を選択して次へ。
メモリサイズはデフォルトのサイズでとりあえずOK。「この仮想マシンに動的メモリを使用します」のチェックは入れたまま。
次が少し注意。ネットワークの構成は「接続しない」にする。何かしら選択した状態にしておくと、OSインストール時にイメージファイルが読み込まれず、NIC経由でインストールしようとして失敗する。
仮想ハード ディスクの接続は必要であれば容量の大きいディスクに変更しよう。Cドライブには入れないほうがいいだろうが、下の例では他のドライブがいっぱいだったので仕方なくCドライブへ。
インストールオプションで、ダウンロードしておいたOracle LinuxのISOファイルを選択。
あとは「完了」を押してVM作成を開始。作成が完了すると仮想マシンの欄に表示される。
このまま起動してもインストールは始まらない。
作成したVMを右クリックして「設定」を選択。「セキュリティ」の項をクリックする。下記が表示されるので、「セキュアブートを有効にする」のチェックを外してOKを押す。
上記設定をしたら、もう一度作成したVMを右クリックして「接続」でターミナル画面を開き、さらにもう一度作成したVMを右クリックして「起動」すると、おなじみのモノクロ画面が表示される。
上のInstall Oracle Linux 7.9を↑キーで選び、Enterキーで決定。
あとは普通のRHEL系サーバのインストール画面なので、割愛したいところだが、一応説明しておく。
まずは日本語を選択。
いくつか選択する部分があるが、インストール先のところで⚠のマークが出ているので選択する。
選択するとディスクの設定が自動で読み込まれて、⚠が解消されるので「完了」を押す。
続いてネットワークの設定だが、デフォルトでHyper-Vが用意していくれている「Default Switch」は外部ネットワークに接続できず、yum updateなどができない。(昔はできたらしいが、今はできない……らしい)
なので、外部ネットワークに接続できる仮想スイッチを用意する必要がある。
Hyper-V マネージャーの画面の「仮想スイッチ マネージャー」をクリックする。
右画面の仮想スイッチの作成で「外部」を選択し、「仮想スイッチの作成」をクリックする。
名前はお好みでつけて、あとはデフォルトで選択された通りのままOKを押す。ネットワーク接続が失われる注意喚起の画面が出ると思うが、「はい」で進む。(これにより何かしら影響出たときの責任は取れません)
なおHyper-Vのネットワークに関しては下記が参考になる。正直自分でもあまり理解しきれてないので、ふんわり知っておくと良さそう。
仮想スイッチ作成後、仮想マシンを右クリックして「設定」を選択。
ネットワークアダプタを選択して、右メニューの「仮想スイッチ」でさっき作成した仮想スイッチをプルダウンから選択して、OKを押す。
改めてOracle Linuxのインストール画面に戻り、「ネットワークとホスト名」を選択。
ホスト名はお好みで命名し、Ethernet(eth0)を「オン」にして、「完了」を押す。ここで「設定」を押して詳細な設定することも可能だが、あまりネットワークに詳しくないようなら基本的にDHCPのままで進めたほうがよい。ちなみに自分はいじくりこねくり回したらyum updateが通らなくなった。
続いて「ソフトウェアの選択」をクリック。
Oracle DBはインストール時にGUIを使うため、「サーバー(GUI使用)」を選択。下の画像ではなんとなくJava プラットフォームも入れてみた。
あとはインストールを開始を押すだけ。
インストールを待っている間にROOTパスワードとユーザーの作成画面が出るので作成しておこう。
インストールが完了すると、再起動を求められるので再起動を押す。
再起動後はログイン画面が表示される。さっき作ったログインユーザーでログインする。
ログインすると言語やキーボードの初期設定が入るのでいい感じに設定。このままコンソール画面で「端末」を使って設定して行ってもいいが、とりあえず使い慣れたTera Termで色々やっていきたいので、DHCPでネットワークを設定したのであれば、まずはIPアドレスを確認しておく。
右上のトーナメント表みたいなマークをクリックして、出てきた画面で歯車を押す。
表示されたIPアドレスでTera Term接続する。SSHは最初から使える。なお、Oracle DBインストールでGUIを使用するため、コンソール画面は閉じなくて良い。
ログインしたらとりあえずrootユーザーでログインして、yum updateしておく。アップデート終わったらrebootで再起動。
$ su -
# yum update
# reboot
Oracle Databaseのインストール
あとは基本的に下記の資料に沿って進めばいいのだが、ちょっとだけわかりにくいところがあるので補足しておく。
https://www.oracle.com/jp/a/tech/docs/technical-resources/19c-sidb-installationguide.pdf
まずは下記URLからインストールファイルをダウンロード。
https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html
ダウンロードしようとすると、Oracleプロファイルへのサインインを求められるので、まだアカウントをお持ちでない場合は作成しておこう。
ダウンロードできたら、サーバにアップロードする。
Tera Termの[ファイル]→[SSH SCP…]でファイル転送画面を開き、上の[…]でさっきダウンロードしたzipファイルを選択。
To:に/var/tmpを入力し、[Send]でファイルをアップロードできる。自分はファイル一個ならこの方法で転送するが、もちろんWin SCPなどお好みのファイル転送ソフトを使ってよい。
続いて、「Oracle Preinstallation RPM」を使用する。これは、「Oracle DBで使うために必要な初期設定を自動的にやっときますよ」という素晴らしいもので、めちゃくちゃ楽にDBのインストールまで進められる。
下記コマンドを実行する。
# yum install oracle-database-preinstall-19c
これで、さっきの手順書の3.4~3.8は飛ばしていい。
続いてOracle DBのインストーラをGUIで使うための設定をコンソール画面の端末で行う。端末は下記の画像のようにクリックすれば開ける。
開いた端末で下記コマンドを実行。exportの行は公式手順書だと
export DISPLAY=localhost:0.0なのだが、何故かこれだとうまく行かなかった。調べるとDISPLAY=:0ならうまくいくという記事があったので参考にした。どうもlocalhost:0.0と:0は同じ意味らしいのだが……。(前はlocalhost:0.0でもうまく行ってたような)理由の分かる人いましたら教えてください。
# xhost + localhost
# su - oracle
$ export DISPLAY=:0
このコマンドをTera Term上で実行しても意味はないので要注意。
続いてインストールディレクトリを作成する。ここではインストール手順書のままで作成していく。
# mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
# mkdir -p /u01/app/oraInventory
# chown -R oracle:oinstall /u01/app/oracle
# chown -R oracle:oinstall /u01/app/oraInventory
# chmod -R 775 /u01/app
いよいよOracle DBのインストールだ。まずはアップロードしたファイルを展開する。ダウンロードしてきたファイル名は公式の手順書と異なるので変えている。ここでrootユーザーのまま実行してしまうと、ファイルの権限がrootになりoracleユーザーで実行できないので要注意。(一敗)
$ su - oracle
$ unzip /var/tmp/LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.0.0/dbhome_1
続いてGUIの端末で下記を実行。公式手順書ではこのあとにRUを適用したインストールと書かれているが、RUの入手は有償なので適用できない。
$ su -
# su - oracle
$ export LANG=ja_JP.utf8
$ cd /u01/app/oracle/product/19.0.0/dbhome_1
$ ./runInstaller
インストーラが起動したらあとは公式インストール手順書の通り進めていく。最初に「ソフトウェアの設定」を選んであとは基本的には次へ次へを押していけばいい。
スワップ領域の設定をいじってないので、前提条件のチェックでスワップ領域が足りてないと表示が出る。
「次へ」を押して、「インストール」を押す。
インストールの進捗が流れていくが、途中で次のような画面が出て止まる。
端末を立ち上げて、rootユーザーでログイン。
$ su -
# /u01/app/oraInventory/orainstRoot.sh
# /u01/app/oraInventory/root.sh
/u01/app/oraInventory/root.shを実行すると入力を求められるが、ここはEnterでデフォルトの[/usr/local/bin]になる。
実行したら、さっきの画面に戻って[OK]を押す。押すとインストールが完了する。
続いてoracleユーザーの環境変数を設定。
$ vi ~/.bash_profile
以下を「export PATH」の前に追加して保存。
umask 022
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LANG=ja_JP.UTF-8
export NLS_LANG=Japanese_Japan.AL32UTF8
oracleユーザーにログインし直しでもいいが、sourceコマンドによる.bash_profileの読み込みでもいい。
$ source ~/.bash_profile
データベースの作成
続いてDBを作成していく。ここはもうインストール手順書の通り進めるので、記載は省略する。下記を端末で実行するとDBCAのGUIが起動する。
$ $ORACLE_HOME/bin/dbca
というわけでDBの作成が完了。
続いて、ORACLE_SID を環境変数ファイル.bash_profileに追加する。
$ vi ~/.bash_profile
以下を「export PATH」の前に追加して保存。
export ORACLE_SID=orcl
追加したら、bash_profileを読み直す。一応ORACLE_SID=orclになっているか、echoコマンドで確認しておく。
$ source ~/.bash_profile
$ echo $ORACLE_SID
orcl
最後にsqlplusでDB接続ができるか確認する。例としてDB作成時に設定したパスワードをOraPasswordとして下記に記載する。実際はもっと複雑な文字列でないと拒否されたはず。
[oracle@dbsrv1 ~]$ sqlplus system/OraPassword@dbsrv1:1521/orcl
SQL*Plus: Release 19.0.0.0.0 - Production on 土 7月 15 11:08:01 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL>
エラーが表示されずに接続できたらOK!ここまでお疲れ様でした。
おわりに
ここでは説明しませんでしたが、インストールする前にPDBやCDBの知識は軽く持っておいたほうが良いと思います。
次はOracle Database23cのインストールもやってみたいですね。
それでは。