很多人都有這樣的了解檢測Oracle的可用性所需要的命令比簡單的ping或者ps ef | grep 等Oracle的命令要多得多有觀點認為它需要一個使用SQL*Net 來驗證監聽器已經開啟並運行的測試訪問Oracle——這是用戶經常用到的訪問通過實際地登錄到實際環境中你可以確認這個實例環境可以接受登錄的如果你只是做了以上的檢測的話你如何才能知道是否登錄沒有被接受只是因為需要等待文檔日志?
除了Oracle的激活和可用性之外我們還需要進行檢測以確保它可以用這樣我們還可以檢測表空間的容量
檢測的腳本:
假設所有的Oracle環境都已經搭建起來了
假設所有的擴展都已經達到了最大的限度
假設左右的表空間都缺乏運行的空閒空間
下面的腳本可以在你想要的任何時候通過crontab 來中斷另外如果上面的例外情況出現了的話您還可以就這個腳本寫信或者電子郵件給支持人員獲得幫助
如果您有什麼其他的測試這個腳本可以讓您輕松地進行修改以加以利用我使用這個Monitororcl 腳本作為模板並且在末尾添加了功能
按crontab來調用query_oracle_instancessh 腳本:
#!/bin/ksh
/u/home/oracle/profile
/u/app/oracle/admin/monitororcl
cat /u/app/oracle/admin/Get_Oracle_Instance_List
exit
Get_Oracle_Instance_List 腳本如下:
instance_name tnsname sys_password_for_this_instance
instance_name tnsname sys_password_for_this_instance
instance_name tnsname sys_password_for_this_instance
下面是MONITORORCL腳本:
#!/bin/ksh
#script : Rick Stehno
# script will monitor to see if Oracle is up
while [ $ != ]
do
ORACLE_INSTANCE=$
ORACLE_TNS=$
USR_ID=sys
USR_PASS=$
# echo Instance: [$ORACLE_INSTANCE]
# echo TNS [$ORACLE_TNS]
# echo PASS: [$USR_PASS]
LOGFIL=/u/app/oracle/admin/monitordevout
NOTIFY_LIST=useuseriduser
#
# 檢測關鍵的段沒有達到最大限度
sqlplus s <$LOGFIL >/dev/null
$USR_ID/$USR_PASS@$ORACLE_TNS
set pages
select distinct YES from dba_segments
where extents >= (max_extents) and segment_name not like %;
EOF
grep i ^ORA $LOGFIL >/dev/null
if [ $? eq ]
then
echo $ failed: check $ORACLE_INSTANCE for problems | /bin/mailx
s ${ORACLE_INSTANCE} : Script failed $NOTIFY_LIST
exit
fi
MAXEXTENTS_REACHED=`awk { print $ } $LOGFIL`
if [ $MAXEXTENTS_REACHED = YES ]
then
echo $ failed: $ORACLE_INSTANCE max extents reached | /bin/mailx
s ${ORACLE_INSTANCE} : max extents reached $NOTIFY_LIST
exit
fi
#
# 檢測是否能分配下一個段
sqlplus s <$LOGFIL >/dev/null
$USR_ID/$USR_PASS@$ORACLE_TNS
set pages
select distinct YES from dba_segments ds
where next_extent >
(select max(bytes) from dba_free_space
where tablespace_name = dstablespace_name);
EOF
grep i ^ORA $LOGFIL >/dev/null
if [ $? eq ]
then
echo $ failed: check $ORACLE_INSTANCE for problems | /bin/mailx
s ${ORACLE_INSTANCE} : Script failed $NOTIFY_LIST
exit
fi
POSSIBLE_NEXTEXT_FAIL=`awk {print $ } $LOGFIL`
if [ $POSSIBLE_NEXTEXT_FAIL = YES ]
then
echo $ failed: $ORACLE_INSTANCE cannot extend segment | /bin/mailx
s ${ORACLE_INSTANCE} : max extents reached $NOTIFY_LIST
exit
fi
shift
# echo shift done
done
echo Successful completion of $ `date`
exit
From:http://tw.wingwit.com/Article/program/Oracle/201311/17406.html