| Using SQL in Shell Scripts
 
Kyle Gleed and Scott Tarvainen 
Introduction 
UNIX system administrators are constantly writing shell
scripts to 
automate mundane and repetitive tasks. As UNIX system
administrators 
who are also responsible for database administration,
we have incorporated 
Structured Query Language (SQL) commands into shell
scripts to assist 
us in managing our Relational Database Management System
(RDBMS). 
We use the concept of "Here Documents" (see
the sidebar "Here 
Documents") to embed Oracle SQL*Plus (see the sidebar
"SQL*Plus") 
commands in our Bourne shell scripts. 
The Scripts 
The two scripts presented here, find_fields.sh (Listing
1) 
and desc_dbase.sh (Listing 2), demonstrate the benefits
of 
combining SQL and Bourne Shell commands. This approach
bypasses the 
database's front-end application, a practice that is
not generally 
recommended but is often necessary, especially for database
administrators. 
In troubleshooting database problems, we regularly find
ourselves 
tracking logical relationships within the database tables.
Finding 
these relationships requires multiple describes of the
various 
tables. We developed find_fields.sh to automate this
often 
repetitive task. The second script, desc_dbase.sh, helps
us 
conceptualize the logical layout of our RDBMS -- a necessary
precondition 
to effective troubleshooting. 
find_fields.sh 
find_fields.sh (Listing 1) uses SQL*Plus commands to
identify 
all tables containing a user-specified field within
an Oracle database. 
After prompting for necessary information to connect
to the database 
and for the appropriate query field, this script identifies
all tables 
within the database that contain the query field. This
aids greatly 
in troubleshooting database relationship problems. 
The script begins by prompting the user for appropriate
database connection 
information. The general syntax for SQL*Plus connections
is: 
 
sqlplus <DBUSERID>/<PASSWORD>@<DATABASE> 
 
The script then prompts the user for the query field
to be searched for in the database tables. It then tries
to make the 
database connection: if successful, it builds a list
of all table 
names within the database. The script next makes a second
connection 
to the database, so that it can search for the user-supplied
query 
field within each of the tables in the database. After
completion 
of the search, the script presents the user with the
names of all 
tables within the database that contain the query field.
If no tables 
were found with the query field, this information is
also relayed 
to the user. 
desc_dbase.sh 
desc_dbase.sh (Listing 2) uses SQL*Plus commands to
describe 
the table structures of an Oracle database. After prompting
for necessary 
information to connect to the database, this script
provides a quick 
snapshot of what the database looks like (i.e., table
names and their 
field structures). This information is provided in a
file the user 
can either view or print. 
This script begins as find_fields.sh did, by retrieving
appropriate 
database connect information. It attempts a database
connection and, 
if successful, builds a list of table names within the
database. The 
script makes a second connection to the database in
order to describe 
each table within it. When the description is complete,
the user is 
given the option of viewing or printing the described
database. The 
print option assumes that the system default printer
is set. If it 
is not, the script should be modified to perform: 
 
lpr -P <PRINTER> /tmp/dbstruct 
 
instead of 
 
lpr /tmp/dbstruct 
 
Both scripts use the procedure error_check to 
verify database connection status. If an attempted database
connection 
fails, error_check will echo the error condition to
the user 
and exit the script. Errors can occur if the database
is shut down, 
if an invalid connect sequence is initiated, or if the
database is 
empty. 
Summary 
The concept of embedding SQL commands in shell scripts
should prove 
useful to database administrators, managers, computer
security professionals, 
"power" users, and anyone else concerned with
the logical 
layout of a database(s). These quick, custom-built scripts
represent 
a database management tool too handy to pass up. 
Bibliography 
Peek, Jerry, Tim O'Reilly, Mike Loukides et al. UNIX
Power Tools. Sebastopol, CA: O'Reilly & Associates,
1993. ISBN: 
0-679-79073-X 
Loney, Kevin. ORACLE DBA Handbook. Berkeley, 
CA: McGraw-Hill, 1994. ISBN: 0-07-881182-1.  
 
 About the Authors
 
Scott Tarvainen earned a BS in Computer Science from
Michigan 
Technological University and an MS in Education from
Troy State University. 
A computer scientist/system analyst with Command Technologies,
Inc., 
he is currently on contract with the United States Air
Force on location 
at Yokota Air Base, in Japan. Scott has more than seven
years of experience 
in computer systems administration. 
Kyle Gleed has an Associate's degree in Computer Information
Systems and is completing a BS in Computer Studies with
the Universitiy 
of Maryland. He is currently serving in the US Air Force
and is stationed 
at Yokota Air Base, Japan, where he works as a UNIX
system administrator. 
Kyle has more than six years experience with computer
systems and 
database administration. 
 
 
 |