| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- #!/bin/sh
- . ./helper_functions.sh
- get_USR_ID()
- {
- USER_ID_CMD=`type whoami >/dev/null 2>/dev/null && echo "Found" || echo "NotFound"`
- if [ "$USER_ID_CMD" = "Found" ] ; then
- USR_ID=`whoami`
- else
- if [ "$OS_NAME" = "SunOS" ] ; then
- if [ -x /usr/ucb/whoami ] ; then
- USR_ID=`/usr/ucb/whoami`
- fi
- else
- USR_ID=$LOGNAME
- fi
- fi
- }
- log_write()
- {
- $ECHO $1 >>$logfile
- }
- check_space() {
- CT_NOSPACE=0
- echo "checking disk space" >checkspace.txt
- if [ ! -s checkspace.txt ]; then
- CT_NOSPACE=1
- echo "DB: CT-02019: ERROR: No disk space available on ${CT_TMP} folder"
- if [ -f checkspace.txt ]; then
- rm -f checkspace.txt
- fi
- else
- rm -f checkspace.txt
- fi
- }
- ask_yn()
- {
- answ=""
- while [ "$answ" = "" ]
- do
- $ECHO "$question (y/n)? : "; read answ
- done
- if [ "$answ" = "y" -o "$answ" = "Y" ]; then
- yn="y";
- else
- if [ "$answ" = "n" -o "$answ" = "N" ]; then
- yn="n";
- else
- ask_yn;
- fi
- fi
- }
- check_sqlplus()
- {
- if [ -f $V_ORACLE_HOME/bin/sqlplus -a -x $V_ORACLE_HOME/bin/sqlplus ];then
- # sqlplus_vers=`echo exit | $V_ORACLE_HOME/bin/sqlplus /nolog | grep "Release" | sed -e 's/SQL\*Plus: Release //g' | cut -d'.' -f1`
- con_string="/ as sysdba"
- chksqlp=0
- else
- $ECHO "sqlplus executable was not found in $V_ORACLE_HOME/bin"
- chksqlp=1
- fi
- }
- check_oracle_home()
- {
- if [ "$V_ORACLE_HOME" = "" ]; then
- # if [ "$chksqlp" = "" ]; then
- # $ECHO "Unable to find the value for ORACLE_HOME"
- # fi
-
- answer=""
- while [ "$answer" = "" ] && [ "$LICAGREE" != "YES" ]
- do
- $ECHO "Enter a valid ORACLE_HOME location for the SQL*Plus client to be used"; read answer
- V_ORACLE_HOME=$answer
- done
- fi
-
- check_sqlplus
- if [ $chksqlp -eq 1 ]; then
- if [ "$LICAGREE" = "YES" ]; then
- log_write "sqlplus executable was not found in $V_ORACLE_HOME/bin"
- log_write "Failed to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}"
- echo "DB: CT-02010: Access error on ORACLE_HOME: ${V_ORACLE_HOME}" >>$log_err
- exit
- else
- question="Do you want to re-enter the location for ORACLE_HOME"
- ask_yn
- if [ "$yn" = "n" ]; then
- log_write "Enter ORACLE_HOME answer = $yn"
- exit
- else
- V_ORACLE_HOME=""
- check_oracle_home
- fi
- fi
- fi
- }
- #main
- #setAlias
- OS_NAME=`uname -s`
- NOW="`date '+%Y%m%d%H%M'`"
- V_PWD="${CT_TMP}/db_tmp"
- V_TMP="${CT_TMP}"
- #V_PWD_TMP="${V_PWD}/ctdb"
- V_ORACLE_HOME=$1
- V_ORACLE_SID=$2
- V_OS_USER=$3
- SQL_SCRIPT=$4
- logfile=db_conn_coll.log
- log_col=DB_collected.log
- log_warn=DB_warnings.log
- log_err=DB_errors.log
- get_USR_ID
- log_write "SCRIPT_USER=$USR_ID"
- if [ "$V_OS_USER" != "$USR_ID" ] ; then
- if [ $USR_ID != "root" ] && [ "$LICAGREE" = "YES" ]; then
- log_write "Unable to switch user from $USR_ID to $V_OS_USER in silent mode"
- log_write "Unable to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}"
- exit
- else
- $ECHO Switching user from $USR_ID to $V_OS_USER...
- log_write "Switching user from $USR_ID to $V_OS_USER"
- if [ ! -w $V_TMP ]; then
- $ECHO "There are no writing permission on $V_TMP folder"
- echo "There are no writing permission on $V_TMP folder" >>"$logfile"
- echo "Failed to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}" >>"$logfile"
- grep 'CT-02013' "$log_err" >/dev/null 2>&1
- if [ $? -eq 1 ] ; then
- echo "DB: CT-02013: No writing permission on $V_TMP folder" >>"$log_err"
- fi
- exit 201
- fi
-
- if [ ! -x $V_TMP ]; then
- $ECHO "There are no execution permission on $V_TMP folder"
- echo "There are no execution permission on $V_TMP folder" >>"$logfile"
- echo "Failed to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}" >>"$logfile"
- grep 'CT-02012' "$log_err" >/dev/null 2>&1
- if [ $? -eq 1 ] ; then
- echo "DB: CT-02012: No execute permission on $V_TMP folder" >>"$log_err"
- fi
- exit 201
- fi
-
- ./check_privs.sh
-
- if [ ! -s $V_PWD/check_privs.log ] || [ ! -x $V_TMP ] ; then
- $ECHO "There are no execution permission on $V_TMP folder"
- log_write "There are no execution permission on $V_TMP folder"
- log_write "Failed to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}"
- grep 'CT-02012' $log_err >/dev/null 2>&1
- if [ $? -eq 1 ] ; then
- echo "DB: CT-02012: No execute permission on $V_TMP folder" >>"$log_err"
- fi
- exit 201
- else
- rm -f $V_PWD/check_privs.log
- fi
-
- chmod -R 777 $V_PWD
- su "$V_OS_USER" -c "cd $V_PWD; ./local_conn.sh $1 $2 $3 \"$4\""
- fi
- else
- if [ "$V_ORACLE_HOME" = "UNKNOWN" ];then
- echo "Current User=$USR_ID" >>look_for_running_sids.log
- PMONPID=`ps -ef | grep ora_pmon_${V_ORACLE_SID} | grep -v grep | awk '{print $2}'`
- if [ "$OS_NAME" = "SunOS" ] ; then
- echo "#/usr/bin/pwdx $PMONPID 2>/dev/null" >>look_for_running_sids.log
- /usr/bin/pwdx $PMONPID 2>/dev/null >>look_for_running_sids.log
- echo "#/usr/bin/pargs -e $PMONPID 2>/dev/null | grep 'ORACLE_'" >>look_for_running_sids.log
- /usr/bin/pargs -e $PMONPID 2>/dev/null | grep 'ORACLE_' >>look_for_running_sids.log
- V_ORACLE_HOME=`pargs -e $PMONPID 2>/dev/null | grep ' ORACLE_HOME=' | cut -d'=' -f2`
- elif [ "$OS_NAME" = "AIX" ] ; then
- echo "#ls -l /proc/$PMONPID/cwd 2>/dev/null" >>look_for_running_sids.log
- ls -l /proc/$PMONPID/cwd 2>/dev/null >>look_for_running_sids.log
- echo "#ps eauwww $PMONPID 2>/dev/null | grep 'ORACLE_'" >>look_for_running_sids.log
- ps eauwww $PMONPID 2>/dev/null | grep 'ORACLE_' >>look_for_running_sids.log
- V_ORACLE_HOME=`ps eauwww $PMONPID 2>/dev/null | tr ' ' '\012' | grep '^ORACLE_HOME=' | cut -d'=' -f2`
- elif [ "$OS_NAME" = "Linux" ] ; then
- echo "#/usr/bin/pwdx $PMONPID 2>/dev/null" >>look_for_running_sids.log
- /usr/bin/pwdx $PMONPID 2>/dev/null >>look_for_running_sids.log
- echo "#/usr/bin/strings /proc/$PMONPID/environ 2>/dev/null | grep 'ORACLE_'" >>look_for_running_sids.log
- /usr/bin/strings /proc/$PMONPID/environ 2>/dev/null | grep 'ORACLE_' >>look_for_running_sids.log
- V_ORACLE_HOME=`strings /proc/$PMONPID/environ 2>/dev/null | grep -v denied | grep '^ORACLE_HOME=' | cut -d'=' -f2`
- elif [ "$OS_NAME" = "HP-UX" ] ; then
- echo "#/usr/bin/pfiles $PMONPID 2>/dev/null" >>look_for_running_sids.log
- /usr/bin/pfiles $PMONPID 2>/dev/null >>look_for_running_sids.log
- V_ORACLE_HOME=`pfiles $PMONPID 2>/dev/null | grep bin | cut -d':' -f2 | sed -e 's/ //g' -e 's/\/bin\/oracle//g'`
- fi
- fi
-
- #$ECHO "CONNECTION TYPE:LOCAL, ORACLE_SID:$V_ORACLE_SID, ORACLE_HOME:$V_ORACLE_HOME"
- check_oracle_home
-
- NLS_LANG=AMERICAN_AMERICA.UTF8
- export NLS_LANG
- ORACLE_HOME=$V_ORACLE_HOME
- ORACLE_SID=$V_ORACLE_SID
- export ORACLE_HOME
- export ORACLE_SID
-
- if [ "$LD_LIBRARY_PATH" != "" ]; then
- LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
- else
- LD_LIBRARY_PATH=$ORACLE_HOME/lib
- fi
- export LD_LIBRARY_PATH
-
- log_write "Checking local connection ORACLE_SID=$V_ORACLE_SID, ORACLE_HOME=$V_ORACLE_HOME"
-
- check_space
- if [ $CT_NOSPACE -eq 1 ];then
- grep 'CT-02019' "$log_err" >/dev/null 2>&1
- if [ $? -eq 1 ] ; then
- echo "DB: CT-02019: ERROR: No disk space available on ${CT_TMP} folder" >>"$log_err"
- fi
- exit 18
- fi
-
- $ORACLE_HOME/bin/sqlplus /nolog <<EOF >>$logfile 2>&1
- connect ${con_string}
- set echo off
- set verify off
- set termout off
- spool checkconn.txt
- select 'Connected' || ' successfully' from v\$database;
- spool off
- exit
- EOF
-
- if [ ! -f checkconn.txt ]; then
- $ECHO " " >checkconn.txt
- fi
- cat checkconn.txt | grep "Connected successfully" >/dev/null
- if [ $? -eq 0 ]; then
- log_write "Connected successfully to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}"
- log_write "GREPME_DB_LIST>>,LOCAL,$V_ORACLE_HOME,$V_ORACLE_SID_ENV,$V_OS_USER,,,,,,,$SQL_SCRIPT,$NOW"
- $ECHO "Connected successfully"
- sql_no=`echo $SQL_SCRIPT | tr -d ' ' | tr -s '|' ' ' | wc -w`
- i=1; while [ $i -le $sql_no ];
- do
- V_SQL=`echo $SQL_SCRIPT | cut -d'|' -f$i`
- $ECHO "Running ${V_SQL} on local instance ${V_ORACLE_SID}..."
- log_write "Running ${V_SQL} on local instance ${V_ORACLE_SID}..."
- echo @${V_SQL} > runtime.sql
- rm -f *_sql_*.log
- $ORACLE_HOME/bin/sqlplus " ${con_string}" @runtime.sql
- i=`expr $i + 1`
- ./logcolstat.sh DB NO
- ./logcolstat.sh EBS NO
- done
- log_write "End collection for ${V_ORACLE_SID}"
- log_write "=============================================================================="
-
- rm -f checkconn.txt
-
- else
- log_write "Failed to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}"
- cat checkconn.txt >>$logfile
- echo "DB: CT-02011: Failed to connect to instance ${V_ORACLE_SID}: `egrep 'ORA-|SP2-' checkconn.txt`" >>${log_err}
- # $ECHO "Failed to connect to local instance ${V_ORACLE_SID}"
- rm -f checkconn.txt
- exit 1
- fi
- fi
-
|