Oracle/ORACLE 10g RAC環境構築 †VMwarePlayer で CentOS 5.6 + Oracle 10g での RAC環境構築になります。
パブリックは実際にOracleに接続する際に使用。プライベートはRAC間での通信のみに使用。 CnetOSのHW構成 †
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"
デバイス初期化 †# 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
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
サービス制御コマンド †起動できないので、以下の箇所をコメントアウトする # 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
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 stop crs # crsctl start crs Databaseのインストール †データウェアのインストール †以降、oracleユーザーのGUI環境(1号機)にて実施すること。 $ cd database $ ./runInstaller
ASMディスク追加 †$ cd /opt/app/oracle/product/10.1.0/db/bin $ ./dbca
データベース作成 †
状態確認 †$ 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 |