C003 數據庫巡檢腳本

腳本文件放在D:\Check_oracle目錄下,截圖如下:

CRT是SecureCRT軟件,LOGS存放生成的日誌文件,ServerList是服務器列表

 

DAILYCheck.bat文件內容:

REM DAILYCheck.bat
@echo off
Setlocal ENABLEDELAYEDEXPANSION
Set strDate=%date:~0,4%%date:~5,2%%date:~8,2%
REM=================================================================================
cls
color 0a
title  巡檢工具
:begin
cls
echo.
%~d0
cd %~dp0
set TempDir=d:\Check_oracle\temp
if not exist  %TempDir% mkdir %TempDir%
echo.
echo             ﹎.巡檢工具——數據庫巡檢.﹎    
echo.
echo            ╔═════════════╗
echo            ║  1、數據庫巡檢(Linux)  ║
echo            ║  2、數據庫巡檢(Unix)   ║
echo            ╚═════════════╝
echo                0、退出程序!
echo.
set num=99
set /p num=" 請輸入選擇數字,然後按回車:"
if %num%==1 goto bat1
if %num%==2 goto bat2
if %num%==0 exit
echo.
goto begin

:bat1
set SvrList=d:\Check_oracle\ServerList\svrLinux.list
set Checklog=%TempDir%\oracle_dailycheck_%strDate%_Linux.log
set CheckDir=d:\Check_oracle\Log_%strDate%\Linux
echo.
echo  :::Start Oracle Daily checking on %date%
echo  :::Start Oracle Daily checking on %date% > %checklog%
echo.
echo  ===================================================================
echo.
For /F "tokens=1,2,3,4,5 delims=," %%i in (%SvrList%) do (
echo %date%:: %%k :: %%i :: %%j >> %checklog%
echo  ==================主機: %%k ,開始檢測,請稍等==================
"D:\Check_oracle\CRT\SecureCRT.exe" /TITLEBAR "OSCheck:%%k:%%i:%%j"/NOMENU /NOTOOLBAR /SCRIPT D:\Check_oracle\Dailycheck.vbs /ARG %%l /ARG %%m /ARG %%i /ARG %%j >> %checklog%
echo  ==================主機: %%k ,完成檢測,請覈查==================
echo.
)
goto end

:bat2
set SvrList=d:\Check_oracle\ServerList\svrUnix.list
set Checklog=%TempDir%\oracle_dailycheck_%strDate%_Unix.log
set CheckDir=d:\Check_oracle\Log_%strDate%\Unix
echo.
echo  :::Start Oracle Daily checking on %date%
echo  :::Start Oracle Daily checking on %date% >> %checklog%
echo.
echo  ===================================================================
echo.
For /F "tokens=1,2,3,4,5 delims=," %%i in (%SvrList%) do (
echo %date%:: %%k :: %%i :: %%j >> %checklog%
echo  ==================主機: %%k ,開始檢測,請稍等==================
"D:\Check_oracle\CRT\SecureCRT.exe" /TITLEBAR "OSCheck:%%k:%%i:%%j"/NOMENU /NOTOOLBAR /SCRIPT D:\Check_oracle\Dailycheck_UNIX.vbs /ARG %%l /ARG %%m /ARG %%i /ARG %%j >> %checklog%
echo  ==================主機: %%k ,完成檢測,請覈查==================
echo.
)
goto end
:end
REM - 檢查完畢後將下載到本地的檢查日誌移到一個目錄中。
if not exist  %CheckDir% mkdir %CheckDir%
Move /Y %TempDir%\*.log %checkDir%
goto begin

Dailycheck.vbs文件內容:

# $language = "VBScript"
# $interface = "1.0"

Sub Main
   dim objTab, objSFTPTab
   dim strHost, strUserid, strUserPwd, strRootPwd, strPort
   dim strConnect
   IF crt.arguments.count <> 4 then
       crt.Daiglog.MessageBox("No Enough Paratmeters!")
       crt.quit
       exit sub
   ELSE
   strUserid = crt.arguments(0)
   strUserPwd = crt.arguments(1)
        strHost = crt.arguments(2)
        strPort = crt.arguments(3)
   END IF
  
