ここでは、v$instance ビューを使用した Oracle の死活監視についてサンプルを掲載しています。
スポンサーリンク
Oracle の死活監視方法には様々な手法が考えられると思いますが、ここでは、sys.v$instance ビューの status フィールドが ‘OPEN’ か否かで判断することにします。
v$instance ビューへの select で ORA-ERROR
SQL> SELECT status FROM v$instance; ORA-00942: 表またはビューが存在しません。
まずは、v$instance ビューへの接続を確認します。「ORA-00942: 表またはビューが存在しません」が発生する場合には、 v$instance ビューの参照 ( SELECT ) 権限がないことが考えられます。Oracle サーバに sys ユーザで ローカル接続し、リモートから接続するユーザ(本サンプルでは、tiger)に対して権限を付与させます。
$ # SELECT 権限を付与する(ユーザー:tiger) $ sqlplus / as sysdba SQL> GRANT SELECT ON SYS.V_$INSTANCE TO tiger; Grant succeeded.
参照権限を与えることができたら、再度接続の確認を行います。 select 文を発行すると、以下のようにリモートからでも status が取得できるようになります。
SQL> SELECT status FROM v$instance; STATUS ------------ OPEN
Oracle 死活監視シェルスクリプトサンプル
v$instance ビューを利用した Oracle の死活監視のサンプルのシェルスクリプトです。あくまで参考なのでこのまま使用しないほうがいいかと思いますが、十分な検証をしたうえで自己責任でお使いください。
# 環境変数 ORACLE_HOME が設定されていない場合
ORACLE_HOME=/path/to/orahome
export ORACLE_HOME
# v$instance ビューの status を取得する
# '$' の前に '\\'(2つ)を付けてエスケープさせないと、シェル変数として扱われてしまう
STATUS=`$ORACLE_HOME/bin/sqlplus -S user/pass@dbserver/datasource << EOF
set feedback off;
set echo off;
set flush off;
set head off;
SELECT status FROM v\\$instance;
EOF`
echo $STATUS # なんとなく出力(デバッグ用)
# OPEN 以外は oracle がダウンしているとみなす
if [ $STATUS -ne 'OPEN' ]; then
exit -1;
fi
exit 0;