Oracle Database 11g Release2 をVirtualBox上のCentOS 6.5にインストール
というわけで今さら感が非常に強いけれども、Silver DBA 11g試験に向けた勉強のため、参考書に頼ってインストールをしようとしたら、例によってあれこれハマったので手順をメモしておく。
CentOS 6.5のインストール
前提としてVirtualBox x CentOS 6.5(Desktop minimal)の環境を用意した。CentOSを使ったのは、Oracle Databaseを始めOracleの各種パッケージがRPM形式で提供されているから。
Oracle Databaseは基本的にGUIのインストーラや管理アプリケーションを使っての運用が前提となるのでDesktop版とした。また、とはいえあれもこれもは要らないのでminimalとした(インストール中に選ぶことになる)。
- VirtualBoxの公式サイトで同アプリのインストーラ.dmgファイルをダウンロード。今回は、VirtualBox 4.3.12 for OS X hosts。
- ついでに拡張パックVirtualBox 4.3.12 Oracle VM VirtualBox Extension Packもダウンロード。これがあると何かといって便利、というか、ないと何かといって不便。
- インストーラを使ってインストールを行う。特別なことはしない。
- CentOSの公式サイトでCentOS 6.5(X86 64bit)のDVDメディアの.isoファイルをダウンロード。DVD、しかも2枚組なのでさすがに時間がかかりそう、ということで、「... also via Torrent.」(Torrentもあるよ!)の案内にしたがい、BitTorrentを使用してダウンロードした。
- VirtualBoxで、アーキテクチャ64bit、メモリ2GB、ハードディスク20GBの仮想マシンを作成。
- これを起動するとすぐVirtualBoxがOSインストールメディアを尋ねてくるので、先ほどダウンロードしたISOファイルの1枚目を指定。
- CentOSのブートメニューが表示されるので一番上の項目を選んで即座にインストール手続きに進んだ。
- 途中、言語指定でJapaneseを選択。初期インストールの構成としてDesktop minimalを選択した。またパーティション分割の設定では自動設定(計画)の内容を確認してスワップが2GB以上あることを確認した。
▲仮想マシンの構成。[オペレーティングシステム]欄がRed Hat(64bit)となっているが、これは単に仮想マシン作成時の初期設定で選んだものがそのまま表示されているだけ。あの設定にどれほどの意味があるのかよくわかっていない。
CentOSのネットワーク設定
インストール完了後、初回ログイン後、なぜかネットワークが自動接続になっていないので、設定変更する(もしかしたらインストール手続きの中でそういう設定を選ぶ箇所があったのかもしれない)。
- デスクトップ画面右上あたりのネットワークアイコンを右クリック→[接続を編集する]で[ネットワーク接続]ウインドウを表示。
- [System eth0]を選択→[編集]で[System eth0の編集]ウインドウを表示。
- [自動接続する]チェックボックスをON→[適用]。
- rootユーザのパスワード入力を求められるので入力して[認証する]。
実はCentOSインストール完了直後に拡張パックGuest Additionsをインストールしていた(インストール時にエラーが発生するが、これについては他の方がすでに言及しているのでここでは割愛)。しかしその後何かの拍子にこれが無効化してしまい、Oracle Databaseインストール完了後に、再インストールを行った。Oracle Databaseのインストールを優先したので、あえて無視していたのだけど。よくわからない。
Oracleインスタンスのインストール
さて、ここからが大変だった。
- 後々OUIを起動したときに警告を受けるのでrootユーザに切り替えてhostsに設定を追記:"vi /etc/hosts"。
- "172.0.0.1 localhost localhost.localdomain..."などとなっているものを"172.0.0.1 centos65 localhost..."などと適当に設定。
- 通常のユーザに戻る。
- Oracleの公式サイトからOracle Database 11g Release2のインストーラZip(File1, File2)をダウンロードする。
- Zipファイルを解凍:"unzip linux.x64_11gR2_database_1of2.zip"、"unzip linux.x64_11gR2_database_2of2.zip"などとコマンドを実行する。
- "database"というディレクトリ配下にファイルが展開されるので、同ディレクトリ内に移動:"cd database/"。
- このままインストーラを起動するとOUIが完璧に文字化けするので環境変数を設定:"export LANG=C"。
- OUIを起動する:"./runInstaller"
- OUIの[Configure Security Updates]画面では[Email]欄は空欄のままとし、[I wish to receive security updateds ...]うんぬんのチェックボックスをOFFにして[Next](学習用なのでセキュリティ情報はいりません)。
- "You have not provided an email address."うんぬん確認のダイアログが表示されるので[Yes]。
- [Select Installation Option]画面では[Install database software only]ラジオボタンをONにして[Next](まずはOracleインスタンスを構成するソフトウェア群を揃える方針で進める)。
- [Node Selection]画面では[Single instance database installation]ラジオボタンをONにして[Next](RACとかぜんぜん興味ない)。
- [Select Product Languages]画面では[Available Languages]の中から抜かりなく[Japanese]を選んで、[Selected Languages]に追加して[Next](ここでJapaneseを選んでおかないと、後々EnterpriseManagerを使うときに同アプリの画面が大いに文字化けするという話を見聞きしたので)。
- [Select Database Edition]画面では[Enterprise Edition]を選択して[Next]。
- [Specify Installation Location]画面はいわゆる"ORACLE_BASE"と"ORACLE_HOME"の設定画面。画面上[Oracle Base]欄と[Software Location]欄に自動設定された内容を確認(後者が"ORACLE_HOME"に該当)。とくに違和感がなければそのまま[Next](いずれもOUIを起動したユーザのホームディレクトリ配下のサブディレクトリに設定される様子)。
- [Create Inventory]画面はその名の通りインヴェントリ・ディレクトリのパスを指定する画面。これも[Inventory Directory]欄と[oraInventory Group Name]欄に自動設定された内容を確認して、問題なければそのまま[Next]。
- [Privileged Operating System Groups]画面はOSのデータベース管理グループと運用グループを設定する画面。[Database Administrator (OSDBA) Group]欄と[Database Operator (OSOPER) Group]欄を確認。問題なければそのまま[Next](いずれもOUIを起動したユーザのグループが自動設定されている)。
- 続く[Perform Prerequisite Checks]画面では前提条件のチェック結果が表示される。結果としてチェック結果NG "Failed" となった条件がたくさん。
- 一覧の[Fixable]に[Yes]となったものは自動修正スクリプトが用意されているもの。当該項目を選択して[Fix & Check Again]。
- [Execute Fixup Scripts]ウインドウが表示されるので、そこにある指示通り端末を起動してrootユーザに切り替えたあと"/tmp/CVU_11.2.0.1.0.../runfixup.sh"うんぬんのスクリプトを実行(ここでカーネルパラメータをいくつか設定しているのだけど、少なくともこのうち1つは本来/etc/sysctl.confにも設定を記述すべきものらしい。詳細は後述)。
- スクリプトが実行完了したら[Execute Fixup Scripts]に戻って[OK]。再度チェックが走るがまだまだたくさんの"Failded"が残っている。
- 今度は前提条件のうちでも"Packages"の一群の条件に注目して、ここで言及されているパッケージを片っ端からインストールしていく。
- ここで一覧上各パッケージには細かなバージョン指定があるがそこは無視する。例えば"Package: libaio-0.3.105 Failed"などとあっても、"yum search libaio"でパッケージを探すとより最新のバージョンしか公式リポジトリからはインストールできないことがわかる。これは仕方ない。バージョンナンバー指定を見なかったことにして、"yum install libaio"とする。
- さらに注意点として"compat-libstdc++-33-3.2.3"は"33"の部分をパッケージ名に入れて"yum install compat-libstdc++-33"としなくてはいけないとか、"pdksh-5.2.14"は"yum install mksh"としなくてはいけないとか("yum search pdksh"コマンドを実行するとmkshパッケージがヒットする)。
- 一連のパッケージのインストールが終わったら[Check Again]をクリック。しかし"Failed"は残る。"Swap Size Failed"のほか、最前バージョンナンバーを無視してインストールを実施した各種パッケージが"Failed"のまま。
- これらはもう今さらどうしようもないので、ウインドウ右上の[Ignore All]チェックボックスをONにして、[Next]。
- [Summary]画面ではこれまで指定してきた各種情報が表示される。もしレスポンスファイルが必要ならウインドウ右下の方の[Save Response File...]からファイルを保存する。
- 内容に問題がなければ[Finish]。インストール本処理が進んでいくのを見守る。とくに"Link Binaries"のところが成功するのを固唾を呑んで見守る(私の時には何事もなく終わった)。
- [Execute Configuration Scripts]ウインドウが表示される。
- 画面の指示通り端末を起動してrootユーザに切り替え、上記画面で指定された2つのスクリプトを順次実行。
- "root.sh"を実行すると"Enter the full pathname of the local bin directory: [/usr/local/bin]:"と入力を求められるが何も入力せず[Enter]。
- [Execute Configuration Scripts]画面に戻り[OK]。
- [Finish]画面が表示されるので[Close]。これでOracleインスタンスを構成するソフトウェアのインストールは完了。
リスナーの作成
- 端末を起動して.bashrcファイルを編集する:"vi .bashrc"。
- "export PATH=app/.../product/11.2.0/dbhome_1/bin:$PATH"うんぬんの1行を追加する(パスは適切なものを設定すること)。
- viを"wq"で終了したら、端末を再起動。
- 例によってLANG環境変数を変更:"export LANG=C"。
- NetCAを起動する:"netca"。
- 最初の画面で[Listener configuration]チェックボックスをONにして[Next]。
- 次の画面で[Select what you want to do:]と質問されるので[Add]をONにして[Next]。
- [Listener name:]欄はデフォルトの"LISTENER"のままにして[Next]。
- [Selected Protocols]に"TCP"が設定されていることを確認して[Next]。
- [Use the standard port number of 1521]がONとなっていることを確認して[Next]。
- [Would you like to configure another listener?]と質問されるので[No]をONにして[Next]。
- リスナー作成が完了した旨のメッセージが画面に表示されたら[Next]。
- NetCA起動直後の画面に戻るので[Finish]。
- 端末には最前作成したLISTENERリスナーが"lsnrctl start LISTENER"コマンドで起動されたことがわかるメッセージが出力されている。
Oracleデータベースの作成
- 引き続きOracleデータベースの作成に進む。端末からDBCAを起動する:"dbca"。
- [Select the operation that you want to perform:]と質問されるので[Create a Database]がONになっていることを確認して[Next]。
- テンプレートを選択する画面が表示されるので[General Purpose or Transaction Processing]が選択されていることを確認して[Next]。
- [Global Database Name]欄には適当なグローバル・データベース名(例:myoradb.centos65)を入力する。[SID]欄にはグローバル・データベース名のデータベース名部分(例:myoradb)が自動設定される。必要に応じて修正の上で(私はそのままにした)、[Next]。
- 管理オプションの設定画面が表示されるので[Configure Enterprise Manager]チェックボックスがONになっていることを確認の上で[Next]。
- DBA権限ユーザの認証情報設定画面が表示されるので、すべてのDBAユーザのパスワードを一括設定すべく[Use the Same Administrative Password for All Accounts]ラジオボタンをON。[Password]欄と[Confirm Password]欄にパスワードを入力して[Next]。
- 短いパスワードを設定すると、「Oracleが推奨するパスワード設定ポリシーに反する」うんぬんの警告が出力されるが、学習用であれば気にすることでもなしということで[Yes]。
- データベースファイルの格納場所を設定する画面が表示されるので、[Storage Type]が"File System"、[Storace Locations]欄の[Use Database File Locations from Template]がONとなっていることを確認して[Next]。
- リカバリ設定の画面が表示されるが、とくだん内容を精査もせず[Next]。
- 次の画面で[Sample Schemas]というタブが表示される。このタブに同名のチェックボックスがあるのでONにして[Next]。
- 初期化パラメータの設定画面が表示されるので、[Character Sets]タブを表示して、[Use Unicode (AL32UTF8)]ラジオボタンをON。
- [Default Language]欄で"Japanese"、[Default Territory]欄で"Japan"を選択したら[Next]。
- [Database Storage]という見出しのついた画面が表示される。なぜこのタイミングなのかよくわからない。そのまま[Next]。
- 作成オプションの画面が表示されるので、[Create Database]チェックボックスがONになっていることを確認の上、必要に応じて[Save as a Database Template]チェックボックスもONにして[Finish]。
- 確認画面が表示されるので、必要に応じて画面右下の[Save as an HTML file...]から出力内容のコピーを保存する。問題なければ[OK]。
- 先ほどテンプレート作成オプションをONにしていた場合は、テンプレート作成完了のダイアログがすぐに表示される。[OK]すると今度はデータベース作成の本処理が始まる。
- 完了したあと表示される画面では右下の[Password Management]からDBAユーザ以外のユーザについてロック解除等を行える(サンプルスキーマを作成するオプションをONにしていた場合)。[Exit]で画面を閉じる。
インストール後の各種設定
Linux版SQL*Plusでは↑↓矢印でコマンド履歴を操作することができないので代替としてrlwrapというツールをインストールしたり、各種環境変数を設定したり、カーネルパラメータの設定をいじったりします。
- 端末を起動してrootユーザに切り替える。
- カーネルパラメータの設定ファイルを書き換える:"vi sysctl.conf"。
- "kernel.sem = 250 100"などとなっている箇所を、"kernel.sem = 250 32000 100 200"に変更して保存。これはOracleインスタンスのインストール時にrunfuxup.shが行っていたのと同じ設定。sysctl.confにも書いておかないとOS再起動後のOracleインスタンス起動時にもろにエラーが発生する(ORA-27154)。
- 次にこちらのページの内容を参考にEPELリポジトリを追加。
- その後rlwrapをインストール:"yum --enablerepo=epel install rlwrap"。
- 通常ユーザに戻る:"exit"。
- エイリアスや環境変数の設定をするため.bashrcを編集:"vi ~/.bashrc"。
- SQL*Plus起動時にいちいち"rlwrap sqlplus"とタイプするのは面倒なのでエイリアスを設定:"alias sqlplus='rlwrap sqlplus'"。
- "ORACLE_HOME"の設定を追加:"export ORACLE_HOME=/home/.../app/.../product/11.2.0/dbhome_1"。
- "ORACLE_UNQNAME"の設定を追加:"ORACLE_UNQNAME=(SID)"。
- "NLS_LANG"の設定を追加:"export NLS_LANG=Japanese_Japan.UTF8"。
- 以上で.bashrcの変更を終え、保存して閉じる。
- 端末を再起動してSQL*Plusで接続テストを実施:"sqlplus sysman/...@orcl11r2"。