'======================================================================================================
   'Connect to a host and start OS check daily 
   strConnect="/SSH2 /P " & strPort & " /L " & strUserId & " /PASSWORD " & strUserPwd & " " & strHost 
  set objTab=crt.session.connectInTab(strConnect)
  objTab.screen.synchronous = True

  'Create an SFTP tab associated with the existing tab
   set objSFTPTab=objTab.connectSFTP
  'Wait for the SFTP tab to be ready for input
  objSFTPTab.screen.synchronous = True
  crt.Sleep 300
  objSFTPTab.screen.Send vbcr
  objSFTPTab.Screen.WaitForString "sftp>"
  objSFTPTab.Screen.Send "lcd D:\Check_oracle\"  & vbcr
  objSFTPTab.Screen.WaitForString "sftp>"
  objSFTPTab.Screen.Send "cd /home/oracle/gyl/Check_oracle/"  & vbcr
  objSFTPTab.Screen.WaitForString "sftp>"
  objSFTPTab.Screen.Send "put -a Check_oracle.sh"  & vbcr
  objSFTPTab.screen.WaitForString "Uploading"
  objSFTPTab.Screen.Send "put -a Check_oracle.sql"  & vbcr
  objSFTPTab.screen.WaitForString "Uploading"
  objSFTPTab.screen.WaitForString "sftp>"

  objTab.activate()
   crt.sleep 10
   objTab.screen.waitforstring("#")
   objTab.screen.send("cd /home/oracle/gyl/Check_oracle/") & chr(13)
   objTab.screen.waitforstring("Check_oracle") 
   objTab.Screen.send("rm -f /home/oracle/gyl/Check_oracle/*.log ; echo r000") & chr(13)
   objTab.Screen.waitForString("r000")
   objTab.screen.send("chmod +x /home/oracle/gyl/Check_oracle/Check_oracle.sh") & chr(13)
   objTab.screen.waitforstring("Check_oracle") 
   objTab.screen.send("sh /home/oracle/gyl/Check_oracle/Check_oracle.sh") & chr(13)
   objTab.screen.waitforstring("successfully")

   objSFTPTab.activate()
   ' download the check log to d:\Check_oracle\temp from remote working Directory /home/oracle/gyl/Check_oracle/
  objSFTPTab.Screen.Send "lcd D:\Check_oracle\temp\"  & vbcr
  objSFTPTab.Screen.WaitForString "sftp>"
   objSFTPTab.Screen.Send ("get -a /home/oracle/gyl/Check_oracle/*.log" ) & vbcr
   objSFTPTab.screen.WaitForString "Downloading"
    objSFTPTab.screen.WaitForString "sftp>"
   'Close the SFTPTab
   objSFTPTab.Screen.Send "pwd"  & vbcr
   objSFTPTab.screen.send ("exit") & vbcr
   
   objTab.activate()
   objTab.Screen.send("echo r002") & chr(13)
   objTab.Screen.WaitForString("r002") 
   objTab.Session.Disconnect
   'objTab.close
 
   'Done, quit SecureCRT
    crt.quit
End Sub

Dailycheck_UNIX.vbs文件內容:

# $language = "VBScript"
# $interface = "1.0"

Sub Main
   dim objTab, objSFTPTab
   dim strHost, strUserid, strUserPwd, strRootPwd, strPort
   dim strConnect
   IF crt.arguments.count <> 4 then
       crt.Daiglog.MessageBox("No Enough Paratmeters!")
       crt.quit
       exit sub
   ELSE
   strUserid = crt.arguments(0)
   strUserPwd = crt.arguments(1)
        strHost = crt.arguments(2)
        strPort = crt.arguments(3)
   END IF
  
'======================================================================================================
   'Connect to a host and start OS check daily 
   strConnect="/SSH2 /P " & strPort & " /L " & strUserId & " /PASSWORD " & strUserPwd & " " & strHost 
  set objTab=crt.session.connectInTab(strConnect)
  objTab.screen.synchronous = True

  'Create an SFTP tab associated with the existing tab
   set objSFTPTab=objTab.connectSFTP
  'Wait for the SFTP tab to be ready for input
  objSFTPTab.screen.synchronous = True
  crt.Sleep 300
  objSFTPTab.screen.Send vbcr
  objSFTPTab.Screen.WaitForString "sftp>"
  objSFTPTab.Screen.Send "lcd D:\Check_oracle\"  & vbcr
  objSFTPTab.Screen.WaitForString "sftp>"
  objSFTPTab.Screen.Send "cd /home/oracle/gyl/Check_oracle/"  & vbcr
  objSFTPTab.Screen.WaitForString "sftp>"
  objSFTPTab.Screen.Send "put -a Check_oracle_UNIX.sh"  & vbcr
  objSFTPTab.screen.WaitForString "Uploading"
  objSFTPTab.Screen.Send "put -a Check_oracle.sql"  & vbcr
  objSFTPTab.screen.WaitForString "Uploading"
  objSFTPTab.screen.WaitForString "sftp>"

  objTab.activate()
   crt.sleep 10
   objTab.screen.waitforstring("#")
   objTab.screen.send("cd /home/oracle/gyl/Check_oracle/") & chr(13)
   objTab.screen.waitforstring("Check_oracle") 
   objTab.Screen.send("rm -f /home/oracle/gyl/Check_oracle/*.log ; echo r000") & chr(13)
   objTab.Screen.waitForString("r000")
   objTab.screen.send("chmod +x /home/oracle/gyl/Check_oracle/Check_oracle_UNIX.sh") & chr(13)
   objTab.screen.waitforstring("Check_oracle") 
   objTab.screen.send("sh /home/oracle/gyl/Check_oracle/Check_oracle_UNIX.sh") & chr(13)
   objTab.screen.waitforstring("successfully")

   objSFTPTab.activate()
   ' download the check log to d:\Check_oracle\temp from remote working Directory /home/oracle/gyl/Check_oracle/
  objSFTPTab.Screen.Send "lcd D:\Check_oracle\temp\"  & vbcr
  objSFTPTab.Screen.WaitForString "sftp>"
   objSFTPTab.Screen.Send ("get -a /home/oracle/gyl/Check_oracle/*.log" ) & vbcr
   objSFTPTab.screen.WaitForString "Downloading"
    objSFTPTab.screen.WaitForString "sftp>"
   'Close the SFTPTab
   objSFTPTab.screen.send ("exit") & vbcr
   
   objTab.activate()
   objTab.Screen.send("echo r002") & chr(13)
   objTab.Screen.WaitForString("r002") 
   objTab.Session.Disconnect
   'objTab.close
 
   'Done, quit SecureCRT
    crt.quit
