SolarisにOracle10gをインストール

Solaris 10 x86版にOracle10gをインストール。

社内にあるSolarisにインストール、といっても海外にあるため、X Windowでの接続はものすごく動作が遅く1日7時間かけても終わらず、インストールとパッチ当てだけで3日間かかってしまった。

後日、別のSolarisにOracleをインストールするときに、試しにVNCで接続してみた。これがものすごい快適!

◎ GUIを利用するインストール → VNCで作業する。(twmの画面で十分。日本語も表示される)

◎ unzip等のシェルでの作業  → sshで接続したターミナルで作業する。

これが一番時間がかからなかった。 あっという間にインストールが終わった。

参考URL

VNCでSolarisに接続する 

 


下準備編


 

■Oracle10gデータベース・ソフトウェアを入手する

 Oracle Database Software Downloads

 

■ソフトウェア用件を確認する

必要なパッケージを確認する。インストールされていないものはインストールしておく。 

# pkginfo -i SUNWarc SUNWbtool SUNWhea SUNWlibm SUNWlibms SUNWsprot \ 
SUNWtoo SUNWi1of SUNWi1cs SUNWi15cs SUNWxwfnt 

参考サイト 

Solaris 10 1/06 OS パッケージリスト

Solaris 10 パッケージリスト

 

■Oracleソフトウェア・ディレクトリを作成する

オーナー名: oracle(または、ora01、ora02など)

グループ名: oinstall(または、dba、oradbaなど)

マウントポイント: /u01 

 

ベース、インベントリ、ホームの3つのディレクトリがこのように決まる。 

Oracleベース・ディレクトリ: /u01/qpp/オーナー名

Oracleインベントリ・ディレクトリ: /u01/app/オーナー名/oraInventory

Oracleホーム・ディレクトリ: /u01/app/オーナー名/product/10.2.0

 

ユーザーを作成する。

# groupadd oinstall 
# groupadd dba
# useradd -G oinstall,dba oracle

 

Oracleベース・ディレクトリをあらかじめ作っておく。 

# mkdir -p /u01/app/オーナー名
# chown -R オーナー名:グループ名 /u01
# chmod -R 775 /u01

 

■Oracleデータベース・ファイルをしまうディレクトリを作成する

マウントポイント: /u02 

データベースファイルを保存するためのディレクトリ /u02/oradata を作っておく。

# mkdir -p /u02/oradata
# chown -R オーナー名:グループ名 /u02
# chmod 775 /u02

 

■カーネルパラメータの値を変更する

あくまでも推奨値で、これらの値をチューニングしてシステムのパフォーマンスを最適化することをインストールマニュアルの中で薦めている。 

パラメータファイルをバックアップしてから、viで値を変更、追加した。

# cd /etc/
# cp -p system system.ORG
 パラメータ 推奨値 X4400 Fire V240
 set noexec_user_stack  1  1  1
 semsys:seminfo_semmni  100  5120  70
 semsys:seminfo_semmns  1024  65792  2000
 semsys:seminfo_semmsl  256  2048  210
 semsys:seminfo_semvmx  32767  32767  32767
 shmsys:shminfo_shmmax  4294967295  4294967295  4294967295
 shmsys:shminfo_shmmin  1  1  1
 shmsys:shminfo_shmmni  100  2048  100
 shmsys:shminfo_shmseg  10  10  10

今まで利用してきたV240の値を参考にメモしておいた。

変更後は、再起動する。

# shutdown -y -i6 -g0 

 

 


 X Windowを利用してインストール編

 

■Oracle ユーザーの環境の構成

1. デフォルトのファイル・モード作成マスクに値022を指定する。

$ su - oracle
$ vi .profile

$HOME/.profile

ORACLE_BASE=/u01/app/オーナー名; export ORACLE_BASE
ORACLE_HOME=/u01/app/オーナー名/product/10.2.0; export ORACLE_HOME
ORACLE_SID=SID名; export ORACLE_SID
NLS_LANG=Japanese_Japan.JA16EUC; export NLS_LANG
ORA_NLS33=$ORACLE_HOME/nls/data; export ORA_NLS33
PATH=$ORACLE_HOME/bin:$PATH:.; export PATH
LD_LIBRARY_PATH=/usr/openwin/lib:$ORACLE_HOME/lib; export LD_LIBRARY_PATH
HISTFILE=~/.sh_history
HISTSIZE=5000
umask 022 

