Problem in connecting to db in a loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Problem in connecting to db in a loop
# 1  
Old 04-08-2016
Problem in connecting to db in a loop

Im trying to run a query in multiple db thro sqlplus in a loop written n shell script. whenevr there is a problem in connecting to db, the shell script abruptly exits. My requirement is , when db connection fails, the script should print the msg and contnue to connect to the next db mentioned in the file county_list Below is my code. Pls assist in getting it fixed.

Code:
cat county_list | while read details
do
county_code=`echo $details | cut -d '|' -f1`
county_name=`echo $details | cut -d '|' -f2`
usr_nm=`echo $details | cut -d '|' -f3`
passwd=`echo $details | cut -d '|' -f4`
domain=`echo $details | cut -d '|' -f5`

echo "Connecting to ${domain}"

$ORACLE_HOME/bin/sqlplus ${usr_nm}/${passwd}@${domain} @sqlquery.sql >> ${conn_dir}/${county_name}_conn.txt

if [ "$?" = "1" ]
then
echo "Connection problem"
continue
fi

echo "LOOP over for ${county_name}"
done

sqlquery.sql :

Code:
SET ECHO OFF
SET VERIFY OFF
SET FEEDBACK OFF
SET MARKUP HTML OFF SPOOL OFF
SET PAGESIZE 50000
SET LINESIZE 5000
SET HEADING ON
SET TRIMSPOOL ON
SET TRIMOUT ON
COLUMN clogname NEW_VALUE logname NOPRINT
SET COLSEP ,
SET SERVEROUTPUT ON
SPOOL /tmp/uat_temp.txt

DECLARE
   v1_sql_err_code   CHAR (10) := NULL;
   v1_success        BOOLEAN := TRUE;
 v1_count NUMBER(7,2);
BEGIN
   DBMS_OUTPUT.enable (NULL);
   v1_success := TRUE;

   SELECT COUNT(*) INTO v1_count
     FROM se_usr a
    
DBMS_OUTPUT.put_line (v1_count);
EXCEPTION
   WHEN OTHERS
   THEN
      v1_success := FALSE;
      v1_sql_err_code := SUBSTR (SQLERRM, 1, 10);
      DBMS_OUTPUT.put_line (
         'EXCEPTION CAUGHT. SQL Error Code: ' || v1_sql_err_code);
END;
/
SPOOL OFF

OUTPUT ( for incorrect login detail in the first db connection. )

Code:
/home/dev/uat_report>./UAT_usr_login_report.sh
Connecting to ALA01r
Connection problem
/home/dev/uat_report>

# 2  
Old 04-09-2016
Code:
oifs="$IFS"
while IFS="|" read county_code county_name usr_nm passwd domain xstr
do
        IFS="$oifs"
        echo "Connecting to ${domain}"

        $ORACLE_HOME/bin/sqlplus ${usr_nm}/${passwd}@${domain} @sqlquery.sql >> ${conn_dir}/${county_name}_conn.txt 2>error.txt
        stat=$?
        [ "$stat" = 0 ] && echo "OK" && break  # or continue ?

        echo "LOOP over for ${county_name}"
        cat error.txt
done < country_list

# 3  
Old 04-09-2016
@kshji oifs=$IFS and IFS=$oifs are not needed here and can be left out, since in IFS="|" read IFS is set local to the read command and does not affect the global IFS value.

Last edited by Scrutinizer; 04-09-2016 at 01:41 PM..
# 4  
Old 04-11-2016
Thank you both of you for your inputs.

sorry to mention that the solution you gave is not working for me.

I tried using continue command in two ways, one as mentioned by you, and the other by searching for any ERROR in the sqlplus output file.

Both continue statements doesn seem to work.

I have included some echo statements for your reference.


Code:
while IFS="|" read county_code county_name usr_nm passwd domain
do
 echo "Connecting to county $county_code"
$ORACLE_HOME/bin/sqlplus ${usr_nm}/${passwd}@${domain} @sqlquery.sql >> ${conn_dir}/${county_name}_conn.txt 2>error.txt

stat=$?
echo "PRINTING STATUS $stat"
[ "$stat" != 0 ] && continue

echo "SEARCHING FOR ERROR IN LOG FILE"
cnt=`grep "ERROR" ${conn_dir}/${county_name}_conn.txt|wc -l`
if [ $cnt -ne 0 ]
then
     echo "pattern match found - next continue command will be executed"
    continue
else
     echo "no match with the pattern"
fi

echo "OUT OF IF LOOP"
echo ""
count=`sed -n "4 p" /tmp/uat_temp.txt | sed 's/ //g'`

echo "${county_code},${county_name},${count}" >> $rep_dir/UAT_Report_${CUR_DATE}.CSV

rm -f /tmp/uat_temp.txt

done < county_list

echo "OUT OF WHILE LOOP"

OUTPUT:

Code:
/home/devdbg2/uat_report>./UAT_usr_login_report.sh
Connecting to county 1
PRINTING STATUS 0
SEARCHING FOR ERROR IN LOG FILE
no match with the pattern
OUT OF IF LOOP

Connecting to county 7
PRINTING STATUS 0
SEARCHING FOR ERROR IN LOG FILE
pattern match found - next continue command will be executed
OUT OF WHILE LOOP

sqlplus connection output file:
Code:
/home/devdbg2/uat_report/DB_conn>cat ContraCosta_conn.txt

SQL*Plus: Release 11.2.0.3.0 Production on Mon Apr 11 02:22:41 2016

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified


