Oracle新人のRACインストール その21
<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にサーバ障害があったことなんて全然気づいてないな。
ただ、インスタンスダウンがあったとしか認識してないということかな。