.profile内に、ORACLE_SID、ORACLE_HOME等が設定されていたら、削除しておく。とインストールマニュアルに書いてあるが、別に書いておいても問題なかった。インストール後に変更があったところは再度修正する。

 

2. .profileを有効にする。 

$ . ./.profile

 

3. Xアプリケーションが表示されるかを確認しておく。

$ /usr/openwin/bin/xlogo 

 

4. df -h コマンドで、/tmpの空きが400MB以上あることを確認しておく。足りない場合は次のようにTMPとTMPDIR環境変数を設定しておく。

$ TMP=/u01/tmp
$ TMPDIR=/u01/tmp
$ export TMP TMPDIR 

 

5. ORACLE_BASE、ORACLE_SID環境変数を設定する。(SIDは5文字以内)

$ ORACLE_BASE=/u01/app/オーナー名
$ ORACLE_SID=sales
$ export ORACLE_BASE ORACLE_SID

 

■インストール作業

1. インストールファイルを抽出する。

$ gunzip oracleインストーラファイル.cpio.gz
$ cpio -idcmv < oracleインストーラファイル 

 Disk1が作成される。

 

インストーラを日本語で表示したいときは、インストーラ実行前にLANGを指定しておく。

$ LANG=ja
$ export LANG

 

2. インストーラを実行する。DVDから直接起動する場合は、/tmpに移動してから実行する。

$ ./runInstaller 

(MacのVMware+Solaris10で、海外のSolarisサーバに接続してOracleのインストール作業を行ったところ、インストーラの画面が表示されるのに1分くらい待たされた。しかもチェックボックスなど、クリックしてから反応があるまで15秒〜1分くらい待たされる。)

 

インストール方法の選択

勝手にdb_1等のディレクトリが指定されることもあるので、ちゃんと確認しておく。

初期データベースの作成のチェックを外しておく。

インストール、パッチ当ての後にdbcaコマンドを使ってデータベースを作成する。

 

インベントリ・ディレクトリ

/u01/app/オーナー名/oraInventory

Oracle製品の構成情報、インストール・ログ等が保存される。 

 

サマリー

インストーラ起動前に、LANG=jaを指定しておいた場合、

製品の言語

・日本語

・英語

という表示がされる。

両方とも英語の場合、EMDC(WebによるOracleの管理)の画面のボタン等が文字化けした。

 

スクリプトをrootユーザで実行

/u01/app/オーナー名/oraInventory/orainstRoot.sh 

・oraInventoryディレクトリが770となり、グループオーナー名が変更される。

/u01/app/オーナー名/product/10.2.0/root.sh

・/usr/local/bin/以下にコマンドがインストールされる。

・/var/opt/oracle/oratabファイルが作られる。(DBCAで利用される) 

 

iSQLの案内

http://ホスト名:5560/isqlplus

http://ホスト名:5560/isqlplus/dba

 

3. インストール完了後、インスタンスを停止する

データベースをインストールした場合は、インスタンスが自動起動される。 

パッチを当てるために、一度インスタンスを終了する。 

$ $ORACLE_HOME/bin/dbshut
$ $ORACLE_HOME/bin/lsnrctl stop 

 

 


パッチ編 

 

■パッチソフトウェアを用意する

https://metalink.orcle.comにログインして、Pathesからダウンロードする。 

$ unzip p5337014_10203_Solaris86-64.zip 

 

■インストーラを日本語で表示する

インストーラを日本語で表示したいときは、インストーラ実行前にLANGを指定しておく。

$ LANG=ja
$ export LANG

 

■パッチを適用する

10.2.0.0.0 -> 10.2.0.3.0 へのパッチを適用する。 

$ cd Disk1
$ ./runInstaller 

GUIの対話式のインストーラでパッチを適用する。

