Oracle9i R9.0.1 インストール

 Red Hat Linux 7.1JにOracle9i R9.0.1の90日限定トライアル版をインストールする方法を解説する。なお、この方法でRed Hat Linux 8.0にも入れてみたが、無事にインストールできた(ようである)。
 インストールはOTNからダウンロードできるOracle9iDatabase Release1(9.0.1) for Linux スタートガイドを参考に進めた。なお、データベースはCREATE DATABASE文によって作成したいので、初期データベースは作成しないようにインストールする。

1.インストール用件

 Oracle9i Databaseをインストールするための推奨は次のとおりである。

OSKernel 2.4.4以上、glibc 2.2を搭載したMIRACLE LINUX V2.0、Red Hat Linux 7.1
CPUPentium II 233MHz以上
メモリ512MB以上
空きディスク容量3.5MB以上(モジュール 2.5GB、初期DB 1GB)
スワップ領域搭載メモリの2倍、または512MB以上の大きいほうの値以上
その他/tmpに400MB以上の空きディスク容量
Sun JDK 1.3.1もしくはBlackdown JDK 1.1.8

2.ディレクトリ配置

 Oracle9iから、標準のOFA(Oracle Flexible Architecture)が次のように変わった。

Oracle8iまでのOFA
/u01 ORACLE_HOME
/u02 データファイル用1
/u03 データファイル用2
/u04 データファイル用3
データファイル用のマウントポイントを3つに分割し、制御ファイルおよびREDOログファイルを分散させる。そのため、/u02から/u04は物理的に異なるハードディスクに割り当てることが推奨されていた。
Oracle9iのOFA
/opt ORACLE_HOME + データファイル用
トップディレクトリが1つになっているため、インストール時には明確に制御ファイルの分散などを行わない。インストール後の手動の設定が必要となる。

 また、Oracle9iでのデフォルトディレクトリ設定は次のようになる。

ORACLE_BASE/opt/oracle
ORACLE_HOME/opt/oracle/product/9.0.1
初期データベース/opt/oracle/product/9.0.1/oradata/ora901/*.dbf
制御ファイル/opt/oracle/oradata/ora901/*.ctl
REDOログファイル/opt/oracle/oradata/ora901/*.log

 以下のインストール手順は、このディレクトリ構成で作成する。

3.インストール前に行う作業

3-1 ディスクイメージをハードディスクにコピー

 今回テストするOracle9i R9.0.1トライアル版はDB Magazineの2002年5月号の付録DVDから入手した。インストールだけでCD3枚分、さらにJDKもインストールしなければならないので、ハードディスクにコピーして、ハードディスクからインストールすることにする。

/tmp/disk1
/tmp/disk2
/tmp/disk3
/tmp/jdk

3-2 JDK 1.3.1インストール

 Oracle HTTP Serverに含まれるApache JServを利用するには、JDK 1.3.1をインストールしなければならない。まずはパッケージの解凍を行う。

# cd /tmp/jdk
# ./j2skd-1_3_1_02-linux-i386-rpm.bin

 上記のように実行すると、使用権許諾の条項が表示された後にyes/noを聞かれる。yesと入力してEnterを押すと、RPM形式のJDKが作成される。これをインストールする。

# rpm -ivh jdk-1.3.1_02.i386.rpm

 インストールしたら、シンボリックリンクを作成しておく。

# ln -s /usr/java/jdk1.3.1_02 /usr/lib/java

3-3 グループとユーザを作成

 Oracle9iをインストールするためのユーザとグループ、およびOracleを管理するユーザとグループを作成する。この作業はrootで行う。

# groupadd oinstall
# groupadd dba
# useradd -g oinstall -G dba oracle
# passwd oracle
パスワードを入力

3-4 oracleユーザの環境変数を設定

 oracleユーザの環境変数を設定する。環境変数は.bashrcに設定するのがいいだろう。

# su - oracle
$ vi .bashrc

 # User specific aliases and functionsの下に、次のように設定して保存する

# User specific aliases and functions
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/9.0.1
export ORACLE_SID=orcl901 ←作成予定のデータベース名
export NLS_LANG=Japanese_Japan.JA16EUC
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_DOC=$ORACLE_HOME/doc
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/classes12.zip
CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/nls_charaset12.zip
export CLASSPATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/etc/lib:$ORACLE_HOME/jdbc/lib
export LD_LIBRARY_PATH

 保存したら、再度ログインしなおすか、以下のコマンドで環境変数が有効になる。

$ source .bashrc

3-4 Oracleをインストールするディレクトリを作成

 OracleServerのプログラムや、データベースの格納先を作成する。OracleDatabaseはrootユーザではなく、管理用のユーザである「oracle」ユーザで管理するため、ディレクトリの所有者も変更しなければならない。

$ su -
(rootのパスワードを入力)
# mkdir /opt/oracle
# mkdir /opt/oracle/product
# mkdir /opt/oracle/product/9.0.1
# chown -R oracle.oinstall /opt/oracle
# chmod -R 755 /opt/oracle

4.インストーラの起動

 ここからは、Oracleの管理ユーザであるoracleユーザで作業を行う。oracleユーザでログインしなおしてから、Oracle8iのインストーラはX Window上でしか動かないため、X Windowを起動する。

# su - oracle
$ startx

インストーラの起動

 runInstallerというファイルを実行すると、インストーラが起動する。ターミナルを開き、次のように実行する。

# cd /tmp/disk1
# ./runInstaller &

 なお、3枚組みのCDがある場合は、DISK1をCDドライブに入れ、マウントしてからインストーラを起動する。

$ su -
(rootのパスワードを入力)
# mount /mnt/cdrom
# su - oracle
# /mnt/cdrom/runInstaller & ←※

 ※ /mnt/cdromにCDしてからインストーラを起動してしまうと、インストール途中のディスクの入れ替えができなくなるので、他のディレクトリから呼び出す

5.インストールの実行

 Oracle9i R9.0.1からは、日本語環境のままインストールができるようになった。ここからは、インストーラが立ち上がってからの作業を順番に説明する。インストールはカスタムで行い、初期データベースは作成しないことにする。

5-1 ようこそ

 Nextをクリック。インベントリの場所を指定するダイアログボックスが表示されるので、次のように指定して、OKボタンをクリック。

/opt/oracle/product/9.0.1/oraInventory

5-2 UNIXグループ名

 インストールを行うユーザのユーザグループを指定する。次のように指定して、次へをクリック。

oinstall

 すると、ダイアログが表示される。メッセージの通り、これは、rootユーザでorainstRoot.shを実行する。ターミナルで、次のように実行する。

$ su -
(rootのパスワードを入力)
# /tmp/orainstRoot.sh

 エラーメッセージが出なければ成功。ダイアログの続行ボタンをクリックする。

5-3 ファイルの場所

 インストール元(ソース)とインストール先を設定する。インストール元はそのままでいいはずなので、インストール先を次のように指定して、次へをクリック。

/opt/oracle/product/9.0.1

5-4 使用可能な製品

 Oracle9i Databaseをインストールするので、Oracle9i Database 9.0.1.0.0を選択して次へをクリック。

5-5 インストール・タイプ

 Enterprise Editionが選択されていることを確認して、次へをクリック。

5-6 Database Configuration

 インストール時に作成する初期データベースの設定を選択する。初期データベースを作成せず、ソフトウェア・モジュールのみをインストールしたいのでSoftware Onlyを選択して、次へをクリック。

5-7 Choose JDK Home Directory

 JDKのインストール先を設定する。次のように入力して次へをクリック。

/usr/lib/java

5-8 サマリー

 サマリーの確認。インストールの情報が正しいことを確認して、インストールボタンをクリック。やっとインストールが始まる。
 途中で「ディスクの場所」ウィンドウが現れるので、2枚目、3枚目のディスクが入っているディレクトリを指定する。CDからインストールしている場合はrootユーザでCDのマウントを解除し、ディスクを入れ替えてから再度マウントを行い、OKボタンをクリックする(インストーラをCDドライブから実行しているとマウントが解除できない!!)。

エラー!!!

 インストールは正常に終了するが、リンクが62%くらいのところで次のようなエラーが出る。

Makeファイル/opt/oracle/product/9.0.1/plsql/lib/ins_plsql.mkのターゲットinstallを起動中にエラーが発生しました。

 OTN(http://otn.oracle.co.jpからダウンロードしたOracle9i for Linux Intel リリースノート リリース1(9.0.1)の16ページ目に原因と、回避方法が書いてある。まとめると、次のようになる。

  1. ターミナルでoracleユーザになる
  2. 次のようにコマンドを実行する
    # su - oracle
    $ cd $ORACLE_HOME/bin
    $ cp genclntsh genclntsh.ORIG
    $ vi genclntsh
  3. 147行目を次のように編集する
    変更前:LD_SELF_CONTAINED = "-z def"
    変更後:LD_SELF_CONTAINED = ""
  4. 変更したgencltshスクリプトを実行
    ./genclntsh
    実行しても何のメッセージも表示されずにとまっているように見える。でもちゃんと処理をしているのでじーっと待つ(結構時間がかかる)。「Created /opt/oracle/product/9.0.1/lib/libclntst9.a」と表示されれば成功。
  5. エラーのダイアログに戻り、再試行ボタンをクリック

 インストールが終わる直前で、Setup Privilegesというダイアログが表示される。これは、root.shを実行しなさいというメッセージなので、ターミナルでrootユーザになり、次のように実行する。

$ su -
(rootのパスワードを入力)
# /opt/oracle/product/9.0.1/root.sh

 実行すると、次のようなメッセージが出る。

Running Oracle9 root.sh script...
The following environment variables are set as:
  ORACLE_OWNER= oracle
  ORACLE_HOME= /opt/oracle/product/9.0.1

Enter the full pathname of the local bin directory: [/usr/local/bin]:

 ここで、次のように入力してEnterキーを押す。

/usr/bin

 正常に実行されると、次のようなメッセージが出て、プロンプトに戻る。これにより、Oracleプログラムのユーザ権限が正しく設定される。

Copying dbhome to /usr/bin
Copying oraenv to /usr/bin
Copying coraenv to /usr/bin
・・・省略・・・
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.

 ダイアログのOKボタンをクリックする。

5-9 構成ツール

 Oracle Net Configuration Assistantを起動させるようだが、処理中のメッセージのまま停止してしまう。ここで設定する必要は特にないのでOracle Net Configuration Assistantを選択して「中止」ボタンをクリック。エラーメッセージのOKボタンをクリックするとInstallerに制御が戻るので、次へをクリック。

5-10 インストールの終了

 これでインストールが終了である。左下の終了ボタンをクリックして、インストーラを終了させる。ダイアログが表示されるので、「はい」を選択する。

4.Oracleデータベースの作成

 DB AssistまたはCREATE DATABASEでデータベースを作成する。これは別のページで解説する。

5.リスナーの設定・起動

 作成したデータベースを他クライアントマシンから接続して利用するには、リスナーを起動しなければならない。これは別のページで解説する。

6.自動起動の設定

 Oracleデータベースを作成したら、サーバ起動時にデータベースが起動するように設定を行う。この作業はrootで行う。

6-1 /etc/rc.d/init.d/dboraファイルの作成

 /etc/rc.d/init.dディレクトリ内にdboraというファイルを作成する。

$ su -
(rootのパスワードを入力)
# vi /etc/rc.d/init.d/dbora

 以下のスクリプトを入力し、保存する。

#!/bin/sh
#
# chkconfig: - 99 10
# description: Oracle Database Server
# processname: ora_
#
# dbora This shell script takes care of starting and stopping
# Oracle Database Server.
SUBSYS=/var/lock/subsys/dbora
dbora_init() {
# get ORACLE_HOME from the first entry,
# whose 3rd field is Y, in /etc/oratab.
if [ ! -f /etc/oratab ]
then
echo "auto startup/shutdown of Oracle: /etc/oratab does not exist."
exit 1
fi
ORA_HOME=`awk -F: '/^[^#:]+:.+:[Y]$/ { print $2; exit}' /etc/oratab`
if [ x$ORA_HOME = "x" ]; then
echo "There is not Y entry in /etc/oratab."
exit 1
fi
# get oracle's owner from owner of dbstart.
if [ ! -f $ORA_HOME/bin/dbstart ]
then
echo "auto startup/shutdown of Oracle: Oracle may not be installed" \
"correctly."
exit 1
fi
ORA_OWNER=`ls -l $ORA_HOME/bin/dbstart ¦ awk '{print $3}'`
}
case "$1" in
'start')
if [ -f $SUBSYS ]; then
echo $0 already started.
exit 1
fi
dbora_init
# Start the Oracle databases:
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart"
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
# Start Intelligent Agent and Oracle Management Server
# --- for Oracle9i ---
# su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl start"
# su - $ORA_OWNER -c "$ORA_HOME/bin/oemctl start oms"
# --- for Oracle8i ---
# su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_start"
# su - $ORA_OWNER -c "$ORA_HOME/bin/oemctrl start oms"
# --------------------
# Start the Oracle HTTP Server
# This is a BUG workaround. $ORACLE_HOME/Apache/Jserv/etc
# /jserv.properties needs DISPLAY.
# test -z "$DISPLAY" && export DISPLAY=":60000.0"
# su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl start"
# --------------------
touch $SUBSYS
;;
'stop')
if [ ! -f $SUBSYS ]; then
echo $0 already stopped.
exit 1
fi
dbora_init
# Stop Intelligent Agent
# --- for Oracle9i ---
# su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl stop"
# --- for Oracle8i ---
# su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_stop"
# --------------------
# Stop the Oracle HTTP Server
# su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl stop"
# --------------------
# Stop the Oracle databases:
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut"
rm -f $SUBSYS
;;
'restart')
$0 stop
$0 start
;;
'status')
if [ -f $SUBSYS ]; then
echo $0 started.
else
echo $0 stopped.
fi
;;
*)
echo "Usage: $0 {start¦stop¦status}"
exit 1
esac
exit 0

 作成した/etc/rc.d/init.d/dboraファイルに実行権をつけ、起動スクリプトに追加。

# chmod 755 /etc/rc.d/init.d/dbora
# chkconfig --add dbora
# chkconfig dbora on

6-2 $ORACLE_HOME/bin/dbshutの編集

 $ORACLE_HOME/bin/dbshutを実行すると、Oracleデータベースが終了するが、SHUTDOWNコマンドがノーマルで実行されるため、トランザクションが実行されたまま暴走している場合などに待ちが発生し、終了できなくなってしまう。そのため、viで$ORACLE_HOME/bin/dbshutを編集する。

# vi $ORACLE_HOME/bin/dbshut

 80行目と85行目にあるshutdownコマンドを、次のように変更して保存する。

変更前:shutdown
変更後:shutdown immediate

6-3 /etc/oratabの編集

 自動起動させたいOracleデータベースを/etc/oratabで指定する。

# vi /etc/oratab

 一番下にサンプルの設定があるので、その行を修正して保存する。

変更前:*:/opt/oracle/product/9.0.1:N
変更後:orcl901:/opt/oracle/product/9.0.1:Y ←ここをYにしないと起動しない

7.その他

7-1 データベースの起動・停止

 データベースの起動・停止は管理ユーザであるoracleユーザで行わなければならない。データベースの起動は次のように行う。

$ sqlplus /nolog
SQL> connect / as sysdba
SQL> startup
・・・データベースが起動する・・・
SQL>

 起動中のデータベースを停止させるには次のように行う。

$ sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown
・・・データベースが停止する・・・
SQL>

 なお、shutdown immediateとすると、実行中のトランザクションを強制的に取り消してから停止する。

7-2 SQL*Plusを使わずにデータベースを起動・停止する

 SQL*Plusを使わずに/etc/oratabに設定されているデータベースを起動するには、次のように実行する。

$ dbstart

 同様に、データベースを停止させるには次のように実行する。

$ dbshut

7-3 Oracle Net リスナーの起動・停止

 Oracleデータベースを他のクライアントマシンから利用するには、Oracle Net(旧Net8)が起動していなければならない。起動は次のように実行する。

$ lsnrctl start

 停止は次のように実行する。

$ lsnrctl stop

7-4 Oracle HTTP Serverの起動・停止

 標準のインストールではOracle HTTP Serverもインストールされる。起動は次のように実行する。

$ $ORACLE_HOME/Apache/Apache/bin/apachectl start

 停止は次のように実行する。

$ $ORACLE_HOME/Apache/Apache/bin/apachectl stop

7-5 使えるユーザ

 データベース作成時に利用できるユーザとパスワードは次の通りである。

アカウント名パスワード
SYSchange_on_install
SYSTEMmanager

 このままにしておくのは非常に危険なので、パスワードはすぐに変更しよう。なお、Oracleでは大文字、小文字の区別は無い。

$ sqlplus /nolog
SQL> connect system/manager
SQL> ALTER USER sys IDENTIFIED BY 新しいパスワード;
SQL> ALTER USER system IDENTIFIED BY 新しいパスワード;
SQL> disconnect
SQL> exit

[ TOP ]