local_conn.sh 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. #!/bin/sh
  2. . ./helper_functions.sh
  3. get_USR_ID()
  4. {
  5. USER_ID_CMD=`type whoami >/dev/null 2>/dev/null && echo "Found" || echo "NotFound"`
  6. if [ "$USER_ID_CMD" = "Found" ] ; then
  7. USR_ID=`whoami`
  8. else
  9. if [ "$OS_NAME" = "SunOS" ] ; then
  10. if [ -x /usr/ucb/whoami ] ; then
  11. USR_ID=`/usr/ucb/whoami`
  12. fi
  13. else
  14. USR_ID=$LOGNAME
  15. fi
  16. fi
  17. }
  18. log_write()
  19. {
  20. $ECHO $1 >>$logfile
  21. }
  22. check_space() {
  23. CT_NOSPACE=0
  24. echo "checking disk space" >checkspace.txt
  25. if [ ! -s checkspace.txt ]; then
  26. CT_NOSPACE=1
  27. echo "DB: CT-02019: ERROR: No disk space available on ${CT_TMP} folder"
  28. if [ -f checkspace.txt ]; then
  29. rm -f checkspace.txt
  30. fi
  31. else
  32. rm -f checkspace.txt
  33. fi
  34. }
  35. ask_yn()
  36. {
  37. answ=""
  38. while [ "$answ" = "" ]
  39. do
  40. $ECHO "$question (y/n)? : "; read answ
  41. done
  42. if [ "$answ" = "y" -o "$answ" = "Y" ]; then
  43. yn="y";
  44. else
  45. if [ "$answ" = "n" -o "$answ" = "N" ]; then
  46. yn="n";
  47. else
  48. ask_yn;
  49. fi
  50. fi
  51. }
  52. check_sqlplus()
  53. {
  54. if [ -f $V_ORACLE_HOME/bin/sqlplus -a -x $V_ORACLE_HOME/bin/sqlplus ];then
  55. # sqlplus_vers=`echo exit | $V_ORACLE_HOME/bin/sqlplus /nolog | grep "Release" | sed -e 's/SQL\*Plus: Release //g' | cut -d'.' -f1`
  56. con_string="/ as sysdba"
  57. chksqlp=0
  58. else
  59. $ECHO "sqlplus executable was not found in $V_ORACLE_HOME/bin"
  60. chksqlp=1
  61. fi
  62. }
  63. check_oracle_home()
  64. {
  65. if [ "$V_ORACLE_HOME" = "" ]; then
  66. # if [ "$chksqlp" = "" ]; then
  67. # $ECHO "Unable to find the value for ORACLE_HOME"
  68. # fi
  69. answer=""
  70. while [ "$answer" = "" ] && [ "$LICAGREE" != "YES" ]
  71. do
  72. $ECHO "Enter a valid ORACLE_HOME location for the SQL*Plus client to be used"; read answer
  73. V_ORACLE_HOME=$answer
  74. done
  75. fi
  76. check_sqlplus
  77. if [ $chksqlp -eq 1 ]; then
  78. if [ "$LICAGREE" = "YES" ]; then
  79. log_write "sqlplus executable was not found in $V_ORACLE_HOME/bin"
  80. log_write "Failed to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}"
  81. echo "DB: CT-02010: Access error on ORACLE_HOME: ${V_ORACLE_HOME}" >>$log_err
  82. exit
  83. else
  84. question="Do you want to re-enter the location for ORACLE_HOME"
  85. ask_yn
  86. if [ "$yn" = "n" ]; then
  87. log_write "Enter ORACLE_HOME answer = $yn"
  88. exit
  89. else
  90. V_ORACLE_HOME=""
  91. check_oracle_home
  92. fi
  93. fi
  94. fi
  95. }
  96. #main
  97. #setAlias
  98. OS_NAME=`uname -s`
  99. NOW="`date '+%Y%m%d%H%M'`"
  100. V_PWD="${CT_TMP}/db_tmp"
  101. V_TMP="${CT_TMP}"
  102. #V_PWD_TMP="${V_PWD}/ctdb"
  103. V_ORACLE_HOME=$1
  104. V_ORACLE_SID=$2
  105. V_OS_USER=$3
  106. SQL_SCRIPT=$4
  107. logfile=db_conn_coll.log
  108. log_col=DB_collected.log
  109. log_warn=DB_warnings.log
  110. log_err=DB_errors.log
  111. get_USR_ID
  112. log_write "SCRIPT_USER=$USR_ID"
  113. if [ "$V_OS_USER" != "$USR_ID" ] ; then
  114. if [ $USR_ID != "root" ] && [ "$LICAGREE" = "YES" ]; then
  115. log_write "Unable to switch user from $USR_ID to $V_OS_USER in silent mode"
  116. log_write "Unable to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}"
  117. exit
  118. else
  119. $ECHO Switching user from $USR_ID to $V_OS_USER...
  120. log_write "Switching user from $USR_ID to $V_OS_USER"
  121. if [ ! -w $V_TMP ]; then
  122. $ECHO "There are no writing permission on $V_TMP folder"
  123. echo "There are no writing permission on $V_TMP folder" >>"$logfile"
  124. echo "Failed to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}" >>"$logfile"
  125. grep 'CT-02013' "$log_err" >/dev/null 2>&1
  126. if [ $? -eq 1 ] ; then
  127. echo "DB: CT-02013: No writing permission on $V_TMP folder" >>"$log_err"
  128. fi
  129. exit 201
  130. fi
  131. if [ ! -x $V_TMP ]; then
  132. $ECHO "There are no execution permission on $V_TMP folder"
  133. echo "There are no execution permission on $V_TMP folder" >>"$logfile"
  134. echo "Failed to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}" >>"$logfile"
  135. grep 'CT-02012' "$log_err" >/dev/null 2>&1
  136. if [ $? -eq 1 ] ; then
  137. echo "DB: CT-02012: No execute permission on $V_TMP folder" >>"$log_err"
  138. fi
  139. exit 201
  140. fi
  141. ./check_privs.sh
  142. if [ ! -s $V_PWD/check_privs.log ] || [ ! -x $V_TMP ] ; then
  143. $ECHO "There are no execution permission on $V_TMP folder"
  144. log_write "There are no execution permission on $V_TMP folder"
  145. log_write "Failed to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}"
  146. grep 'CT-02012' $log_err >/dev/null 2>&1
  147. if [ $? -eq 1 ] ; then
  148. echo "DB: CT-02012: No execute permission on $V_TMP folder" >>"$log_err"
  149. fi
  150. exit 201
  151. else
  152. rm -f $V_PWD/check_privs.log
  153. fi
  154. chmod -R 777 $V_PWD
  155. su "$V_OS_USER" -c "cd $V_PWD; ./local_conn.sh $1 $2 $3 \"$4\""
  156. fi
  157. else
  158. if [ "$V_ORACLE_HOME" = "UNKNOWN" ];then
  159. echo "Current User=$USR_ID" >>look_for_running_sids.log
  160. PMONPID=`ps -ef | grep ora_pmon_${V_ORACLE_SID} | grep -v grep | awk '{print $2}'`
  161. if [ "$OS_NAME" = "SunOS" ] ; then
  162. echo "#/usr/bin/pwdx $PMONPID 2>/dev/null" >>look_for_running_sids.log
  163. /usr/bin/pwdx $PMONPID 2>/dev/null >>look_for_running_sids.log
  164. echo "#/usr/bin/pargs -e $PMONPID 2>/dev/null | grep 'ORACLE_'" >>look_for_running_sids.log
  165. /usr/bin/pargs -e $PMONPID 2>/dev/null | grep 'ORACLE_' >>look_for_running_sids.log
  166. V_ORACLE_HOME=`pargs -e $PMONPID 2>/dev/null | grep ' ORACLE_HOME=' | cut -d'=' -f2`
  167. elif [ "$OS_NAME" = "AIX" ] ; then
  168. echo "#ls -l /proc/$PMONPID/cwd 2>/dev/null" >>look_for_running_sids.log
  169. ls -l /proc/$PMONPID/cwd 2>/dev/null >>look_for_running_sids.log
  170. echo "#ps eauwww $PMONPID 2>/dev/null | grep 'ORACLE_'" >>look_for_running_sids.log
  171. ps eauwww $PMONPID 2>/dev/null | grep 'ORACLE_' >>look_for_running_sids.log
  172. V_ORACLE_HOME=`ps eauwww $PMONPID 2>/dev/null | tr ' ' '\012' | grep '^ORACLE_HOME=' | cut -d'=' -f2`
  173. elif [ "$OS_NAME" = "Linux" ] ; then
  174. echo "#/usr/bin/pwdx $PMONPID 2>/dev/null" >>look_for_running_sids.log
  175. /usr/bin/pwdx $PMONPID 2>/dev/null >>look_for_running_sids.log
  176. echo "#/usr/bin/strings /proc/$PMONPID/environ 2>/dev/null | grep 'ORACLE_'" >>look_for_running_sids.log
  177. /usr/bin/strings /proc/$PMONPID/environ 2>/dev/null | grep 'ORACLE_' >>look_for_running_sids.log
  178. V_ORACLE_HOME=`strings /proc/$PMONPID/environ 2>/dev/null | grep -v denied | grep '^ORACLE_HOME=' | cut -d'=' -f2`
  179. elif [ "$OS_NAME" = "HP-UX" ] ; then
  180. echo "#/usr/bin/pfiles $PMONPID 2>/dev/null" >>look_for_running_sids.log
  181. /usr/bin/pfiles $PMONPID 2>/dev/null >>look_for_running_sids.log
  182. V_ORACLE_HOME=`pfiles $PMONPID 2>/dev/null | grep bin | cut -d':' -f2 | sed -e 's/ //g' -e 's/\/bin\/oracle//g'`
  183. fi
  184. fi
  185. #$ECHO "CONNECTION TYPE:LOCAL, ORACLE_SID:$V_ORACLE_SID, ORACLE_HOME:$V_ORACLE_HOME"
  186. check_oracle_home
  187. NLS_LANG=AMERICAN_AMERICA.UTF8
  188. export NLS_LANG
  189. ORACLE_HOME=$V_ORACLE_HOME
  190. ORACLE_SID=$V_ORACLE_SID
  191. export ORACLE_HOME
  192. export ORACLE_SID
  193. if [ "$LD_LIBRARY_PATH" != "" ]; then
  194. LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
  195. else
  196. LD_LIBRARY_PATH=$ORACLE_HOME/lib
  197. fi
  198. export LD_LIBRARY_PATH
  199. log_write "Checking local connection ORACLE_SID=$V_ORACLE_SID, ORACLE_HOME=$V_ORACLE_HOME"
  200. check_space
  201. if [ $CT_NOSPACE -eq 1 ];then
  202. grep 'CT-02019' "$log_err" >/dev/null 2>&1
  203. if [ $? -eq 1 ] ; then
  204. echo "DB: CT-02019: ERROR: No disk space available on ${CT_TMP} folder" >>"$log_err"
  205. fi
  206. exit 18
  207. fi
  208. $ORACLE_HOME/bin/sqlplus /nolog <<EOF >>$logfile 2>&1
  209. connect ${con_string}
  210. set echo off
  211. set verify off
  212. set termout off
  213. spool checkconn.txt
  214. select 'Connected' || ' successfully' from v\$database;
  215. spool off
  216. exit
  217. EOF
  218. if [ ! -f checkconn.txt ]; then
  219. $ECHO " " >checkconn.txt
  220. fi
  221. cat checkconn.txt | grep "Connected successfully" >/dev/null
  222. if [ $? -eq 0 ]; then
  223. log_write "Connected successfully to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}"
  224. log_write "GREPME_DB_LIST>>,LOCAL,$V_ORACLE_HOME,$V_ORACLE_SID_ENV,$V_OS_USER,,,,,,,$SQL_SCRIPT,$NOW"
  225. $ECHO "Connected successfully"
  226. sql_no=`echo $SQL_SCRIPT | tr -d ' ' | tr -s '|' ' ' | wc -w`
  227. i=1; while [ $i -le $sql_no ];
  228. do
  229. V_SQL=`echo $SQL_SCRIPT | cut -d'|' -f$i`
  230. $ECHO "Running ${V_SQL} on local instance ${V_ORACLE_SID}..."
  231. log_write "Running ${V_SQL} on local instance ${V_ORACLE_SID}..."
  232. echo @${V_SQL} > runtime.sql
  233. rm -f *_sql_*.log
  234. $ORACLE_HOME/bin/sqlplus " ${con_string}" @runtime.sql
  235. i=`expr $i + 1`
  236. ./logcolstat.sh DB NO
  237. ./logcolstat.sh EBS NO
  238. done
  239. log_write "End collection for ${V_ORACLE_SID}"
  240. log_write "=============================================================================="
  241. rm -f checkconn.txt
  242. else
  243. log_write "Failed to connect to local instance ${V_ORACLE_SID}, ORACLE_HOME=${V_ORACLE_HOME}, SQL=${SQL_SCRIPT}"
  244. cat checkconn.txt >>$logfile
  245. echo "DB: CT-02011: Failed to connect to instance ${V_ORACLE_SID}: `egrep 'ORA-|SP2-' checkconn.txt`" >>${log_err}
  246. # $ECHO "Failed to connect to local instance ${V_ORACLE_SID}"
  247. rm -f checkconn.txt
  248. exit 1
  249. fi
  250. fi