弊社は、お客様からアウトソーシングされている、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 |
swatch設定
watchfor /SPACE_NG/ mail addresses=送信先メールアドレス,subject=oracle_flash_area_check_ng\(サーバ名\) Warning |
以上で完成です。
もし警告が発生したら、計画停止で容量を増加させます。
0 件のコメント:
コメントを投稿