名前: oraDb10g_home1 という名前が勝手についたことを知る。

パス: /u01/app/オーナー名/product/10.2.0 と正しく指定されている。

サマリーが表示され、インストールを実行される。

roo.shを実行する際に/usr/local/bin/*を置換えるか聞かれるので、yを入力する。

 

 


初期データベースの作成編

 

■DBCAを利用してデータベースを作成する

 $ $ORACLE_HOME/bin/dbca

1. 操作

データベースの作成を選択して次へ。

 

2. データベーステンプレート

汎用またはカスタムを選択して次へ。

カスタムを選択すると、パーティショニングやデータマイニングを選ばないですむ。

ウチの会社は、使えない契約なのでカスタムインストールを選択する。 

 

3. データベース識別情報

グローバル・データベース名: sales.example.com(salesでもかまわない)

SID: sales 

 

4. 管理オプション

「Enterprise Managerを使用してデータベースを管理」のチェックを外す。

「データベース管理にDatabase Controlを使用します」は、使わない。

 

ウチの会社ではOEM (Oracle Enterprise Manager) によるモニタリングを使わない方針。SYSMAN processは起動されないということになる。

Oracle Data Mining、Oracle Text, Oracle OLAP、Oracle Spatial(地理情報)、Enterprise Manager Repositoryはインストールしない。 

 

5. データベース資格証明 

パスワード: xxxxx

パスワードの確認: xxxxx

管理内容によって、実際の管理者が異なる場合は、ユーザ毎にパスワードを入力する。

・SYS 最高権限を持っている。

・SYSTEM 管理情報を表示するオブジェクトを作成する。SYSに最も近い管理権限。

・DBSNMP データベース監視のEnterprise Managerが利用するユーザー。

・SYSMAN Enterprise Managerのスーパー管理ユーザー。インスタンスを管理する。 

 

6. 記憶域オプション

ファイルシステムを選択して、次へ。

・ファイルシステム OSで使用する通常のファイルによって保存する。

・自動ストレージ管理ASM 10gから利用できる新しいファイル管理システム。

・RAWデバイス OSを利用せず、直接ディスクのI/Oを利用する。(10gからは、ASMが推奨されている)

 

7. データベース・ファイルの位置 

「すべてのデータベース・ファイルに対して共通の位置を使用」をチェックする。

インストーラが英語表示の場合は、Use Common Location for All Database Filesと表示される。

データベース・ファイルの位置: /u02/oradata/SID名

 

8. リカバリ構成

フラッシュ・リカバリ領域: {ORACLE_BASE}/flash_recovery_area 

フラッシュ・リカバリ領域サイズ: 2048MB(HDDに余裕があれば大きめに)

アーカイブ有効化:

自動アーカイブにチェック。 

アーカイブ・ログ・ファイル形式: %t_%s_%r.dbf 

/u01/oradata/SID名

/u02/oradata/SID名

/u03/oradata/SID名 

(この段階で、アーカイブ用に/u01/oradataと/u03/oradataディレクトリを作った。ついでにchmod 775 oradataしておいた。) 

 

9. データベース・コンテンツ

サンプル・スキーマ チェックして作成すると以下のスキーマが作成される。

・人事管理スキーマHR(Human Resources)

・受注スキーマOE(Order Entry)

・製品メディア・スキーマPM(Product Media)

・販売履歴スキーマSH(Sales History)

 

10. 初期化パラメータ

メモリ: 標準 40%

メモリが32GBあるので、20%の6.4GB割り当てた。

そのときのメモリー分散の値… 

SGAサイズ: 1536MB

PGAサイズ: 1602MB

Oracleプロセスのサイズ: 40MB

Oracleで使用するメモリーの合計: 3178MB 

サイズ指定:

ブロックサイズ: 8192バイト

プロセス数: 150(初期化ファイル・パラメータPROCESSESに指定される)

 キャラクタ・セット:

デフォルトを使用: JA16EUC

各国語キャラクタ・セット: AL16UTF16

デフォルト言語: 日本語

デフォルトの日付書式: 日本

 接続モード

専用サーバー・モード または 共有サーバー・モード

今回は、社内のイントラネット用なのでクライアント数がせいぜい数十人で、メモリも多めなので「専用サーバー・モード」にした。リソース(メモリ)が限界に近づいているマシンでないし、不特定人数がアクセスするサイトでもないので専用を選択。

共有に設定しておいて、バッチ処理は専用にすることも可能。接続記述子の中に(SERVER=DEDICATED) を入れれば専用サーバーモードになる。バッチ処理のときは、conn scott/tiger@orcl-bat、OLTPは、conn scott/tiger@orcl-oltpのように接続する。

 

11. データベース記憶域

ファイルの位置を確認する。

制御ファイル:

初期状態では、同じディレクトリが指定されているが、できるだけ物理的に異なるハードディスクに分散させる。今回は、別ハードディスクにu03を作って/u03としてシンボリックリンクを張った。

{DB_NAME}は、冗長で邪魔なので削った。

control01.ctl: /u01/oradata/SID名/

control02.ctl: /u02/oradata/SID名/

control03.ctl : /u03/oradata/SID名/

最大データファイル数: 100

最大REDOログ・ファイル数: 16

最大ログ・メンバー数: 3 

データファイル:

{DB_NAME}が冗長で邪魔なので削った。 

system01.dbf: /u02/oradata/SID名/

undotbs01.dbf: /u02/oradata/SID名/

sysaux01.dbf: /u02/oradata/SID名/

users01.dbf: /u02/oradata/SID名/

temp01.dbf: /u02/oradata/SID名/

example01.dbf: /u02/oradata/SID名/  → デモ用のデータベース

REDOログ・ファイル:

REDOログ・ファイルも複数のハードディスクに分散することが推奨されている。

{DB_NAME}指定は冗長で邪魔なので、削除した。 サイズは全て同じにする。

redo01.log: /u01/oradata/SID名/ 51200KB

redo02.log: /u02/oradata/SID名/ 51200KB

redo03.log: /u03/oradata/SID名/ 51200KB

 

12. 作成オプション

データベースの作成 をチェックする。

データベース作成スクリプトの生成 をチェックする。保存先は、/u01/app/オーナー名/admin/SID名/scripts

 

最後に「完了ボタン」を押せば、確認画面が表示される。以前作った同じSID名のデータベースが存在している場合は、上書きしてよいかを訪ねてくる。

データベースの詳細が表示されたら、HTML形式でどこかに保存しておくと便利。 

OKボタンで、データベースの作成が始まる。

 

(ORA-01081: cannot start already-running ORACLE – shut it down first というアラートが表示されたので、ps -ef で調べたところデータベースらしきものは動いていなかった。$ORACLE_HOME/bin/dbshutを念のために発行してから、無視ボタンで続行した。そしたら、ORA-01034: ORACLE not availableが表示される。なので、/u02/oradata/SID名/* のファイルを別のディレクトリに移動させて、もう一度完了ボタンを押した)

 

データベース作成が完了後、ログファイルとサーバ・パラメータ・ファイルの場所を知らせてくれる。

ログ・ファイル 

/u01/app/ユーザ名/product/10.2.0/cfgtoollogs/dbca/SID名

サーバー・パラメータ・ファイル

/u01/app/ユーザ名/product/10.2.0/dbs/spfilesSID名.ora

Database Control

http://サーバ名:5500/em または1158ポートが指定される。

 

パスワード管理ボタン:

サンプルスキーマを作ったときはSCOTT等のアカウントロックを外しておくとよい。

 

インストールが終わると、インスタンスが自動起動される。

 

■SQL*Plusで接続してみる

sysで接続できればOK。 

$ sqlplus /nolog
SQL> conn sys as sysdba

 

メモリ使用量を確認 

SQL> show sga

Total System Global Area 1610612736 bytes
Fixed Size		    2466304 bytes
Variable Size		  395861504 bytes
Database Buffers	 1207959552 bytes
Redo Buffers		    4325376 bytes

 

ユーザーの一覧

SQL> select username, created from all_users; 

 

表領域の確認

SQL> select tablespace_name, status, contents from dba_tablespaces; 

 

 

 


接続設定編

■Oracle Net Managerを使って接続設定を行う

$ cd $ORACLE_HOME/bin
$ ./netmgr 

サービス・ネーミングを作成・設定する。 (tnsnames.ora)

Oracle Netの構成 > ローカル > サービス・ネーミング の+をクリックする。

または、編集メニューから作成を選ぶ。 

ネット・サービス名: orclなど適当に。

プロトコル: TCP/IP

ホスト名: IPアドレスまたは、ホスト名

ポート番号: 1521

Oracle8i以上のサービス名: orcl

接続タイプ: データベースのデフォルト

共有サーバーで稼働している場合でも、接続タイプを専用サーバーとして作成できる。バッチ処理のときなどに、そのネット・サービス名を指定して接続すればよい。

 

リスナーを作成・設定する。(listener.ora) 

リスナー名: LISTENER

プロトコル: TCP/IP

ホスト: IPアドレスまたはホスト名

ポート: 1521 

データベース・サービスをプルダウンメニューから選んでデータベースの追加をクリック。

グローバル・データベース名: orcl

Oracleホーム・ディレクトリ: /u01/app/オーナー名/product/10.2.0

SID: orcl  

 

忘れずに、ファイルメニューからネットワーク構成の保存を選ぶ。

以下の2つのファイルが作成または更新される。

/u01/app/オーナー名/product/10.2.0/network/admin/listener.ora

/u01/app/オーナー名/product/10.2.0/network/admin/tnsnames.ora

 

リスナーの起動と終了 

$ lsnrctl stop
$ lsnrctl start

 

 


インスタンスの起動と停止編

・SQL*Plus

・UNIXコマンド

・シェルスクリプト

等によってインスタンスの起動と停止ができる。

 

■SQL*Plusを使ったインスタンスの起動と停止 

sqlplusを起動する。 

$ sqlplus /nolog 

SYSとしてログインする。

SQL> conn sys as sysdba
パスワードを入力してください:  

インストール時に指定したパスワードを使用する。Oracle8iとかだとchange_on_installがパスワード。

データベースを停止する。

SQL> shutdown

・shutdown normal 全てのセッションが終了するのを待ってから、データベースとインスタンスが停止する。normalは省略可。

・shutdown transactional 実行中のトランザクションが終了するのを待ってから、データベースとインスタンスを停止する。

・shutdown immediate 実行中のトランザクションをロールバックして、データベースとインスタンスを終了する。

・shutdown abort 強制終了する。コミットもロールバックもしない。データベースの整合性がとれないため、次回の起動時にリカバリが自動実行される。(インスタンス・リカバリと呼ばれている)

 

データベースを起動する。

SQL> startup

 

■コマンドラインでのインスタンスの起動と停止

$ORACLE_HOME/bin にあるシェルスクリプトコマンドを利用する。 

$ dbshut
$ dbstart

 

oratabの場所。dbstartスクリプトの中に書いてある。

Solaris: /var/opt/oracle/oratab

他のUNIX: /etc/oratab

 

/etc/oratabを用意しておいてもよい。

# cd /etc
# ls oratab
oratab: No such file or directory 

# ln -s /var/opt/oracle/oratab oratab

 

/etc/oratabを次のように編集する。

変更前
orcl:/u01/app/オーナー名/product/10.2.0:N 

変更後
orcl:/u01/app/オーナー名/product/10.2.0:Y

 

dbstartシェルスクリプトを実行する。($ORACLE_HOME/bin/dbstart)

$ dbstart
ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener
Usage: /u01/app/oraiwd2/product/10.2.0/bin/dbstart ORACLE_HOM 

dbstartスクリプトの中身を見ると、第一引数でORACLE_HOME_LISTNERが指定されていないメッセージが表示される。毎回、引数を指定するのは面倒なので変更する。

 

$ORACLE_HOME/bin/dbstart , $ORACLE_HOME/bin/dbshut ともに変更。

変更前
ORACLE_HOME_LISTNER=$1

変更後
ORACLE_HOME_LISTNER=$ORACLE_HOME

 

うーん、ここまでくるのに2つトラブりました。以下、ご参考まで。

spfileを変更したら接続できなくなった

conn / as sysdbaで接続ができない 

 

 


設定ファイルの確認編

■.profile

oracleオーナーの.profileをインストール後、設定を確認、修正する。

ORACLE_BASE=/u01/app/オーナー名; export ORACLE_BASE
ORACLE_HOME=/u01/app/オーナー名/product/10.2.0; export ORACLE_HOME
ORACLE_SID=SID名; export ORACLE_SID
NLS_LANG=Japanese_Japan.JA16EUC; export NLS_LANG
ORA_NLS33=$ORACLE_HOME/nls/data; export ORA_NLS33
PATH=$ORACLE_HOME/bin:$PATH:.; export PATH
LD_LIBRARY_PATH=/usr/openwin/lib:$ORACLE_HOME/lib; export LD_LIBRARY_PATH
HISTFILE=~/.sh_history
HISTSIZE=5000
umask 022 

 

■listener.oraとtnsnames.ora

/u01/app/オーナー名/product/10.2.0/network/admin/listener.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
      )
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.3.4)(PORT = 1521))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0)
     #(PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0)
      (SID_NAME = ORCL)
    )
  ) 

 /u01/app/オーナー名/product/10.2.0/network/admin/tnsnames.ora

 ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.164.15.134)(PORT = 1521)))
    (CONNECT_DATA =(SID = ORCL))
  )

 


インスタンスの自動起動ファイル編

■起動の仕組みと手順を確認する

1. /var/opt/oracle/oratab(Solaris)、/etc/oratab(Linux)でYを指定する。

2. $ORACLE_HOME/bin/dbstart と dbshut が働いてくれることを確認する。

3. /etc/init.d/dboraを作成して、dbstartとdbshutを呼び出す。

4. /etc/init.d/dboraのシンボリックリンクを/etc/rc*.d/に作る。

 

■/etc/init.d/dboraを作成する

シェルスクリプトをvi等で作成する。

/etc/init.d/dbora 

#!/bin/sh
ORA_HOME=/u01/app/oraiwd2/product/10.2.0
ORA_OWNER=oraiwd2
if [ ! -f $ORA_HOME/bin/dbstart -o ! -d $ORA_HOME ]
then
echo "Oracle startup: cannot start"
exit
fi
case "$1" in
'start')
# Start the Oracle databases:
su - $ORA_OWNER -c $ORA_HOME/bin/dbstart &
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start" &
;;
'stop')
# Stop the Oracle databases:
su - $ORA_OWNER -c $ORA_HOME/bin/dbshut &
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop" &
;;
esac
exit

実行権を与えておく。

# chmod 755 /etc/init.d/dbora  

シンボリックリンクを作成する。

# ln -s /etc/init.d/dbora /etc/rc0.d/K10dbora
# ln -s /etc/init.d/dbora /etc/rc3.d/S99dbora

Linuxの場合は、rc0にK10dbora、rc5にS99dbora、rc6にK10dboraとしてシンボリックリンクを作る。

 

 

 


サイレント・モードでインストール編 

 


サイレント・モードでインストールをチャレンジ中に、X WindowやVNCで接続ができることが分かったので、途中でGUIインストールへ変更してしまった。よって記事が書きかけのままで終わっている。。。

 

■oraInst.locファイルを作成する

/var/opt/oracleディレクトリが存在しない場合は作成する。

# -p mkdir /var/opt/oracle
# cd /var/opt/oracle
# vi oraInst.loc

viでoraInst.locファイルを作成して次の行を入力する。

inventory_loc=/u01/app/オーナー名/oraInventory
inst_group=

オーナー名は、上記参照。ほとんどの場合、oracleがよく使われる。

 

所有者とグループと権限を設定する。

# chown オーナー名:グループ名 oraInst.loc
# chmod 664 oraInst.loc 

 

■レスポンス・ファイルを準備する

 

 

■インストーラを用意する

ダウンロードしたファイルを解凍する。

$ gunzip 10gr2_db_sol.cpio.gz 
$ cpio -idcmv < 10gr2_db_sol.cpio