Enter user-name: Enter password:
ERROR:
ORA-12162: TNS:net service name is incorrectly specified

county_list file :
Code:
/home/devdbg2/uat_report>cat county_list
1|Alameda|abc|def|ALA01r
7|ContraCosta|abc|xyz|CC07r
10|Fresno|abc|def|FR10r

Here in county_list, passwrd for ContraCosta is incorrect. in that case, my script should print an error message and continue to run the query for the next county ie Fresno.

But, my script exits whenever there is an ORA error printing the lines followed by the sqlplus commands and exit at the current iteration if the while loop.

Kindly advise where I am going wrong.

Thanks in advance.!
# 5  
Old 04-11-2016
Is your county file a correct *nix text file, i.e. terminated with a <new line> char?
# 6  
Old 04-11-2016
when i give a newline at the end of county_list file, the output is as follows:

Code:
/home/devdbg2/uat_report>./UAT_usr_login_report.sh
Connecting to county 1
PRINTING STATUS 0
SEARCHING FOR ERROR IN LOG FILE
no match with the pattern
OUT OF IF LOOP

Connecting to county 7
PRINTING STATUS 1
OUT OF WHILE LOOP

exit code is captured as 1 but the while loop exits which should not happen
# 7  
Old 04-11-2016
Run the script with the -vx options set AND post the resulting log.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sqlplus not connecting the 2nd time in for loop

Hi, I am trying to get the rows(First step is to get the poolid's and then second step run a loop to get the output based on each pool id and third connection is to get the member id and pool id based on a different condition) where based of certain conditions and storing it in a file. I wrote the... (6 Replies)
Discussion started by: ajayakunuri
6 Replies

2. UNIX for Dummies Questions & Answers

Problem connecting FreeBSD VM(Hyper-v) to internet

I created a VM for FreeBSD on hyper-v and i am having trouble connecting it to the internet. My virtual machine config are as below: 100 GB HD 1GB RAM Generation 1 Two Network adapters 1. Legacy Network Adapter 2. Network Adapter both are connected to network switch "Internet" which... (2 Replies)
Discussion started by: Vishawdeep
2 Replies

3. UNIX for Dummies Questions & Answers

Problem connecting with Reflection X 14.1

Other people at work are able to connect but I am not. I am not sure if there is a setting that I am missing. Connecting from Win7 to Solaris 10. Connection attempt log: gnome-session Connecting 144.243.90.235 via TELNET Thu Mar 29 15:15:32 2012 login: *** Password: ******* Last login: Thu... (2 Replies)
Discussion started by: SIFT3R
2 Replies

4. Shell Programming and Scripting

Problem in Connecting to Oracle Database using KornShell

Hello, I am very new to Scripting. I am having a Kornshell Script below for connecting to Oracle database. But getting an error while executing it. #!/bin/ksh ssh -X root@192.168.2.127 <perimuka> sleep 5 su - oracle sqlplus <mraghunandanan>/<peri123> <<eof Can anyone tell what is wrong... (3 Replies)
Discussion started by: mraghunandanan
3 Replies

5. Post Here to Contact Site Administrators and Moderators

Problem connecting to www.unix.com

I've been having a problem connecting to the forum. I know it is just something with my computer but I have no idea what it is. It started last week. Every time I connect I get this: <?xml version="1.0" encoding="ISO-8859-1" ?> - <rss version="2.0"... (2 Replies)
Discussion started by: Vi-Curious
2 Replies

6. Shell Programming and Scripting

Error connecting oracle from inside while loop

Hi, I m trying to connect oracle database from inside while loop. I m trying to put the output of sql query in a flat file. Anyone please help me out. cat $FILE_NAME | \ while read da_name do $ORACLE_HOME/bin/sqlplus -s user_name/password@instance << EOF >> $OUTPUT_FILE select... (3 Replies)
Discussion started by: Devesh5683
3 Replies

7. Programming

Problem Connecting to Socket

Can anyone help? I'm trying to write a program which will write to a socket. I can get the server to run, but always get an error when I try to connect. It gives me an error at the "connect" command. It's probably a simple error, but I can't seem to find it. #include <sys/socket.h>... (6 Replies)
Discussion started by: Stevhp
6 Replies

8. UNIX for Dummies Questions & Answers

Having A Problem Connecting to Oracle Using Cron

Can someone tell me how to prevent this? stty: standard input: Invalid argument ERROR: ORA-12154: TNS:could not resolve the connect identifier specified SP2-0306: Invalid option. Usage: CONN where <logon> ::= <username> | / ERROR: ORA-12162: TNS:net service name is incorrectly... (1 Reply)
Discussion started by: goodmis
1 Replies

9. UNIX for Dummies Questions & Answers

Connecting with X-win problem

Hello all, I am trying to connect to my Solaris 8 system with X-win. However, when i try to connect, a black screen comes up, then closes up immediatley. I have checked /var/dt/Xerrors, and I am getting the folllowing: Warning: Missing charsets in String to FontSet conversion Warning:... (2 Replies)
Discussion started by: dragunu
2 Replies

10. UNIX for Dummies Questions & Answers

Problem Connecting from Windows base OS to linux

I have a network consisting of Linux Server, Win-Nt & 95 OS. I am able to connect from Linux to Win-NT using either ftp / telnet in time. But it takes me around & more than 50 seconds to connect from Wint -Nt/95 to Linux using either ftp/telnet. My network is small & it hardly consists 20-25... (3 Replies)
Discussion started by: S.Vishwanath
3 Replies
Login or Register to Ask a Question