di Casimir Saternos
Pubblicato novembre 2005
Impara alcuni script shell bash di base per l'installazione, l'esecuzione e la gestione dei database Oracle su Linux.
Circa sette anni fa, Oracle ha rilasciato il primo database commerciale su Linux. Da allora, Oracle, Red Hat e Novell/SUSE collaborano costantemente alle modifiche apportate al kernel Linux in relazione alle prestazioni del database e delle applicazioni. Per questo motivo, Oracle Database 10g for Linux include miglioramenti strettamente correlati al sistema operativo. Oggi, più che mai, i DBA devono avere le conoscenze e l'esperienza su questa piattaforma per amministrare al meglio i sistemi sotto la loro supervisione.
Esiste una tradizionale ripartizione delle responsabilità tra amministratori di sistema e DBA. Tuttavia, nella pratica, la distinzione non è sempre chiara. Molti negozi IT assumano persone che si occupano delle preoccupazioni a livello di database e di sistema operativo. Naturalmente, Oracle Database utilizza le risorse del sistema operativo ed è progettato per interagire a stretto contatto con il proprio ambiente.
Inoltre, molti amministratori di sistema e DBA trovano necessario o conveniente automatizzare le attività relative al loro lavoro. L'installazione del software, il monitoraggio delle risorse di sistema e la gestione dei sistemi implicano che le attività ripetitive e soggette a errori sono affrontate meglio attraverso processi automatizzati rispetto alle procedure manuali.
Un metodo utilizzato per automatizzare tali attività è la creazione di script shell. Gli script shell svolgono un ruolo cruciale nel sistema Linux proprio dal momento in cui sono installati. Quando il sistema viene avviato e chiuso, vengono richiamati diversi script. Le utility di Oracle e di altri fornitori di terze parti vengono richiamate mediante script shell. Dato che possono essere sviluppati rapidamente, venivano utilizzati in passato per la prototipazione di applicazioni. Gli amministratori di sistema hanno sfruttato le funzionalità disponibili tramite script shell per fornire soluzioni su misura per i requisiti specifici e le idiosincrasie dei sistemi sotto la loro supervisione.
In questo articolo, introdurrò funzionalità disponibili tramite lo script shell "bash", pertinente all'installazione, all'esecuzione e alla manutenzione dei database Oracle su una piattaforma Linux. Tieni presente che questo articolo è rivolto ai principianti di script Linux o DBA che hanno appena iniziato con Linux; sarà poco utile per gli amministratori di sistema Linux più esperti.
Descrizione di uno script shell
Uno script shell è semplicemente un file di testo contenente una sequenza di comandi. Quando si esegue il file o lo script, vengono eseguiti i comandi contenuti nel file. Il termine shell si riferisce semplicemente alla particolare interfaccia utente della riga di comando utilizzata per comunicare con il kernel Linux. Sono disponibili diverse shell, tra cui la shell C (csh), shell Korn (ksh), shell Bourne (sh) e shell Bourne-Again (bash). Lo stesso shell è un comando che legge le righe da un file o dal terminale, le interpreta e in genere esegue altri comandi. Shell Bourne-Again incorpora le caratteristiche delle altre shell menzionate ed è quella usata per gli script di cui parla questo articolo.
La prima riga del file di script può essere utilizzata per determinare quale shell verrà utilizzata per eseguire lo script. Questo è il significato della prima riga trovata in tutti gli esempi di script:
#!/bin/bash
Perché utilizzare gli script shell?
A seconda del contesto, è possibile che non venga visualizzato alcun valore immediato per lo script shell in quanto si riferisce al lavoro del DBA. Se non si ha esperienza con i sistemi UNIX o simili a UNIX, la miriade di comandi criptici potrebbe creare confusione. Inoltre, oltre a essere un database relazionale, Oracle 10g fornisce una solida piattaforma per l'elaborazione dei dati all'interno del database e diversi metodi di interazione con il sistema operativo al di fuori del database.
Tuttavia, sono diversi i motivi per approfondire lo script shell, tra cui:
Quando Non utilizzare gli script shell
Oracle Database include funzionalità che vanno oltre la definizione tradizionale di un RDBMS. Come qualsiasi altro pezzo di software, utilizza risorse che vengono fornite dal sistema operativo, ma può "vedere" e "modificare" il suo ambiente in modo molto più grande di altri software. Le viste fisse di SQL e Oracle forniscono un'immagine del sistema dall'interno del database, mentre lo script shell fornisce una vista del sistema dall'esterno del database. Lo script shell non è la soluzione per ogni problema.
È importante riconoscere che molti aspetti del sistema operativo possono essere monitorati e modificati dall'interno del database. Le viste fisse di Oracle (le viste con prefisso v$) possono essere utilizzate per determinare il nome host del computer (v$instance) o il nome della piattaforma su cui è in esecuzione il database (v$database). Anche la posizione e gli altri attributi dei file associati al database possono essere determinati in questo modo. La posizione e gli altri attributi dei file di dati (v$datafile, dba_data_files), dei file temporanei (v$tempfile, dba_temp_files), dei redo log (v$logfile), dei log di archivio (v$archived_log) e dei control file (v$controlfile) possono essere sottoposti a query direttamente dal database. È possibile determinare le informazioni sull'area di recupero flash ($recovery_file_dest) da questa vista, nonché osservando alcuni parametri init.ora (db_recovery_file_dest, db_recovery_file_dest_size). È inoltre possibile eseguire query sullo stato dei processi (v$process) e della memoria (v$sga, v$sgastat e così via). Sono disponibili vari package PL/SQL integrati e la possibilità di creare oggetti di database Java e C che consentono un ulteriore accesso al sistema operativo di base.
Se si stanno considerando la possibilità di creare script per un'attività che richiede molto accesso al database, è probabile che la scelta migliore non sia quella di script. Più avanti in questo articolo, c'è una descrizione di come accedere al database utilizzando SQL*Plus, ma in molti casi è meglio affrontare il problema utilizzando un altro linguaggio.
I grafici riportati di seguito riepilogano le informazioni accessibili all'interno del database stesso:
| Identificazione server | Query rappresentativa | Note> |
|---|---|---|
| Nome host in cui è in esecuzione l'istanza |
|
È inoltre possibile ottenere queste informazioni eseguendo le seguenti operazioni dal bash:
oppure
|
| Piattaforma del sistema operativo |
|
Se si esegue uname -s, vengono restituite informazioni simili |
| Posizioni dei file Oracle | Query rappresentativa | Note |
|---|---|---|
| Control file |
|
Posizione dei file di controllo del database. Il parametro init.ora control_files contiene anche queste informazioni. |
| File di dati |
|
Posizione dei file di dati del database |
| File temporanei |
|
Posizione dei file temporanei del database |
| File di log |
|
Posizione dei redo log |
| Log archiviati |
|
Posizione dei redo log archiviati. Anche i parametri init.ora log_archive_dest_n contengono queste informazioni. Questa query non restituirà risultati se il database non è in modalità Archivelog. |
| Area di recupero flash |
|
La directory utilizzata in un'installazione Oracle 10g per l'area di recupero flash. Il parametro init.ora db_recovery_file_dest contiene anche queste informazioni. |
| Altri punti di accesso sul file system indicati dai parametri |
|
I risultati di questa query possono variare notevolmente a seconda dell'installazione e della versione di Oracle Database in uso. I parametri che possono essere restituiti includono: spfile standby_archive_dest utl_file_dir background_dump_dest user_dump_dest core_dump_dest audit_file_dest dg_broker_config_file1 dg_broker_config_file2 |
| Accesso programmatico al file system | selezionare directory_path da dba_directories |
Il parametro Oracle UTL_FILE_DIR e gli oggetti di database DIRECTORY possono essere utilizzati per accedere ai file che non fanno parte del funzionamento standard del database. |
| Processore/processi | Query rappresentativa | Note |
|---|---|---|
| Processi sessione |
|
Lo spid può essere correlato ai risultati ps -ef per confrontare le informazioni disponibili all'interno del database con quelle del sistema operativo per un determinato processo. |
| Processi correlati al parallelismo |
|
Molti aspetti di Oracle Database, come il caricamento, l'esecuzione di query, la creazione, il recupero e la replica degli oggetti, possono trarre vantaggio dal parallelismo per accelerare le attività che possono essere suddivise. Il parametro parallel_threads_per_cpu imposta il grado di parallelismo predefinito di un'istanza. |
| Memoria | Query rappresentativa | Note |
|---|---|---|
| Area globale programma | selezionare * da V$PGASTAT |
Il parametro pga_aggregate_target viene utilizzato per configurare la memoria per tutte le connessioni server dedicate. Le utility Linux, tra cui vmstat e top, possono essere utilizzate per monitorare l'uso della memoria. |
| Area globale sistema | selezionare * da v$sga |
I parametri SGA_MAX_SIZE e SGA_TARGET vengono utilizzati per configurare le funzioni di allocazione dinamica della memoria di Oracle Database 10 g. È possibile utilizzare altri parametri per allocare manualmente la memoria per scopi specifici. Di nuovo, sono disponibili varie utility Linux per monitorare l'allocazione della memoria. |
Script BASH
Gli script vengono chiamati come parte di un processo automatico (senza intervento umano) o vengono eseguiti in modo interattivo, con un utente che risponde ai prompt. Se si dispone dell'autorizzazione di esecuzione per un file, è possibile eseguirlo dalla riga di comando digitandone il nome. Se non si dispone dell'autorizzazione di esecuzione per il file ma si dispone dell'autorizzazione di lettura, è possibile eseguire lo script anteponendolo a sh.
Se uno script è progettato per essere eseguito senza l'input dell'utente, sono disponibili diverse opzioni per richiamarlo. È possibile eseguire uno script in background e continuare anche se si disconnette, immettendo un comando nel seguente formato:
nohup /path_to_dir/myscript_here.sh &
Questa operazione può risultare utile per l'esecuzione di script che richiedono molto tempo. Il comando at può essere utilizzato per eseguire uno script in futuro e cron può essere utilizzato per pianificare l'esecuzione degli script in modo ricorrente.
Gli esempi riportati di seguito illustrano gli aspetti essenziali di fornitura dell'output da visualizzare (utilizzando echo), looping, logica condizionale e assegnazione variabile.
print_args.sh. Gli argomenti sono parole a destra del nome di comando passate nello script. Per accedere al primo parametro, utilizzare la variabile $1. La variabile $0 contiene il nome dello script stesso. La variabile $# contiene il numero di argomenti nello script. Un modo pratico di iterare tutti i parametri passati implica l'uso di un loop while e del comando Shift. Questo comando consente di iterare tutti gli argomenti della lista di argomenti (anziché rimanere in un loop infinito).
while [ $# -ne 0 ]
do
echo $1
shift
done
Se uno script prende un nome file come argomento (o richiede un nome file) e il file verrà letto più avanti nello script, è consigliabile verificare se è accessibile e leggibile. Ad esempio, uno script di recupero che prevede la selezione di un file di controllo di cui è stato eseguito il backup potrebbe richiedere all'utente di effettuare una selezione che verrà utilizzata successivamente nello script per ripristinare il file.
if [ ! -r $1 ]; then # not exists and is readable
echo "File $1 does not exist or is not readable."
exit;
fi
La sequenza di caratteri
if [ ! -r $1 ];
è ciò che effettivamente esegue il test. Se il contenuto tra parentesi restituisce true, i comandi visualizzati tra if e fi verranno eseguiti. Il test effettivo viene visualizzato tra le parentesi. Il punto esclamativo serve a negare il test che stai facendo. L'opzione -r controlla se il file è leggibile. Ciò che viene testato in questo caso particolare è il primo argomento passato allo script. Utilizzando un test diverso (-d ), è possibile verificare se una determinata voce è una directory (vedere is_a_directory.sh).
do_continue.sh. Questo esempio è una semplice sequenza di comandi rappresentativa che può essere utilizzata per leggere l'input dell'utente per diversi scopi. Prima di eseguire un processo che può causare perdita di dati o altri risultati indesiderati in determinate condizioni che non sono determinabili dall'interno dello script, è consigliabile includere un prompt che chiede se l'utente desidera effettivamente che lo script esegua il comando o i comandi successivi. L'esempio seguente chiede se l'utente desidera continuare, legge una variabile denominata doContinue dalla riga di comando e valuta ciò che l'utente ha immesso. Se l'utente immette un testo diverso da "y", la persona viene informata che lo script è "quitting" ed esce senza eseguire il resto dello script dopo la fine del blocco if ( fi).
doContinue=n
echo -n "Do you really want to continue? (y/n) "
read doContinue
if [ "$doContinue" != "y" ]; then
echo "Quitting..."
exit
fi
È assolutamente necessario che solo gli utenti con le autorizzazioni e l'ambiente corretti eseguano uno script specificato. Un utile check-in di uno script verifica l'utente che sta tentando di eseguire lo script. Se si racchiude un comando all'interno dei caratteri apici inversi ( '), i risultati del comando possono essere restituiti allo script. L'esempio seguente recupera l'utente che ha eseguito il login utilizzando whoami e visualizza la data utilizzando il comando date più avanti nello script.
echo "You are logged in as ‘whoami‘";
if [ ‘whoami‘ != "oracle" ]; then
echo "Must be logged on as oracle to run this script."
exit
fi
echo "Running script at ‘date‘"
Gli script scritti per interagire con Oracle Database a volte richiedono l'immissione di informazioni riservate come la password di un database. Il comando stty –echo disattiva l'eco della schermata, in modo che le informazioni immesse per il successivo comando di lettura non vengano visualizzate sullo schermo. Dopo che le informazioni riservate sono state lette e memorizzate in una variabile ( pw nell'esempio seguente), la visualizzazione può essere riattivata con l'eco stty.
stty -echo
echo -n "Enter the database system password: "
read pw
stty echo
Script Oracle
Alcuni file risiedono in una posizione fissa per una determinata installazione di Oracle. È possibile determinare l'inventario Oracle visualizzando il file /etc/oraInst.loc. Il file /etc/oratab identifica i database (e altri programmi Oracle) installati sul server.
get_inv_location.sh. Questo script è un po' meno intuitivo degli esempi precedenti. Suddividendo lo script nei comandi del componente, si otterrà una migliore comprensione di ciò che viene realizzato.
Per determinare la posizione dell'inventario, i risultati del comando cat (che visualizza il contenuto del file) verranno reindirizzati a grep (utility che stampa le linee che corrispondono a un determinato motivo). Si stanno cercando linee che contengono il valore inventory_loc.
cat /etc/oraInst.loc | grep inventory_loc
Se sono presenti più ubicazioni di magazzino a causa di più installazioni, escludere le righe commentate con un numero . L'opzione -v esclude le righe contenenti il pattern specificato.
cat /etc/oraInst.loc |grep -v "#"|grep inventory_loc
Il risultato di questo comando avrà un aspetto simile al seguente:
inventory_loc=/u01/oraInventory
È possibile reindirizzare lo standard in un file utilizzando il reindirizzamento >. Se il file non esiste, viene creato. Se esiste, viene sovrascritto.
cat /etc/oraInst.loc|grep -v "#"|grep inventory_loc > tmp
Una volta che si dispone del record che indica l'ubicazione del magazzino, si desidera rimuovere la parte del record prima del segno di uguale. Questa volta si reindirizzano i risultati del comando cat a awk (un linguaggio di scansione di pattern e di elaborazione spesso usato per dividere i campi di lunghezza variabile), che essenzialmente tokenizza la stringa. L'opzione –F indica a awk di utilizzare il segno di uguale come delimitatore. Quindi si stampa il secondo token di questa stringa ( $2), che è tutto a destra del segno di uguale. Il risultato è la nostra posizione di inventario (/u01/oraInventory).
tmp cat | awk -F= '{print $2}'
Non esiste un motivo particolare per consentire al file temporaneo (tmp) di rimanere, in modo da poterlo rimuovere.
tmp rm
list_oracle_homes.sh. Se si desidera determinare ORACLE_HOME per un determinato database, sono disponibili diverse opzioni. È possibile eseguire il login come utente del database e echo la variabile $ORACLE_HOME. È inoltre possibile eseguire ricerche nel file /etc/oratab e selezionare il nome associato a una determinata istanza. Le voci di database in questo file sono nel formato
$ORACLE_SID:$ORACLE_HOME:<N|Y>:
Il one-liner seguente stampa il file ORACLE_HOME di una voce con il file ORACLE_SID di TESTDB:
cat /etc/oratab | awk -F: '{if ($1=="TESTDB") print $2 }'
Tuttavia, cosa succede se bisogna eseguire un'operazione su ogni ORACLE_HOME elencato nel file /etc/orainst? È possibile iterare un elenco di questo tipo utilizzando lo snippet di codice seguente.
dblist=‘cat /etc/oratab | grep -v "#" | awk -F: '{print $2 }'‘
for ohome in $dblist ; do
echo $ohome
done
La variabile dblist viene utilizzata come array. Questa variabile contiene tutti i percorsi ORACLE_HOME. Viene utilizzato un loop for per iterare l'elenco e ogni voce viene assegnata alla variabile ohome, quindi riscritta all'output standard.
search_log.sh. I prodotti Oracle generano una vasta gamma di log che ti suggeriamo di monitorare. L'alert log del database contiene messaggi critici per le operazioni del database. I file di log vengono generati anche quando i prodotti vengono installati o disinstallati e vengono applicate patch. Lo script seguente viene ripetuto su un file passato come argomento. Se vengono trovate righe contenenti ORA-, un messaggio e-mail viene inviato a un destinatario designato.
cat $1 | grep ORA- > alert.err
if [ ‘cat alert.err|wc -l‘ -gt 0 ]
then
mail -s "$0 $1 Errors" administrator@yourcompany.com < alert.err
fi
Il test specifico eseguito è il conteggio del numero di parole esistenti nel file alert.err, che viene scritto quando si esegue il reindirizzamento a alert.err. Se il conteggio delle parole ( wc) è maggiore di ( -gt) zero, il contenuto del blocco if verrà eseguito. In questo caso si utilizza mail (è possibile utilizzare anche send mail) per inviare un messaggio. Il titolo del messaggio contiene lo script eseguito ( $0), il nome del log in fase di ricerca ( $1) e le righe corrispondenti alla ricerca iniziale ( ORA-) come corpo del messaggio.
Le variabili ambientali, ad esempio ORACLE_HOME, ORACLE_BASE e ORACLE_SID, possono essere utilizzate per individuare le risorse che non si trovano in una posizione fissa nell'ambiente Linux. Se si amministra un'istanza dell'applicazione Oracle E-Business Suite 11i, sono disponibili numerose altre variabili ambientali che è possibile utilizzare per individuare le risorse. Queste includono APPL_TOP, TWO_TASK, CONTEXT_NAME e CONTEXT_FILE, per citarne alcune. Per visualizzare un elenco completo dell'ambiente in uso, eseguire il comando seguente ed esaminare il file risultante (myenv.txt):
env > myenv.txt
Varie combinazioni di queste variabili ambientali possono essere utilizzate come posizione di un file in fase di ricerca. Ad esempio, una posizione dell'alert log può essere designata come
$ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log
In base ai principi introdotti in questo script, è possibile scrivere e programmare un'esecuzione più ampia a intervalli periodici per cercare il contenuto dell'alert log (o di un altro file di interesse) e inviare un'e-mail in caso di errori. Quindi il contenuto del log può essere spostato in un altro file, in modo che solo i messaggi di errore più recenti vengano inviati via e-mail.
Script di Oracle Recovery Manager. Oracle Recovery Manager (RMAN) è una utility che può essere utilizzata per amministrare il backup e il recupero del database. In questo modo, l'amministrazione di più piattaforme può essere semplificata in quanto tutti gli script di backup possono essere scritti per essere eseguiti da RMAN, riducendo la quantità di codice specifico della piattaforma. RMAN può essere richiamato dal sistema operativo di base e passato uno script. Ad esempio, un backup a freddo (cold.sh) può essere costituito dallo script seguente:
#!/bin/bash
rman target / <<EOF
shutdown immediate;
startup mount;
backup spfile;
backup database;
alter database open;
delete noprompt obsolete;
quit;
EOF
La linea 1 indica che si sta utilizzando la shell bash. La riga 2 richiama Oracle Recovery Manager e specifica il login dell'utente del sistema operativo al database di destinazione (specificato nella variabile ambientale $ORACLE_SID). Il comando <<EOF riportato di seguito indica che i comandi successivi verranno passati a RMAN da elaborare. L'EOF sull'ultima riga indica che è stata raggiunta la fine della serie di comandi da passare a RMAN. RMAN viene quindi utilizzato per arrestare il database, avviare ed eseguire il MOUNT del database e continuare a eseguire il backup del file dei parametri del server e del contenuto del database. Il database viene quindi aperto. Tutti i backup precedenti a quelli specificati nel criterio di conservazione vengono quindi eliminati. Consultare la documentazione RMAN per creare un backup rilevante per le proprie situazioni.
I backup notturni vengono in genere pianificati ed eseguiti automaticamente. Lo script precedente potrebbe essere chiamato e il contenuto di uscita standard inviato a un indirizzo di posta elettronica con il seguente comando:
sh cold.sh | mail -s"Backup ‘date‘" administrator@yourcompany.com
È possibile eseguire altre utility Oracle anche dagli script shell. La utility tnsping può essere utilizzata per verificare se un determinato identificativo di connessione Oracle può contattare il listener. È possibile eseguire questa utility per verificare la presenza di problemi di connessione.
tnsping ptch04 |grep TNS-
Anche le esportazioni e le importazioni di database (tradizionali e Data Pump) sono buoni candidati per lo scripting di processi ripetuti.
Installazione del database. Molti dei passi coinvolti nell'impostazione di un database possono essere automatizzati. Prima di installare Oracle 10g su Linux, è necessario eseguire vari test per verificare la versione minima richiesta dei pacchetti e le impostazioni dei parametri kernel. È possibile eseguire una query sulla versione di un pacchetto utilizzando il comando rpm con l'opzione –q.
rpm -q compat-libstdc++
È possibile determinare vari aspetti del sistema guardando il file system /proc "virtual" o "pseudo". Non contiene file reali, ma piuttosto informazioni sul sistema runtime che possono essere visualizzate come se risiedessero nei file. Ad esempio, /proc/meminfo contiene informazioni sulla memoria per il sistema e grep MemTotal /proc/meminfo visualizza la memoria totale del sistema. Usando awk come in precedenza, è possibile isolare la quantità di memoria in kilobyte, utilizzando:
grep MemTotal /proc/meminfo | awk '{print $2}'
Tale comando potrebbe essere utilizzato nel contesto di uno script che farebbe confronti e rispondere di conseguenza (anche aggiornando il sistema stesso). Gli script di esempio 10gchecks_kernel.sh e 10gchecks.sh visualizzano le versioni e le impostazioni correnti e consigliate in base alla documentazione Oracle.
Monitoraggio del database. Il comando ps può essere utilizzato per segnalare lo stato del processo e per verificare se è in esecuzione un database, un listener, uno script o qualsiasi altro processo di interesse. Se si desidera elencare tutti i database attualmente in esecuzione su un server, è possibile eseguire il comando seguente:
echo "‘ps -ef | grep smon|grep -v grep|awk '{print $8}'| awk -F \"_\" '{print$3}'‘"
Anche se questo è funzionale, è un po' difficile da capire a prima vista. Il primo comando, ps (utilizzando le opzioni -ef per un elenco completo di tutti i processi), trova tutti i processi in esecuzione sul server. Il successivo, grep, cerca SMON (il processo in background di Oracle System Monitor), che indica che il database è in esecuzione. Si desidera rimuovere le voci che fanno riferimento al comando grep stesso in esecuzione. Utilizza quindi awk per individuare l'ottava colonna nell'elenco, che contiene il nome del processo di monitoraggio del sistema nel formato ora_smon_<oracle_sid>. L'ultima istanza di awk utilizza quindi il carattere di sottolineatura come delimitatore per cercare e stampare il nome del database proprietario del processo SMON. Il carattere di sottolineatura deve essere visualizzato tra virgolette e la barra rovesciata viene utilizzata prima di ognuna delle virgolette per sfuggire a tali virgolette (poiché l'intera stringa viene visualizzata tra virgolette doppie).
exec_sql.sh. Come accennato in precedenza, è possibile eseguire una query sul database da uno script shell a condizione che l'utente abbia accesso a sqlplus. L'esempio riportato di seguito restituisce un elenco (delimitato da spazio) di computer che attualmente gestiscono le sessioni nel database:
#!/bin/bash
output=‘sqlplus -s "/ as sysdba" <<EOF
set heading off feedback off verify off
select distinct machine from v\\$session;
exit
EOF
‘
echo $output
Questo script è simile allo script RMAN precedente in quanto si stanno inserendo comandi in un altro programma. Un collegamento autenticato del sistema operativo locale viene effettuato al database come sysdba. Per evitare che vengano restituiti messaggi estranei, questo script disattiva l'intestazione, il feedback e verifica le opzioni di SQL*Plus. La query viene eseguita e SQL*Plus viene chiuso.
Prendere nota della barra doppia prima del simbolo del dollaro nel nome della vista. Queste sono sequenze di escape richieste all'interno della stringa: la prima barra effettua l'escape alla seconda barra, che a sua volta lo fa al simbolo del dollaro. Di nuovo, non è perfetto, ma è funzionale.
Come accennato in precedenza, se si sta per scrivere qualcosa che richiede un ampio accesso al database, lo script shell non è l'opzione migliore. Potrebbe essere meglio riscrivere lo script in PL/SQL, Perl (che utilizza una sintassi simile a quella utilizzata negli script shell), Python, Java o un altro linguaggio di tua scelta.
Conclusione
Lo script shell può essere uno strumento efficace per automatizzare rapidamente le attività di amministrazione ripetitive e soggette a errori. Gli esempi in questo articolo forniscono un'introduzione alle possibilità disponibili ma sono tutt'altro che esaurienti. Ogni sistema presenta diverse peculiarità e punti deboli e una configurazione unica. Un amministratore svilupperà soluzioni uniche per soddisfare le esigenze del particolare sistema.
Casimir Saternos è un DBA certificato Oracle, IBM Certified Enterprise Developer e un programmatore Java certificato Sun basato che vive ad Allentown, Pa.