アイビスヘッダー

IBS

2011年2月17日木曜日

Oracle 10g フラッシュリカバリエリアの監視

フラッシュリカバリエリアが一杯になって、サービスが停止になる状態を引き起こした事はありませんか?

弊社は、お客様からアウトソーシングされている、Oracle 10g で引き起こしてしまい、大変迷惑をおかけしたことがあります。

この様な事態を二度と引き起こさないようにするために、空き容量を監視し、空き容量が少なくなった場合にはメール送信できないか調査してみました。

調査してみると、Oracleにもその機能をもっているが、利用するためには、EnterpriseEditionにして、さらに Database Diagnostics Pack を購入する必要がありそうでした。
※実際に購入したことはありません。

Flash Recovery Area を監視するだけのために、この提案は気が引けます。


結局自分で作ることにしたところ、簡単に出来ましたので紹介します。
シェルとswatchを利用しているので、Linux限定になります。

Oracleにアクセスして、容量をログに出力するシェルを作成しました。
#!/bin/bash
export LOGFILE=/var/log/ibs/oracle_flash_area_check.log

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=${ORACLE_BASE}/product/10.2.0/db_1
export ORA_CRS_HOME=/u01/app/oracrs/crs102
export ORACLE_SID=orcl
export PATH=${ORACLE_HOME}/bin:${ORA_CRS_HOME}/bin:${PATH}
export NLS_LANG=Japanese_Japan.AL32UTF8
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}

# しきい値は50GBにしているので変更する場合は下記SQLの
# SIGN(USE-50)を変更する。

sqlplus -s system/パスワード@orcl << EOF > /dev/null
set pagesize 1000
set linesize 150
set feedback off
set heading off
spool ${LOGFILE} append
select dt||' サーバ名(${ORACLE_SID}) PATH:'||name||
' space_used:'||space_used||' space_limit:'||space_limit||' use:'||USE||'% result:'||
DECODE(SIGN(USE-50), 1, 'SPACE_NG', 0, 'SPACE_OK', -1, 'SPACE_OK')
from (
select name,
to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') as dt
,trunc(space_used/space_limit * 100) as USE
,trunc(space_limit/1024/1024/1024)||'GB' as space_limit
,trunc(space_used/1024/1024/1024)||'GB' as space_used
from v\$recovery_file_dest);
spool off
exit
EOF

ログディレクトリを作成します。
[root@oracle ~]# mkdir /var/log/ibs

ログディレクトリには下記が出力されます。
2011/02/16 15:10:01 サーバ名(orcl) PATH:+DG1 space_used:0GB space_limit:97GB use:0% result:SPACE_OK
もししきい値を超えると、「SPACE_OK」が「SPACE_NG」になりますので、「SPACE_NG」を swatch で設定します。

swatch設定
watchfor /SPACE_NG/
mail addresses=送信先メールアドレス,subject=oracle_flash_area_check_ng\(サーバ名\) Warning

以上で完成です。
もし警告が発生したら、計画停止で容量を増加させます。

0 件のコメント:

コメントを投稿