End Sub

Check_oracle.sh文件內容:

#!/bin/sh
#FileName: Check_oracle.sh
#make by GuoYanLiang
IPAddress=`ifconfig|grep 'inet addr:'|head -1|awk '{print $2}'|sed 's/addr://g'`;
CheckLog=check.$IPAddress.`hostname`.`date +"%y%m%d"`.log
CheckDir="/home/oracle/gyl/Check_oracle/"
[ ! -d "$CheckDir" ] && mkdir -p $CheckDir
cd $CheckDir
#==========================================================  1: Check oracle process  ==========================================================
Check_process()
{
ORA_Process=(ora_dbw0_orcl ora_lgwr_orcl ora_smon_orcl ora_pmon_orcl ora_arc0_orcl ora_ckpt_orcl ora_reco_orcl)
ORA_Process_Num=${#ORA_Process[@]}
for (( i=0; i<$ORA_Process_Num; i++ ))
do 
echo ${ORA_Process[i]} : >> $CheckLog
ps -ef | grep ${ORA_Process[i]} | grep -v grep >> $CheckLog
if [ $? != 0 ] ; then
echo ${ORA_Process[i]} is NO >> $CheckLog
echo "" >> $CheckLog
else
echo ${ORA_Process[i]} is OK >> $CheckLog
echo "" >> $CheckLog
fi
done
}
#==========================================================  2: Check oracle tnslsnr  ==========================================================
Check_tnslsnr()
{
su - oracle -c "lsnrctl status" >/dev/null 
if [ $? = 0 ] ; then 
ps -ef | grep tnslsnr | grep -v grep >> $CheckLog
if [ $? != 0 ] ; then
echo oracle_tnslsnr is NO >> $CheckLog
echo "" >> $CheckLog
else
echo oracle_tnslsnr is OK >> $CheckLog
echo "" >> $CheckLog
fi
netstat -lntp | grep 1521 >> $CheckLog
if [ $? != 0 ] ; then
echo oracle_Port_1521 is NO >> $CheckLog
echo "" >> $CheckLog
else
echo oracle_Port_1521 is OK >> $CheckLog
echo "" >> $CheckLog
fi
else
echo oracle_lsnrctl status is NO >> $CheckLog
echo "" >> $CheckLog
fi
}
#==========================================================  3: Check oracle SQL  ==========================================================
Check_SQL()
{
su - oracle -c "sqlplus -s system/oracle"<<EOF
spool /home/oracle/gyl/Check_oracle/Check_oracle.txt;
@/home/oracle/gyl/Check_oracle/Check_oracle.sql;
spool off;
exit;
EOF
cat /home/oracle/gyl/Check_oracle/Check_oracle.txt >> $CheckLog
}
#===================================================================================================================================================
echo ==========================================================  1: Check oracle process  ========================================================== > $CheckLog
echo "" >> $CheckLog
Check_process;
echo "" >> $CheckLog
echo ==========================================================  2: Check oracle tnslsnr  ========================================================== >> $CheckLog
echo "" >> $CheckLog
Check_tnslsnr;
echo "" >> $CheckLog
echo ==========================================================  3: Check oracle SQL  ========================================================== >> $CheckLog
Check_SQL;
echo "" >> $CheckLog
echo "Checking finished successfully!"

Check_oracle_UNIX.sh文件內容:

#!/bin/sh
#FileName: Check_oracle_UNIX.sh
#make by GuoYanLiang
IPAddress=`ifconfig lan900 | grep 'inet' | awk '{print $2}'`;
CheckLog=check.$IPAddress.`hostname`.`date +"%y%m%d"`.log
CheckDir="/home/oracle/gyl/Check_oracle/"
[ ! -d "$CheckDir" ] && mkdir -p $CheckDir
cd $CheckDir
#==========================================================  1: Check oracle process  ==========================================================
Check_process()
{
set -A ORA_Process ora_dbw0_orcl ora_lgwr_orcl ora_smon_orcl ora_pmon_orcl ora_arc0_orcl ora_ckpt_orcl ora_reco_orcl
for loop in ${ORA_Process[*]}
do 
echo $loop : >> $CheckLog
ps -ef | grep $loop | grep -v grep >> $CheckLog
if [ $? != 0 ] ; then
echo $loop is NO >> $CheckLog
echo "" >> $CheckLog
else
echo $loop is OK >> $CheckLog
echo "" >> $CheckLog
fi
done
}
#==========================================================  2: Check oracle tnslsnr  ==========================================================
Check_tnslsnr()
{
su - oracle -c "lsnrctl status" >/dev/null 
if [ $? = 0 ] ; then 
ps -ef | grep tnslsnr | grep -v grep >> $CheckLog
if [ $? != 0 ] ; then
echo oracle_tnslsnr is NO >> $CheckLog
echo "" >> $CheckLog
else
echo oracle_tnslsnr is OK >> $CheckLog
echo "" >> $CheckLog
fi
netstat -na | grep LIST | grep 1521 >> $CheckLog
if [ $? != 0 ] ; then
echo oracle_Port_1521 is NO >> $CheckLog
echo "" >> $CheckLog
else
echo oracle_Port_1521 is OK >> $CheckLog
echo "" >> $CheckLog
fi
else
echo oracle_lsnrctl status is NO >> $CheckLog
echo "" >> $CheckLog
fi
}
#==========================================================  3: Check oracle SQL  ==========================================================
Check_SQL()
{
su - oracle -c "sqlplus -s system/oracle"<<EOF
spool /home/oracle/gyl/Check_oracle/Check_oracle.txt;
@/home/oracle/gyl/Check_oracle/Check_oracle.sql;
spool off;
exit;
EOF
cat /home/oracle/gyl/Check_oracle/Check_oracle.txt >> $CheckLog
}
#===================================================================================================================================================
echo ==========================================================  1: Check oracle process  ========================================================== > $CheckLog
echo "" >> $CheckLog
Check_process;
echo "" >> $CheckLog
echo ==========================================================  2: Check oracle tnslsnr  ========================================================== >> $CheckLog
echo "" >> $CheckLog
Check_tnslsnr;
echo "" >> $CheckLog
echo ==========================================================  3: Check oracle SQL  ========================================================== >> $CheckLog
Check_SQL;
echo "" >> $CheckLog
echo "Checking finished successfully!"

Check_oracle.sql文件內容:

set pagesize 2000;
set linesize 200;
select banner from sys.v_$version;
select dbf.tablespace_name,  
dbf.totalspace "Total(M)",   
dfs.freespace "Free(M)",    
round((dfs.freespace / dbf.totalspace) * 100,2) "Free100%",  
dbf.autoextensible YES
from (select t.tablespace_name, 
t.autoextensible, 
sum(t.bytes) / 1024 / 1024 totalspace,  
sum(t.blocks) totalblocks  
from dba_data_files t  
group by t.tablespace_name, t.autoextensible ) dbf,  
(select tt.tablespace_name,  
sum(tt.bytes) / 1024 / 1024 freespace,  
sum(tt.blocks) freeblocks  
from dba_free_space tt  
group by tt.tablespace_name) dfs  
where trim(dbf.tablespace_name) = trim(dfs.tablespace_name);
select inst_id , instance_number inst_no , instance_name inst_name , parallel , status  , database_status db_status , active_state state , host_name host FROM gv$instance ORDER BY inst_id;
select name,log_mode,open_mode from v$database;
select tablespace_name,status from dba_tablespaces;
select segment_name,status from dba_rollback_segs;
select resource_name,max_utilization,initial_allocation, limit_value from v$resource_limit;
select count(*) from v$session;
select count(*) from v$session where STATUS='INACTIVE';
col name for a80;
select status,name from v$controlfile;
col MEMBER for a80;
select group#,status,type,member from v$logfile;
select name,status from v$datafile;
col FILE_NAME for a80;
select file_name,bytes/1024/1024 "size",AUTOEXTENSIBLE,status from dba_data_files order by file_name;
col object_name for a80;
select owner, object_name, object_type FROM dba_objects WHERE status= 'INVALID';

D:\Check_oracle\ServerList目錄下是服務器列表,可分爲Linux和Unix

 

服務器列表文件格式(ip,端口,主機名,用戶名,密碼)如下:

 

雙擊執行DAILYCheck.bat文件,界面如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章