Oracle/ORACLE 10g RAC環境構築

VMwarePlayer で CentOS 5.6 + Oracle 10g での RAC環境構築になります。

NICホスト名IPアドレスホスト名IPアドレス
eth0(パブリック)orac1.com192.168.11.21orac2.com192.168.11.22
eth1(プライベート)orac1i.com192.168.100.21orac2i.com192.168.100.22
VIP(仮想NIC)orac1v.com192.168.11.31orac2v.com192.168.11.32

パブリックは実際にOracleに接続する際に使用。プライベートはRAC間での通信のみに使用。

CnetOSのHW構成

  • OSインストールする際のパッケージに、開発環境(gccとか入ってるやつ)と開発ライブラリを追加。
  • 物理NICを2つ作成しておく。ブリッジ(eth0)と、ホストオンリー(eth1)。
  • 1号機で以下の通り新規にディスクを追加
    用途ディスク名容量
    OCRの保存場所ocr.vmdk200MB
    投票DISK保存場所vot.vmdk200MB
    DBのDATA保存場所dg_data.vmdk2G
    Flash Recovery領域dg_frec.vmdk2G
  • 2号機は、既存のディスクから上記ディスクを選択する
  • 共有のマウントできるように、VMの設定ファイル(*.vmx)に以下を追加する
    disk.locking = "false"
    diskLib.dataCacheMaxSize = "0"
    diskLib.dataCacheMaxReadAheadSize = "0"
    diskLib.dataCacheMinReadAheadSize = "0"
    diskLib.dataCachePageSize = "4096"
    diskLib.maxUnsyncedWrites = "0"

IPアドレスの定義

# 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の設定

# 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


事前チェックを回避させる

# vi /etc/redhat-release
 [修正前] CentOS release 5.6 (Final)
 [修正後] Red Hat Enterprise Linux AS release 4 (Nahant update 4)


oracleユーザーの作成

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

# passwd oracle ‥‥パスワードの変更


パッケージの確認

# 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


入ってないパッケージをインストール

# 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パッケージインストール

10201_clusterware_linux32.zip を解凍後、./clusterware/rpm/ディレクトリに保存されている

# rpm -iv cvuqdisk-1.0.1-1.rpm


インストールディレクトリ作成

# mkdir -p /opt/app/oracle
# chown -R oracle:oinstall /opt/app
# chmod -R 775 /opt/app


カーネルパラメータ追加

# 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ユーザーの環境変数定義

# 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'

※ORACLE_SIDは2号機はorcl2にすること

RAWデバイスの作成

# 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をリブートさせる。

デバイス初期化

# 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構成

RSA/DSA鍵の作成(1/2号機で実施)

# su - oracle
$ mkdir ~oracle/.ssh
$ chmod 700 ~/.ssh

$ /usr/bin/ssh-keygen -t rsa
$ /usr/bin/ssh-keygen -t dsa

鍵のコピー(1号機のみで実施)

$ 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号機で実施)

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add

Cluster Wareのインストール

以降、oracleユーザーのGUI環境(1号機)にて実施すること。

$ cd clusterware(clusterwareを解凍した時に作成されたディレクトリ)
$ ./runInstaller
  • インベントリ・ディレクトリと資格証明の指定
    デフォルトのまま

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

  • クラスタ構成の指定
    パブリック・ノード名プライベート・ノード名仮想ホスト名
    orac1.comorac1i.comorac1v.com
    orac2.comorac2i.comorac2v.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
    VIPノード・アプリケーションの存在をチェック 失敗と表示されるが無視して終了する。

VIPの構成(rootユーザーにて1/2号機実行)

vipcaを起動可能にする

# 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コンフィグレーションを作成する

rootユーザーにてGUI環境にログインする

# cd /opt/app/oracle/product/10.1.0/crs/bin
# ./vipca
  • クラスタ・ノードの仮想IP IP別名に orac1v.com と入力すると以下の通り自動で他の設定値が反映させる
    ノード名IP別名IPアドレスサブネット
    orac1orac1v.com192.168.11.31255.255.255.0
    orac2orac1v.com192.168.11.32255.255.255.0

サービス制御コマンド

起動できないので、以下の箇所をコメントアウトする

# 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のインストール

10201_database_linux32.zip を任意のディレクトリに解凍する

ASMのインストール

以降、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

orac2のASMマウントできないのエラーが発生するが無視して進める

サービス起動の確認(全てONLINEになっていること)

$ /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マウントできない事象の対応

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のインストール

データウェアのインストール

以降、oracleユーザーのGUI環境(1号機)にて実施すること。

$ cd database
$ ./runInstaller
  • インストール・タイプの選択
    Enterprise Edition

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

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

ASMディスク追加

$ cd /opt/app/oracle/product/10.1.0/db/bin
$ ./dbca


  • 初期画面 Oracle Real Application Clusterデータベースを選択する

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

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

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

データベース作成

  • 実行する操作
    データベースの作成

  • データベースの記憶域のディスク選択
    DATAにチェック

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

  • グローバルSID
    orcl

状態確認

$ 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


再起動後のサービス復帰

# crsctl start crs
# emctl start dbconsole


# vi /etc/oratab で自動起動の設定があるっぽいが試してない


クライアント側でのtnsnames.ora

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号機へのリスナー経由ログインができない

crs_stat -t でlsnrがONLINEになっているにも関わらず、接続できない
原因不明ですが、以下の流れを行うと接続可能になる

./srvctl stop lsnr -n orac2
lsnrctl start
./srvctl start lsnr -n orac2


トラブルシューティング

文字化けする

NLS_LANG環境変数を設定する。文字コードがUTF8の場合は以下の通り

export NLS_LANG=JAPANESE_JAPAN.AL32UTF8

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-03-22 (土) 21:02:35 (3682d)