2000年ごろ破竹の勢いだったOracleデータベース。今もすごいですが。
SolarisとOracleは最強タッグだった気がします。
今回はそのOracle9i 9.2.0をRed Hat Linux 7.3へインストールします。
Oracleと言えば、Oracle8iのような気もしますが、Oracle8iをインストールできるOSを用意できなかったので、Oracle9iを入れます。
- インストール前に
- カーネルパラメーターの設定
- 必須モジュールのインストール
- rootユーザーでの準備
- Oracleユーザーでの準備
- Oracleのインストール
- データベースの作成
- リスナーの設定
- リスナーの起動
- Oracleに接続する
- データベースの自動起動/停止の設定をおこなう
- 終わり
インストール前に
Oracle9iをインストールする前に以下を決定しておきます。
Oracleユーザー | ora920 |
---|---|
Oracleグループ | dba |
SID | ora920 |
ORACLE_BASE | /app/oracle |
ORACLE_HOME | /app/oracle/product/9.2.0 |
NLS_LANG | Japanese_Japan.JA16EUC |
カーネルパラメーターの設定
カーネルパラメーターの値が少ないとインストールに失敗したりOracleが起動しない場合があります。
よくOracleを使用していて不足するパラメータは以下になります。
- 共有メモリセグメントの最大サイズ
- セマフォの最大数
よってこの2つの値を上げる必要があります。
カーネルパラメーターの参照
共有メモリセグメントの最大サイズ
[root@KAZAGUMO root]# cat /proc/sys/kernel/shmmax 33554432 [root@KAZAGUMO root]#
上記結果より現在の値は約33Mになっています。
Oracleは共有メモリセグメントの最大サイズは実メモリの半分の値が推奨です。
今回は実メモリが1Gなので、512Mが必要になります。
セマフォの最大数
[root@KAZAGUMO kernel]# cat /proc/sys/kernel/sem 250 32000 32 128 [root@KAZAGUMO kernel]#
パラメーターの結果は「SEMMSL、SEMMNS、SEMOPM、SEMMNI」の順に表示されるので、「SEMOPM」の値を注目します。
Oracleを動作させるためのセマフォの最大数の数字は最低100以上なので変更します。
カーネルパラメーターの変更
「/etc/rc.d/rc.local」を編集
ファイル「/etc/rc.d/rc.local」に以下2行を追加。
echo 536870912 > /proc/sys/kernel/shmmax
echo 250 32000 100 125 > /proc/sys/kernel/sem
#!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/loca echo 536870912 > /proc/sys/kernel/shmmax ←☆コレ echo 250 32000 100 125 > /proc/sys/kernel/sem ←☆コレ
カーネルパラメーターの反映(OS再起動)
以下コマンドでOSを再起動し、カーネルパラメーターを反映させます。
reboot
必須モジュールのインストール
Oracle9iは以下のモジュールが無いとインストールができません。
- gcc-2.96-110
- cpp-2.96-110
- compat-libstdc++-6.2-2.9.0.16
- glibc-devel-2.2.5-34
- glibc-kernheaders-2.4-7.14
- binutils-2.11.93.0.2-11
必須モジュールの確認
「rpm -q 」コマンドで必須モジュールがインストールされているか確認します。
無い場合は手動でインストールしましょう。
大抵Disc2に入っています。
[root@KAZAGUMO root]# rpm -q gcc cpp compat-libstdc++ glibc-devel glibc-kernheaders binutils gcc-2.96-110 cpp-2.96-110 パッケージ compat-libstdc++ はインストールされていません glibc-devel-2.2.5-34 glibc-kernheaders-2.4-7.14 binutils-2.11.93.0.2-11 [root@KAZAGUMO root]#
今回はパッケージ 「compat-libstdc++」がインストールされていないのでインストールします。
必須モジュールのインストール
「rpm -Uvh」コマンドで必要なモジュールをインストールします。
必須モジュールは大抵Disc2にあるので、Disc2をマウントしてインストールします。
[root@KAZAGUMO root]# mount /mnt/cdrom/ [root@KAZAGUMO root]# rpm -Uvh /mnt/cdrom/RedHat/RPMS/compat-libstdc++-6.2-2.9.0.16.i386.rpm Preparing... ########################################### [100%] 1:compat-libstdc++ ########################################### [100%] [root@KAZAGUMO root]#
以上でLinuxにOracle9iをインストールするための必須モジュールの準備は整いました。
rootユーザーでの準備
ここからはUNIX系のOracle9iをインストールする共通の作業になります。
以下をおこないます。
- JDKのインストール(日本語インストーラーを使用しない場合は不要?)
- Oracleをインストールするディレクトリの作成
- Oracleユーザー/グループの作成
- CD-ROMのコピー
JDKのインストール
Oracle9iではJDK1.3.1が必要なので、JDK1.3.1の最終バージョンの「j2sdk-1_3_1_20-linux-i586.bin」を使います。
しかし実は日本語インストーラーを使用しない場合はおそらく必要ありません。
今記事も英語のインストーラーを使用するので、JDKのインストールの手順はスキップしても問題ありません。
FTPを使ってJDKを「/tmp」へコピー
FTPサーバーを構築して「/tmp」へコピーしてください。
JDKファイルに実行権限を付与
例では「chmod 777」でフルアクセスにしていますが、実行権限だけで問題ありません。
[root@KAZAGUMO root]# cd /tmp/ [root@KAZAGUMO tmp]# chmod 777 j2sdk-1_3_1_20-linux-i586.bin [root@KAZAGUMO tmp]#
JDKのインストール
[root@KAZAGUMO tmp]# ./j2sdk-1_3_1_20-linux-i586.bin . . . Do you agree to the above license terms? [yes or no] yes
ものすごい長い規約を見てから「yes」と入力。
JDKファイルの移動
JDKファイルを「/usr/local/」へ移動する。
[root@KAZAGUMO tmp]# mv jdk1.3.1_20/ /usr/local/ [root@KAZAGUMO tmp]#
シンボリックリンクの作成
[root@KAZAGUMO tmp]# ln -s /usr/local/jdk1.3.1_20 /usr/local/java [root@KAZAGUMO tmp]#
Oracle9iをインストールするディレクトリの作成
今回は以下にOracle9iをインストールします。
- /app/oracle/product/9.2.0
[root@KAZAGUMO root]# mkdir -p /app/oracle/product/9.2.0 [root@KAZAGUMO root]#
Oracleユーザー/グループの作成
以下のように設定する。
- Oracleグループ:dba
- Oracleユーザー:ora920
Oracleグループの作成
[root@KAZAGUMO root]# groupadd dba [root@KAZAGUMO root]#
Oracleユーザーの作成
[root@KAZAGUMO root]# useradd -g dba ora920 [root@KAZAGUMO root]# passwd ora920 Changing password for user ora920. New password: BAD PASSWORD: it is based on a dictionary word Retype new password: passwd: all authentication tokens updated successfully. [root@KAZAGUMO root]#
Oracleをインストールするディレクトリの所有者をOracleの管理者と管理グループに設定
[root@KAZAGUMO root]# chown -R ora920.dba /app [root@KAZAGUMO root]#
Oracle9iのCD-ROMのコピー
Oracle9iのCD-ROMの内容を「/tmp」にコピーします。
別にCD-ROMドライブからインストールしても良いですが、コピーが遅いのとディスクの交換がメンドイためHDDからインストールします。
Oracle9iのCD-ROM3枚分をLinuxへコピー
Oracle9iのCD-ROMのコピーと所有者の変更と実行権限の付与
[root@KAZAGUMO tmp]# cd /tmp [root@KAZAGUMO tmp]# chown -R ora920.dba Disk1 [root@KAZAGUMO tmp]# chown -R ora920.dba Disk2 [root@KAZAGUMO tmp]# chown -R ora920.dba Disk3 [root@KAZAGUMO tmp]# chmod 777 -R Disk1 [root@KAZAGUMO tmp]# chmod 777 -R Disk2 [root@KAZAGUMO tmp]# chmod 777 -R Disk3 [root@KAZAGUMO tmp]#
Oracleユーザーでの準備
ここからはora920ユーザーでログインしておこなう準備作業です。
Oracleの環境変数は以下にします。
- ORACLE_BASE:/app/oracle
- ORACLE_HOME:=/app/oracle/product/9.2.0
- ORACLE_SID:ora920
Oracleユーザーの環境数設定
「.bash_profile」にOracle9iの環境変数を追加します。
英語のインストーラーを使用する場合はCLASSPATHは必要ありません。
日本語インストーラーの場合はCLASSPATHはいると思います。
その場合は、「/local/usr/java/bin」も「PATH」に追加してください。
# # For ora920 # export ORACLE_BASE=/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/9.2.0 export NLS_LANG=Japanese_Japan.JA16EUC export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH export PATH=$PATH:$ORACLE_HOME/bin export ORACLE_SID=ora920 # CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib # CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib # export CLASSPATH
Oracleのインストール
LANGの設定
今回は英語のインストーラーを使用しますので、以下のコマンドを打ちます。
[ora920@KAZAGUMO ora920]$ LANG=C [ora920@KAZAGUMO ora920]$
インストーラーの起動
[ora920@KAZAGUMO ora920]$ ./tmp/Disk1/runInstaller
Welcome
「Next」
インベントリの場所
「OK」
UNIXグループ名
「dba」と入れて「Next」
orainstRoot.sh
rootユーザーで「/tmp/orainstRoot.sh」を実行した後、その後「Countinue」を押します。
[root@KAZAGUMO root]# cd /tmp [root@KAZAGUMO tmp]# ./orainstRoot.sh Creating Oracle Inventory pointer file (/etc/oraInst.loc) Changing groupname of /app/oracle/oraInventory to dba. [root@KAZAGUMO tmp]#
ファイルの場所
「Next」
※今回はNameを変更していますがインストールには関係ありません。そのままでも問題ないです
使用可能な製品
ここは注意。「Product Langues」をクリックします。
言語の選択
「English」と「Japanses」を入れて、「OK」
使用可能な製品
「Next」
インストールタイプ
今回は「Enterprose Edition」を選び、「Next」
Database Configuration
「Software Only」を選び「Next」
サマリー
「Install」
Error(ins_ctx.mk)
「ins_ctx.mk」のエラーは無視(Ignore)でよい。
なお、「insoemagent.mk」が出た場合は、パッチを当てる必要がある。
以下リリースノート抜粋。
3.3 インストール途中で以下のエラーが発生する場合があります。 --------------------------------------------------------------------- Makeファイル /opt/oracle/oracle92/network/lib/insoemagent.mk のターゲット起動中にエラーが発生しました。 --------------------------------------------------------------------- もし上記エラーが発生した場合は、Patch#3119415 を適用して、「再試行」ボタンを押してくだ さい。 Patch#3119415 は Oracle9i Database Release 2(9.2.0) Update CD に含まれます。インストール方 法に関しては Update CD をご確認ください。 また、続いて以下のエラーが発生しますが、このエラーが発生した場合は「無視」ボタンを押 して、インストールを続行してください。この問題は、Patch Set Release 9.2.0.4 以降を適用する ことで解決されます。 また、Oracle9i Database Release 2(9.2.0.4.0) for Linux x86 CD を使用した場合にはこのエラーは 発生しません。 --------------------------------------------------------------------- Makeファイル /opt/oracle/oracle92/ctx/lib/ins_ctx.mk のターゲットInstallを起動中にエラーが発生しました。 --------------------------------------------------------------------- 3.4 インストール終了後、最新の Patch Set Release を適用してください。
スクリプトの実行
rootユーザーで、「root.sh」を実行する。
[root@KAZAGUMO root]# cd /app/oracle/product/9.2.0/ [root@KAZAGUMO 9.2.0]# ./root.sh Running Oracle9 root.sh script... \nThe following environment variables are set as: ORACLE_OWNER= ora920 ORACLE_HOME= /app/oracle/product/9.2.0 Enter the full pathname of the local bin directory: [/usr/local/bin]: Copying dbhome to /usr/local/bin ... Copying oraenv to /usr/local/bin ... Copying coraenv to /usr/local/bin ... \nCreating /etc/oratab file... Adding entry to /etc/oratab file... Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created Finished running generic part of root.sh script. Now product-specific root actions will be performed. [root@KAZAGUMO 9.2.0]#
インストール終了
「Exit」で終わる。
確認
「Yes」
データベースの作成
ログアウトしてその後ログイン
RedHat7.3のX Windowの「twm」では、何故かインストール後にデータベースを作成しようとするとインストーラーが落ちるので一度ログアウトします。
GNOMEとかKDEならログアウトする必要はありません。
Dtabase Configuration Assistantの起動
[ora920@KAZAGUMO ora920]$ dbca
ようこそ
「次へ」
操作
「データベースの作成」を選択し「次へ」
テンプレート
「Data Warehouse」を選択し、「次へ」
データベース識別情報
「グローバルDB名」と「SID」を入力し、「次へ」
データベース接続オプション
そのまま「次へ」
初期化パラメーター
そのまま「次へ」
データベース記憶領域
そのまま「次へ」
作成オプション
「終了」
サマリー
「OK」
パスワード設定
パスワードを入れ「終了」。
リスナーの設定
Oracle Net Managerの起動
[ora920@KAZAGUMO ora920]$ netmgr
リスナーの設定
「OracleNetの構成」→「ローカル」→「リスナー」をクリックし、右上の「+」を押します。
リスナー名の選択
「OK」
リスニングの位置
「アドレスの追加」ボタンを押す。
その後、「ファイル」→「ネットワーク構成の保存」をクリックする。
さらにその後、「ファイル」→「終了」
リスナーの起動
lsnrctl startコマンドを実行
[ora920@KAZAGUMO ora920]$ lsnrctl start LSNRCTL for Linux: Version 9.2.0.1.0 - Production on 27-FEB-2022 12:55:52 Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved. /app/oracle/product/9.2.0/bin/tnslsnrを起?しています。お待ちください... TNSLSNR for Linux: Version 9.2.0.1.0 - Production システム・パラメータ・ファイルは/app/oracle/product/9.2.0/network/admin/listener.oraです。 ログ・メッセージを/app/oracle/product/9.2.0/network/log/listener.logに書き込みました。 リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=KAZAGUMO)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=KAZAGUMO)(PORT=1521)))に接3中 リスナーのステータス ------------------------ 別? LISTENER バージョン TNSLSNR for Linux: Version 9.2.0.1.0 - Production 開始日 27-FEB-2022 12:55:52 アップ時間 0 日 0 時 0 ? 0 秒 トレース・レベル off セキュリティ OFF SNMP OFF パラメータ・ファイル /app/oracle/product/9.2.0/network/admin/listener.ora ログ・ファイル /app/oracle/product/9.2.0/network/log/listener.log エンドポイント・サマリーをリスニングしています... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=KAZAGUMO)(PORT=1521))) リスナーはサービスをサポートしていません。 コマンドは正常に終了しました。 [ora920@KAZAGUMO ora920]$
リスナーはサービスをサポートしていません。とでているが大丈夫です。
Oracleに接続する
sqlplusコマンドを実行
[ora920@KAZAGUMO ora920]$ sqlplus /nolog SQL*Plus: Release 9.2.0.1.0 - Production on 日 Feb 27 13:01:47 2022 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> conn / as sysdba 接3されました。 SQL>
テストユーザーscottでログイン
[ora920@KAZAGUMO ora920]$ sqlplus scott/tiger SQL*Plus: Release 9.2.0.1.0 - Production on 日 Feb 27 13:05:21 2022 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production に接3されました。 SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- BONUS TABLE DEPT TABLE EMP TABLE SALGRADE TABLE SQL>
データベースの自動起動/停止の設定をおこなう
大まかに以下をおこないます。
- Oracleを初期化パラメータから起動するように設定
- スクリプト「/etc/rc.d/init.d/dbora」を作成
- デーモンの登録
- oratabの編集
- dbshutの修正
Oracleの起動をspfileで起動する設定にしているとOS起動時にOracle9iが起動しないので、spfileでなく従来通りの初期化パラメーターから起動するようにします。
その後、dboraをrootユーザーで登録します。
Oracleを初期化パラメータから起動するように設定
Oracle9iではspfileでは自動起動ができないので、pfile(init
SQL*PLUSでpfile作成する
以下を実行します。
create pfile='initora920.ora' from spfile='spfileora920.ora';
[ora920@KAZAGUMO ora920]$ sqlplus /nolog SQL*Plus: Release 9.2.0.1.0 - Production on 火 Mar 1 13:45:20 2022 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> conn / as sysdba アイドル・インスタンスに接3しました。 SQL> startup ORACLEインスタンスが起?しました。 Total System Global Area 219222116 bytes Fixed Size 450660 bytes Variable Size 201326592 bytes Database Buffers 16777216 bytes Redo Buffers 667648 bytes データベースがマウントされました。 データベースがオープンされました。 SQL>create pfile='initora920.ora' from spfile='spfileora920.ora'; ファイルが作.されました。 SQL> shutdown データベースがクローズされました。 データベースがアンマウントされました。 ORACLEインスタンスがシャットダウンされました。 SQL>
spfileの名前を変更
[root@KAZAGUMO root]# cd /app/oracle/product/9.2.0/dbs/ [root@KAZAGUMO dbs]# ls init.ora initdw.ora initora920.ora lkORA920 orapwora920 spfileora920.ora [root@KAZAGUMO dbs]#mv spfileora920.ora spfileora920.ora.org [root@KAZAGUMO dbs]#
以上でspfileから従来の初期化パラメーターへの変更作業の終了です。
スクリプト「/etc/rc.d/init.d/dbora」を作成
rootユーザーで作業をおこないます。
「vi /etc/rc.d/init.d/dbora」で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 ORATAB=/etc/oratab dbora_init() { # get ORACLE_HOME from the first entry, # whose 3rd field is Y, in $ORATAB. if [ ! -f $ORATAB ] then echo "auto startup/shudown of Oracle: $ORATAB does not exist." exit 1 fi ORA_HOME=`awk -F: '/^[^#:]+:.+:[Y]$/ { print $2; exit}' $ORATAB` if [ x$ORA_HOME = "x" ]; then echo "There is not Y entry in $ORATAB ." exit 1 fi # get oracle's owner from owner of dbstart. if [ ! -f $ORA_HOME/bin/dbstart ] then echo "auto startup/shudown 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 alredy 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 alredy 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
dboraに実行権限を付与
[root@KAZAGUMO root]# chmod 755 /etc/rc.d/init.d/dbora [root@KAZAGUMO root]#
デーモンの登録
[root@KAZAGUMO root]# chkconfig --add dbora [root@KAZAGUMO root]#
OS起動/終了時にOracleデーモンの起動/停止を有効にする
root@KAZAGUMO root]# chkconfig dbora on [root@KAZAGUMO root]#
確認
[root@KAZAGUMO root]# chkconfig --list dbora dbora 0:オフ 1:オフ 2:オフ 3:オン 4:オン 5:オン 6:オフ [root@KAZAGUMO root]#
/etc/oratabの編集
「vi /etc/oratab」で「oratab」を編集
「N」を「Y」にします。
変更前
*:/app/oracle/product/9.2.0:N ora920:/app/oracle/product/9.2.0:N
変更後
*:/app/oracle/product/9.2.0:N ora920:/app/oracle/product/9.2.0:Y
dbshutの修正
ORACLE_HOME/bin以下に「dbshut」というOracleを停止するスクリプトがある。
このスクリプトの「shutdown」を「shutdown immediate」へ変更する。
※2か所あります
変更前
connect internal shutdown
変更後
connect internal shutdown immediate
終わり
以上でLinuxにOracle9iのインストール方法でした。
これを自力でできるようになればUNIXの一通りの操作ができるという物差しにもなると思います。