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:

 

 

 

Continue reading “Lanciatore di script SQL”

inserire commit nello script

 

Mi è capitato una volta di dover “importare” più 5 milioni di record in una tabella,   tramite script di INSERT.
Normalmente questa operazione, per motivi pratici e di velocità, viene eseguita tramite apposito strumento, per esempio in Oracle, con SQL*Loader,IMP/EXP o IMPDB/EXPDP, ecc.

 

In ogni modo decido di utilizzare questo script di INSERT, generato da Sqldeveloper: oltre 700MB di dimensioni!

Sfortunatamente Sqldeveloper non inserisce la COMMIT ogni tot righe, il che rende il processo più lungo in caso di ripartenza.

SOLUZIONE

Esistono diversi metodi, ma quello che ho impiegato è molto semplice: una sola riga!
Quello che ci serve è una shell Unix: quindi un Linux o Cygwin (per ambiente Windows).

mauro$vi mycommit.sh

e inserire la riga:

sed '0~200 s/$/commit;/g' < $1 > ${1}_new

uscire e salvare. Una parola su questa riga: il  numero 200 significa ogni 200 righe. Impostare lo script:

mauro$chmod 755 mycommit.sh

quindi, se il file si chiama

rk_rs_vrastat_6mesi_corr.sql

daremo il comando:

mauro$./mycommit.sh rk_rs_vrastat_6mesi_corr.sql

al termine avremo 2 file:

mauro$ls -la rk*
-rwxr-xr-x 1 mauro mauro 786616673 Oct 24 14:06 rk_rs_vrastat_6mesi_corr.sql
-rw-r--r-- 1 mauro mauro 786720455 Oct 24 14:19 rk_rs_vrastat_6mesi_corr.sql_new

ultimo passaggio, inserire la commit finale, in fondo al file modificato:

echo "commit;" >> rk_rs_vrastat_6mesi_corr.sql_new

e il nostro script è pronto per essere eseguito!