Oracle新人のRACインストール その21

投稿日: 2006年10月04日

<Oracle新人のRACインストール その21>
ペンネーム: world famous beagle

先週で終了のはずでした、印旛くんのRACインストールでしたが、もう1週書か
せていただくこととなりました。
先週、先々週とバックアップ、リカバリの方法について取り組んだ印旛くんで
すが、もう1パターンの障害対策について、手順を確立しなければならないよ
うです。

それでは、今週も宜しく御願いします。
———————————————————————-
「印旛くん、ちょっと」
「はい」
「君が先週やってくれた、バックアップ、リカバリなんだけどさ・・・。
もう1パターンやって欲しいんだよね」
「と、いいますと?」
「サーバ障害があった時を想定してやって」
「あ、なるほど」
「どういうことかわかってる?」
「いえ、いまいち」
「君、いま’なるほど’って言ったよね」
「はい。そういう障害もあるんだな、と思って・・・」
「あ、そう。片側のサーバのディスク障害があって
Oracleが上がらなくなった時を、想定して」
「あ、なるほど。それだとRMANも使えませんね」
「そういうこと」
「わかりました!考えます」

と、言ったもののOracleが起動できないのに
リカバリなんてできないんじゃないだろうか・・・。
うーーん。難しい・・・。

うーーーん。
サーバ障害ということは、OSが起動できないっていうこともあるのか。

ということは、OSからインストールしなおすことも考えられるな。
うーーーん。
そういえば、Oracleのインストールに途中で失敗して、やり直した時は、
ORACLE_BASEを、削除して、あとはいくつか他のファイルを削除するだけ
だったような・・・。

なんとなくできそうな、できなさそうな。

少し頭を整理しよう。
■RACなんだから、片ノードが障害で動かなくてもとりあえず
サービスが停止することはない。
■データファイルや制御ファイルのような更新や削除されるファイルは、
全て共有ディスクにある。

ということは、やっぱりもう一度Oracleをインストールすればいいのかな
それだと、RACにはならないよね。
サーバ障害といっても多分、状況的には、片ノードのOracleをshutdownした時と、
変わらないはずだよね。

障害を自分で起こすとすれば・・・
1.正常に稼動しているRACの片ノードのOracleをshutdown
2.ASM、CRSサービスも全てshutdown
→この時点でも、もう片ノードが稼動していればサービスは問題なし
3.shutdownしたノードのORACLE_BASE配下のファイルを削除
→ディスク障害でファイルが破損したことを想定
4.Oracleが起動できなくなる

さて、ここからリカバリするには、削除したファイルのバックアップがあれば
いいんだよな。
あらかじめインストールした直後にバックアップを取っておけばいいのか!
サーバにインストールしたOracleのモジュールは基本的には変更されない
はずだよね。

ということは、Oracleをインストールしたときに追加されたファイルを、
見つければいいのか。
よーーーし!

———————————————————————-
想定している障害:
サーバ側のハードウェア障害などによって、
片ノードでOS及び、Oracleが起動できなくなっている。

→このような障害に備えるために、あらかじめサーバ側のローカルにある
ファイルシステムのバックアップを取得しておく必要があります。

バックアップを取得するファイル:
以下のファイルをtarで固めてバックアップを取得して置く必要があります。

$ tar cvf {file name}.tar {file name}

ORACLE_BASE配下全て
/etc/init.d/init.cssd
/etc/init.d/init.crs
/etc/init.d/init.crsd
/etc/init.d/init.evmd
/etc/rc2.d/K96init.crs
/etc/rc2.d/S96init.crs
/etc/rc3.d/K96init.crs
/etc/rc3.d/S96init.crs
/etc/rc5.d/K96init.crs
/etc/rc5.d/S96init.crs
/etc/oracle/scls_scr
/etc/oracle
/etc/oratab
/etc/oraInst.loc
/etc/ORCLcluster
/u01/app/oracle/oraInventory
/u01/app/oracle/product
/u01/app/oracle/admin
/usr/local/bin/coraenv
/usr/local/bin/dbhome
/usr/local/bin/oraenv

/etc/inittab内の以下の行
h1:35:respawn:/etc/init.d/init.evmd run >/dev/null 2>&1 /dev/null 2>&1 /dev/null 2>&1     nodename1
    nodename2
    nodename1-priv
    nodename2-priv
    nodename1-vip
    nodename2-vip

■グループとユーザーの設定(user: root)
存在確認
$ grep 600 /etc/group
$ grep 601 /etc/group

$ groupadd -g 600 oinstall
$ groupadd -g 601 dba
$ useradd -g oinstall -G dba -u 600 -d /home/oracle oracle
passwd oracle

$su - oracle

■環境変数の設定
$vi oracle_env
# Oracle10gR2
export ORACLE_SID=******
export ORACLE_BASE=/opt/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db
export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs
export PATH=${PATH}:${ORACLE_HOME}/bin:${ORA_CRS_HOME}/bin
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export NLS_LANG=japanese_japan.JA16SIJS

$ vi .bash_profile
# Oracle10gR2
. oracle_env

ulimit -u 16384
ulimit -n 65536


■インストール環境の設定(user: root)
$ mkdir -p /opt/app/oracle
$ chown -R oracle:dba /opt/app/oracle


■鍵の作成(user: oracle)
$ su - oracle
node2
$ scp id_rsa.pub :/home/oracle/.ssh/_id_rsa.pub
$ scp id_dsa.pub :/home/oracle/.ssh/_id_dsa.pub

node1
$ cat id_rsa.pub >> authorized_keys
$ cat id_dsa.pub >> authorized_keys
$ cat _id_rsa.pub >> authorized_keys
$ cat _id_dsa.pub >> authorized_keys
$ chmod 644 authorized_keys
$ scp authorized_keys :/home/oracle/.ssh/.

・ssh通信の確認 →パスワードを求められなければOK
$ ssh  date

node2
$ ls -l .ssh/authorized_keys
$ ssh  date

■rawデバイスの設定
$ vi /etc/sysconfig/rawdevices	   以下のように作成する
両ノードで実施
# raw device bindings
# format:    
#           
# example: /dev/raw/raw1 /dev/sdb1
#          /dev/raw/raw2 8 5
/dev/raw/raw1   /dev/sdb1
/dev/raw/raw2   /dev/sdb2
/dev/raw/raw3   /dev/sdb3
/dev/raw/raw4   /dev/sdb4
/dev/raw/raw5   /dev/sdb5

$ /etc/init.d/rawdevices start
$ raw -qa
$ chown oracle:dba /dev/raw/raw[1-4]
$ chmod 660 /dev/raw/raw*
$ /etc/init.d/rawdevices restart	

■バックアップのtarballをnode2より転送し、展開する
        →これで、CRSやOracleがインストールされていた時の状態に戻る

■CRSのサービスを開始(user: root)
# cd /opt/app/oracle/product/10.2.0/crs/bin
# ./crsctl start crs

■ASMインスタンスの起動(user:oracle)
$ srvctl start asm -n 

■リスナーの起動(user: oracle)
$ lsnrctl start

■DBの起動
$ sqlplus / as sysdba
SQL> startup
----------------------------------------------------------------------

やった。エラーが出ずに起動したぞ!!
node2のOracleは、
node1にサーバ障害があったことなんて全然気づいてないな。
ただ、インスタンスダウンがあったとしか認識してないということかな。