*ORACLE 10g RAC環境構築 [#w382d333]
*[[Oracle]]/ORACLE 10g RAC環境構築 [#w382d333]
VMwarePlayer で CentOS 5.6 + Oracle 10g での RAC環境構築になります。
|BGCOLOR(#f0f8ff):NIC|BGCOLOR(#f0f8ff):ホスト名|BGCOLOR(#f0f8ff):IPアドレス|BGCOLOR(#f0f8ff):ホスト名|BGCOLOR(#f0f8ff):IPアドレス|
|eth0(パブリック)|orac1.com|192.168.11.21|orac2.com|192.168.11.22|
|eth1(プライベート)|orac1i.com|192.168.100.21|orac2i.com|192.168.100.22|
|VIP(仮想NIC)|orac1v.com|192.168.11.31|orac2v.com|192.168.11.32|
パブリックは実際にOracleに接続する際に使用。プライベートはRAC間での通信のみに使用。~
~
**CnetOSのHW構成 [#nd350a03]
-OSインストールする際のパッケージに、開発環境(gccとか入ってるやつ)と開発ライブラリを追加。~

-物理NICを2つ作成しておく。ブリッジ(eth0)と、ホストオンリー(eth1)。~

-1号機で以下の通り新規にディスクを追加
|BGCOLOR(#f0f8ff):用途|BGCOLOR(#f0f8ff):ディスク名|BGCOLOR(#f0f8ff):容量|
|OCRの保存場所|ocr.vmdk|200MB|
|投票DISK保存場所|vot.vmdk|200MB|
|DBのDATA保存場所|dg_data.vmdk|2G|
|Flash Recovery領域|dg_frec.vmdk|2G|

-2号機は、既存のディスクから上記ディスクを選択する~

-共有のマウントできるように、VMの設定ファイル(*.vmx)に以下を追加する
 disk.locking = "false"
 diskLib.dataCacheMaxSize = "0"
 diskLib.dataCacheMaxReadAheadSize = "0"
 diskLib.dataCacheMinReadAheadSize = "0"
 diskLib.dataCachePageSize = "4096"
 diskLib.maxUnsyncedWrites = "0"
~

**IPアドレスの定義 [#qaa5cba2]
 # vi /etc/sysconfig/network-scripts/ifcfg-eth0
 # vi /etc/sysconfig/network-scripts/ifcfg-eth1

1号機の設定
 DEVICE=eth0
 BOOTPROTO=static
 IPADDR=192.168.11.21
 ONBOOT=yes

 DEVICE=eth1
 BOOTPROTO=static
 IPADDR=192.168.100.21
 ONBOOT=yes

2号機の設定
 DEVICE=eth0
 BOOTPROTO=static
 IPADDR=192.168.11.22
 ONBOOT=yes

 DEVICE=eth1
 BOOTPROTO=static
 IPADDR=192.168.100.22
 ONBOOT=yes

**/etc/hostsの設定 [#h634d353]
 # Physical IP
 192.168.11.21	orac1.com	orac1
 192.168.11.22	orac2.com	orac2
 
 # Private IP
 192.168.100.21	orac1i.com	orac1i
 192.168.100.22	orac2i.com	orac2i
 
 # Virtual IP
 192.168.11.31	orac1v.com	orac1v
 192.168.11.32	orac2v.com	orac2v
~

**事前チェックを回避させる [#a5a555e9]
 # vi /etc/redhat-release
  [修正前] CentOS release 5.6 (Final)
  [修正後] Red Hat Enterprise Linux AS release 4 (Nahant update 4)
~

**oracleユーザーの作成 [#jc149c37]
 # groupadd oinstall
 # groupadd dba
 # groupadd oper
 # useradd -g oinstall -G dba,oper oracle
 
 # passwd oracle ‥‥パスワードの変更
~

**パッケージの確認 [#r63912ab]
 # rpm -qa | grep libXp.so.6
 # rpm -qa | grep binutils
 # rpm -qa | grep compat-db
 # rpm -qa | grep control-center
 # rpm -qa | grep gcc
 # rpm -qa | grep glibc
 # rpm -qa | grep glibc-common
 # rpm -qa | grep libstdc++
 # rpm -qa | grep libstdc++-devel
 # rpm -qa | grep make
 # rpm -qa | grep pdksh
 # rpm -qa | grep sysstat
 # rpm -qa | grep xscreensaver
 # rpm -qa | grep libaio
~

**入ってないパッケージをインストール [#z4bfb5a4]
 # yum -y install libXp.so.6
 # yum -y install compat-db
 # yum -y install pdksh
 # yum -y install sysstat
 # yum -y install xscreensaver
 # yum -y install libaio
 # yum -y compat-gcc*
 # yum -y install compat-libstdc*
 # yum -y install openmotif*
~

**ClusterWareのRPMパッケージインストール [#t43b1b10]
10201_clusterware_linux32.zip を解凍後、./clusterware/rpm/ディレクトリに保存されている
 # rpm -iv cvuqdisk-1.0.1-1.rpm
~

**インストールディレクトリ作成 [#nd9c04d6]
 # mkdir -p /opt/app/oracle
 # chown -R oracle:oinstall /opt/app
 # chmod -R 775 /opt/app
~

**カーネルパラメータ追加 [#od02d024]
 # vi /etc/sysctl.conf
 
 kernel.sem = 250 32000 100 128
 kernel.shmmni = 4096
 fs.file-max = 65536
 net.ipv4.ip_local_port_range = 1024 65000

 # /sbin/sysctl -p ‥‥設定反映
~

**oracleユーザーの環境変数定義 [#h8b5c019]
 # vi ~oracle/.bash_profile
 
 umask 022
 ORACLE_BASE=/opt/app/oracle
 ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db
 ORACLE_SID=orcl1
 ORA_CRS_HOME=$ORACLE_BASE/product/10.1.0/crs
 LD_LIBRARY_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/lib
 PATH=/bin:/usr/bin:/usr/local/bin:/sbin/:$ORACLE_HOME/bin:$ORA_CRS_HOME/bin
 
 export PATH LD_LIBRARY_PATH ORACLE_BASE ORACLE_HOME ORACLE_SID ORA_CRS_HOME
 
 alias cddb='cd $ORACLE_HOME'
 alias cdcrs='cd $ORA_CRS_HOME'
 alias cdasm='cd $ORACLE_BASE/product/10.1.0/asm'
&color(red){※ORACLE_SIDは2号機はorcl2にすること};~
~

**RAWデバイスの作成 [#f37eeb51]
 # fdisk -l
 正常な領域テーブルを含んでいません になってる4つのDISKを確認する(/dev/sdb〜eと思われる)

 # fdisk /dev/sdb
 
 n ⇒ p ⇒ 1 ⇒ Enter x 2回 ⇒ w の順番で/dev/sdb〜sdeまで実行する

 コマンド (m でヘルプ): n
 コマンドアクション
    e   拡張
    p   基本領域 (1-4)
 p
 領域番号 (1-4): 1
 最初 シリンダ (1-204, default 1): 
 Using default value 1
 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-204, default 204): 
 Using default value 204
 
 コマンド (m でヘルプ): w
 領域テーブルは交換されました!
 
 ioctl() を呼び出して領域テーブルを再読込みします。
~

 # vi /etc/udev/rules.d/60-raw.rules
 
 ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
 ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"
 ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"
 ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw4 %N"

 # vi /etc/udev/rules.d/61-raw-permission.rules
 
 KERNEL=="raw1", MODE="0640", OWNER="root", GROUP="oinstall"
 KERNEL=="raw2", MODE="0640", OWNER="oracle", GROUP="oinstall"
 KERNEL=="raw3", MODE="0660", OWNER="oracle", GROUP="dba"
 KERNEL=="raw4", MODE="0660", OWNER="oracle", GROUP="dba"
~
ここで一旦OSをリブートさせる。~
~

**デバイス初期化 [#v02d553d]
 # dd if=/dev/zero of=/dev/raw/raw1 bs=1024k count=200
 # dd if=/dev/zero of=/dev/raw/raw2 bs=1024k count=200
 # dd if=/dev/zero of=/dev/raw/raw3 bs=1024k count=2000
 # dd if=/dev/zero of=/dev/raw/raw4 bs=1024k count=2000
~

**SSH構成 [#oc079f0d]
***RSA/DSA鍵の作成(1/2号機で実施) [#xbc8f06f]
 # su - oracle
 $ mkdir ~oracle/.ssh
 $ chmod 700 ~/.ssh
 
 $ /usr/bin/ssh-keygen -t rsa
 $ /usr/bin/ssh-keygen -t dsa

***鍵のコピー(1号機のみで実施) [#k75b204c]
 $ touch ~/.ssh/authorized_keys
 $ cd ~oracle/.ssh
 $ ssh orac1 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys
   ⇒yes ⇒oracleユーザーのパスワード
 $ ssh orac1 cat /home/oracle/.ssh/id_dsa.pub >> authorized_keys
 $ ssh orac2 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys
   ⇒yes ⇒oracleユーザーのパスワード
 $ ssh orac2 cat /home/oracle/.ssh/id_dsa.pub >> authorized_keys
 $ scp authorized_keys orac2:/home/oracle/.ssh

***パスフレーズを求められずにsshコマンドが出来るようにする(1/2号機で実施) [#e1c48aa2]
 $ exec /usr/bin/ssh-agent $SHELL
 $ /usr/bin/ssh-add

*Cluster Wareのインストール [#q22610cd]
以降、oracleユーザーのGUI環境(1号機)にて実施すること。~
~
 $ cd clusterware(clusterwareを解凍した時に作成されたディレクトリ)
 $ ./runInstaller

-インベントリ・ディレクトリと資格証明の指定~
デフォルトのまま~
~

-ホームの詳細の指定
,名前,OraCrs10g_home
,パス,/opt/app/oracle/product/10.1.0/crs
~

-クラスタ構成の指定
|BGCOLOR(#f0f8ff):パブリック・ノード名|BGCOLOR(#f0f8ff):プライベート・ノード名|BGCOLOR(#f0f8ff):仮想ホスト名|
|orac1.com|orac1i.com|orac1v.com|
|orac2.com|orac2i.com|orac2v.com|
~

-ネットワーク・インターフェースの使用方法の指定~
eth0 を パブリックに変更する~
~

-Oracle Cluster Registryの場所~
外部冗長性を選択し「/dev/raw/raw1」~
~

-投票ディスクの場所~
外部冗長性を選択し「/dev/raw/raw2」~
~

-シェルの実行
インストール途中、以下のシェル実行を促されるので1/2号機両方とも順番にやる~
root.shは並行して実行するとおかしくなるので注意~
 # /opt/app/oracle/oraInventory/orainstRoot.sh
 # /opt/app/oracle/product/10.1.0/crs/root.sh
&color(red){VIPノード・アプリケーションの存在をチェック 失敗};と表示されるが無視して終了する。~
~

**VIPの構成(rootユーザーにて1/2号機実行) [#r37d57a9]
***vipcaを起動可能にする [#sfd09a19]
 # vi /opt/app/oracle/product/10.1.0/crs/bin/vipca
 以下の行をコメントアウト(64bitの場合、arch=`uname -m` の部分はコメントアウトしない)
        #Remove this workaround when the bug 3937317 is fixed
 #      arch=`uname -m`
 #       if [ "$arch" = "i686" -o "$arch" = "ia64" ]
 #      then
 #            LD_ASSUME_KERNEL=2.4.19
 #            export LD_ASSUME_KERNEL
 #       fi
        #End workaround
       ;;
~
***VIPコンフィグレーションを作成する [#k0ca6274]
rootユーザーにてGUI環境にログインする
 # cd /opt/app/oracle/product/10.1.0/crs/bin
 # ./vipca
-クラスタ・ノードの仮想IP
IP別名に orac1v.com と入力すると以下の通り自動で他の設定値が反映させる
|BGCOLOR(#f0f8ff):ノード名|BGCOLOR(#f0f8ff):IP別名|BGCOLOR(#f0f8ff):IPアドレス|BGCOLOR(#f0f8ff):サブネット|
|orac1|orac1v.com|192.168.11.31|255.255.255.0|
|orac2|orac1v.com|192.168.11.32|255.255.255.0|

**サービス制御コマンド [#h0317541]
起動できないので、以下の箇所をコメントアウトする
 # vi /opt/app/oracle/product/10.1.0/db/bin/srvctl
 ※srvctl単体で実行した時、PATHが$ORACLE_HOME優先なので、dbの方を修正しないとエラーになる
 
 #Remove this workaround when the bug 3937317 is fixed
 #LD_ASSUME_KERNEL=2.4.19
 #export LD_ASSUME_KERNEL
~

*ASMのインストール [#t27c3142]
10201_database_linux32.zip を任意のディレクトリに解凍する

**ASMのインストール [#v8d4c189]
以降、oracleユーザーのGUI環境(1号機)にて実施すること。~
 $ cd database
 $ ./runInstaller
-インストール・タイプの選択~
Enterprise Edition~
~

-ホームの詳細
,名前,OraCrs10g_home1
,パス,/opt/app/oracle/product/10.1.0/asm
~

-ハードウェアのクラスタ・インストールモードの指定~
クラスタ・インストールを選択し、orac2にチェックを入れる。~
~

-構成オプションの選択
自動ストレージ管理(ASM)の構成を選択。~
任意のパスワードを入力。~
~

-自動ストレージ管理の構成~
ディスク・グループ名に「DATA」~
冗長性に「外部」~
選択で、/dev/raw/raw3 にチェックを入れる。~
~

-rootシェルの実行(1/2号機で実行)~
 # /opt/app/oracle/product/10.1.0/asm/root.sh
~

&color(red){orac2のASMマウントできないのエラー};が発生するが無視して進める~
~
**サービス起動の確認(全てONLINEになっていること) [#n5dcc723]
 $ /opt/app/oracle/product/10.1.0/crs/bin//crs_stat -t

 Name           Type           Target    State     Host
 ------------------------------------------------------------
 ora....SM1.asm application    ONLINE    ONLINE    orac1
 ora....C1.lsnr application    ONLINE    ONLINE    orac1
 ora.orac1.gsd  application    ONLINE    ONLINE    orac1
 ora.orac1.ons  application    ONLINE    ONLINE    orac1
 ora.orac1.vip  application    ONLINE    ONLINE    orac1
 ora....SM2.asm application    ONLINE    ONLINE    orac2
 ora....C2.lsnr application    ONLINE    ONLINE    orac2
 ora.orac2.gsd  application    ONLINE    ONLINE    orac2
 ora.orac2.ons  application    ONLINE    ONLINE    orac2
 ora.orac2.vip  application    ONLINE    ONLINE    orac2

**ASMマウントできない事象の対応 [#u9fbe7cd]
1/2号機共にOS再起動し、クラスターサービスを再度実行すると何故か復旧する
 # /opt/app/oracle/product/10.1.0/crs/crsctl enable crs
 # /opt/app/oracle/product/10.1.0/crs/crsctl start crs
コマンド実行後、順番にリソースが起動され3分後くらいに全てのサービスが起動完了する。~
crsctl enable crs を実行しないとcrsctl start crsしてもサービス起動しなかった。~
~
単純にクラスターサービスの再起動でも直るような気がする。~
 # crsctl enable crs
 # crsctl stop crs
 # crsctl start crs
~

*Databaseのインストール [#hb1d9bce]
**データウェアのインストール [#ra8e7711]
以降、oracleユーザーのGUI環境(1号機)にて実施すること。~
 $ cd database
 $ ./runInstaller
-インストール・タイプの選択~
Enterprise Edition~
~

-ホームの詳細
,名前,OraCrs10g_home2
,パス,/opt/app/oracle/product/10.1.0/db
~

-構成オプションの選択~
データウェア・ソフトウェアのみインストール~
~


**ASMディスク追加 [#o5643091]
 $ cd /opt/app/oracle/product/10.1.0/db/bin
 $ ./dbca
~
-初期画面
Oracle Real Application Clusterデータベースを選択する~
~

-ステップ1~
自動ストレージ管理の構成~
~

-ステップ2~
すべて選択~
パスワードを聞かれるので、ASMで設定したパスワードを入力する。~
~

-ステップ3~
「新規作成」で新しいディスクグループを追加する。~
 ・ディスク・グループ名に「FRA」~
 ・冗長性に「外部」~
 ・選択で、/dev/raw/raw4 にチェックを入れる。~
前の画面に戻るので、FRAを選択する。~
~

**データベース作成 [#t1e99023]
-実行する操作~
データベースの作成~
~
-データベースの記憶域のディスク選択~
DATAにチェック~
~

-データベースのリカバリオプションの選択~
フラッシュ・リカバリ領域の指定にチェック。~
参照から「FRA」を選択する。~
~

-グローバルSID~
orcl~
~


**状態確認 [#de9d5f20]
 $ crs_stat -t
 Name           Type           Target    State     Host        
 ------------------------------------------------------------
 ora....SM1.asm application    ONLINE    ONLINE    orac1       
 ora....C1.lsnr application    ONLINE    ONLINE    orac1       
 ora.orac1.gsd  application    ONLINE    ONLINE    orac1       
 ora.orac1.ons  application    ONLINE    ONLINE    orac1       
 ora.orac1.vip  application    ONLINE    ONLINE    orac1       
 ora....SM2.asm application    ONLINE    ONLINE    orac2       
 ora....C2.lsnr application    ONLINE    ONLINE    orac2       
 ora.orac2.gsd  application    ONLINE    ONLINE    orac2       
 ora.orac2.ons  application    ONLINE    ONLINE    orac2       
 ora.orac2.vip  application    ONLINE    ONLINE    orac2       
 ora.orcl.db    application    ONLINE    ONLINE    orac1       
 ora....l1.inst application    ONLINE    ONLINE    orac1       
 ora....l2.inst application    ONLINE    ONLINE    orac2

 $ sqlplus / as sysdba
 SQL> select instance_name from v$instance;
 
 INSTANCE_NAME
 ----------------
 orcl1
~

**再起動後のサービス復帰 [#rf94a1fc]
 # crsctl start crs
 # emctl start dbconsole
~
 # vi /etc/oratab で自動起動の設定があるっぽいが試してない
~

**クライアント側でのtnsnames.ora [#p9597eaf]
DBをインストールしたtnsnames.oraをそのままコピーして配置すればよい
 $ORACLE_HOME/network/admin/tnsnames.ora
  LISTENERS_ORCL =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.21)(PORT = 1521))
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.22)(PORT = 1521))
   )
 
 ORCL =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.21)(PORT = 1521))
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.22)(PORT = 1521))
     (LOAD_BALANCE = yes)
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = orcl)
     )
   )
 
 ORCL1 =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.21)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = orcl)
       (INSTANCE_NAME = orcl1)
     )
   )
 
 ORCL2 =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.22)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = orcl)
       (INSTANCE_NAME = orcl2)
     )
   )

 sqlplus UID/PASS@ORCL  で 1か2号機にログイン
 sqlplus UID/PASS@ORCL1 で 1号機にログイン
 sqlplus UID/PASS@ORCL2 で 2号機にログイン
~

**2号機へのリスナー経由ログインができない [#ab2bfe7e]
crs_stat -t でlsnrがONLINEになっているにも関わらず、接続できない~
原因不明ですが、以下の流れを行うと接続可能になる~
 ./srvctl stop lsnr -n orac2
 lsnrctl start
 ./srvctl start lsnr -n orac2
~

**トラブルシューティング [#x46efdf7]
***文字化けする [#q73649e5]
NLS_LANG環境変数を設定する。文字コードがUTF8の場合は以下の通り
 export NLS_LANG=JAPANESE_JAPAN.AL32UTF8

トップ   編集 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS