Lanciatore di script SQL

Spesso un rilascio software su database richiede il lancio o esecuzione di diversi scripts. Farlo a mano potrebbe essere noioso oppure si potrebbe rischiare di non eseguire qualche file, o ancora dimenticarsi di registrare su spool.

Quindi per eseguire automaticamente degli script SQL, ecco un semplice script shell:

 

 

 

make4.sh

# make4.sh
# mr, 2018.07.31 
#
MIOPARM=${1}
MCURRDIR=`pwd`
# MPARENTDIR="../"
MWORKDIR="${1}"
mlanciatore="02_lancia${1}.sql"
mlanciatoretmp="mlanciatore.tmp"
echo "valore ${1}"
echo ${MCURRDIR}
echo ${MWORKDIR}
cd ${MWORKDIR}
touch ${mlanciatoretmp}
echo "-- ${mlanciatore}"           >> ${mlanciatoretmp}
echo "-- "          >> {mlanciatoretmp}
for mycsv in `ls *.sql|sort -V`
do
myspool=`echo "${mycsv}" | sed 's/.sql/.log/'`
echo "spool ${myspool}"      >> ${mlanciatoretmp}
echo "@${mycsv} "            >> ${mlanciatoretmp}
echo "SHOW ERRORS "          >> ${mlanciatoretmp}
echo "spool OFF"             >> ${mlanciatoretmp}
echo "PAUSE"                 >> ${mlanciatoretmp}
done
echo "PROMPT Salvare i log!" >> ${mlanciatoretmp}
mv ${mlanciatoretmp} ${mlanciatore}

per eseguirlo basterà dare:

$ ~/oper/newlog/script/make4.sh rel20180913a

dove “rel20180913a” è il nome della directory che contiene gli script

Se invece “make4.sh” si trovasse nella directory corrente o attuale:

$ ./make4.sh rel20180913a

per eseguirlo:

sqlplus user/pass@sid @02_lanciarel20180913a.sql

ad ogni pausa (comando PAUSE) dare invio per proseguire. Per ogni script lanciato verrà creato il relativo spool con estensione “log”:

$ cat 02_lanciarel20180913a.sql
-- 02_lanciarel20180913a.sql
--
spool myfunct.log
@myfunct.sql
SHOW ERRORS
spool OFF
PAUSE
spool venditemiopkg.log
@venditemiopkg.sql
SHOW ERRORS
spool OFF
PAUSE
. . . .

ORDINE DI ESECUZIONE

In molti casi gli script devono essere eseguiti nell’ordine prefissato. se i diversi file hanno una iniziale numerica sarà facile mantenere l’ordine di esecuzione per chè l’istrizione

...
for mycsv in `ls *.sql|sort -V`
...

proprio grazie a “sort”, manterrà l’ordine della lista dei file.

 

 

 

Leave a Reply