Il DBA (DataBase Administrator) utilizza statement SQL particolari per
estrarre le informazioni piu' interessanti sui DB che amministra.
Questa pagina raccoglie e descrive gli script SQL piu' utili ed interessanti per
la gestione di un database Oracle.
Oracle e' il piu' diffuso RDBMS commerciale ed il suo SQL e' molto potente.
Gli esempi riportati riguardano: Sessioni, Lock, Utilizzo di spazio, Performance, RAC, Data Guard, Exadata I/O, Oracle 12c (Heat Map), ...
Il documento e' volutamente breve e pratico con esempi funzionanti
di statement SQL.
Informazioni di dettaglio si possono trovare nella
relativa documentazione.
Oracle fornisce da sempre (e' stato il primo RDBMS commerciale) un SQL ricco di funzionalita'.
In particolare sono centinaia le viste di sistema raccolte in un Data Dictionary
molto completo. In generale i nomi delle viste sono: USER_ (per gli oggetti dell'utente),
ALL_ (per tutti gli oggetti disponibili all'utente), DBA_ (per tutti gli oggetti, ma riservata ai DBA).
Ad esempio la vista ALL_TABLES riporta tutte le tabelle accessibili all'utente che la utilizza.
Sempre sotto forma di vista sono disponibili informazioni sullo stato del sistema e dei processi
attivi.
Ad esempio la vista $VSESSION contiene le informazioni su tutte le sessioni connesse alla base dati.
Gli statement SQL a disposizione di un DBA Oracle sono quindi moltissimi... in questa pagina faremo una scelta su quelli piu' utili ed interessanti.
Una prima visione sull'utilizzo di una base dati e' quella delle connessioni presenti. Oracle fornisce informazioni sia sulle connessioni dei processi di sistema (background) che di quelli utente. Ecco come ottenere l'elenco delle sessioni presenti sulla base dati:
La selezione e' molto semplice ed utilizza un join tra la vista delle sessioni
e quella dei processi per ottenere informazioni anche sui processi di sistema
utilizzati.
Il lunghissimo decode() consente di estrarre il comando utilizzato e naturalmente
e' sempre piu' ampio per ogni versione di Oracle.
Gli oggetti sulla base dati vengono protetti dall'utilizzo concorrente in Oracle mediante la gestione dei lock. In qualche caso possono verificarsi blocchi dovuti a sessioni che non rilasciano i lock e non permettono la modifica dei dati ad altre sessioni. Ecco come individuare i lock sospensivi e come risolverli:
Nota: prima di ammazzare qualcuno... e' importante essere certi di quello che si sta facendo!
Oracle utilizza in modo molto sofisticato lo spazio sullo storage
preallocando gli oggetti ed ottimizzandone la memorizzazione.
Tutti gli oggetti vengono memorizzati su contenitori logici chiamati TABLESPACE
costituiti a loro volta dagli spazi fisici assegnati ai DATAFILE.
Nelle diverse versioni le modalita' si sono evolute adeguandosi
alle accresciute capacita' degli storage ed alle esigenze di
database sempre piu' grandi.
Per ottenere i dettagli delle allocazioni di spazio si possono
interrogare la vista DBA_EXTENTS che riporta le allocazioni di ogni singolo
oggetto e la vista DBA_FREE_SPACE che riporta gli spazi liberi.
Ecco un esempio:
Si potrebbe scrivere la query in modo piu' elegante... ma cosi' funziona su tutte le versioni di Oracle diffuse sulla terra (dalla 7 alla 12) [NdE La versione 7 e' del 1992, la versione 12 e' stata rilasciata a luglio 2013].
L'ottimizzazione delle performance e' il leitmotiv di ogni DBA.
I punti di vista sono moltissimi:
individuare gli statement SQL piu' pesanti,
ottimizzare i piani di esecuzione degli statement,
determinare eventuali bottleneck,
effettuare il tuning sui parametri di configurazione,
...
L'ottimizzatore di Oracle e' cost-based
[NdE per essere precisi...
il cost-based e' stato introdotto nella versione Oracle 7.0 (1992), dalla 8.0 (1997)
e' il metodo di default e nella 10.0 (2003) e' stato eliminato il RULE BASED]
e' quindi fondamentale il calcolo
delle statistiche sulle dimensioni delle tabelle e la selettivita' degli indici.
Quando le statistiche sono corrette l'ottimizzatore Oracle ottiene Plan
molto efficaci.
Ecco qualche query di esempio:
La prima query individua gli statement SQL attivi e li ordina per numero di accessi a disco.
Il numero di GET, usato nell'ordinamento della query, e' spesso il fattore determinante in una query;
ma vi sono altre colonne interessanti nella vista V$SQL da analizzare.
La seconda query riporta l'Hit Ratio della Buffer Cache.
Il valore indicato (90%) e' solo indicativo.
In molti casi (eg. OLTP) la percentuale ottimale di utilizzo della cache e' il 100%!
Nelle versioni piu' recenti la raccolta delle statistiche
necessarie all'ottimizzatore avviene in automatico (DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC)...
ma se serve analizzare uno schema l'esempio successivo indica come!
Da ultimo ecco come ottenere nella PLAN_TABLE il plan di Oracle di una select
[NdE ovviamente nell'esempio di query banale sara' un FULL TABLE SCAN].
La versione 10g di Oracle introduce diverse funzialita' di aiuto nell'ottimizzazione
delle performances.
L'AWR (Automatic Workload Repository) colleziona automaticamente le statistiche
di accesso [NdE differenti da quelle dell'ottimizzatore gia' presenti dalla versione 7.0],
l'ADDM (Automatic Database Diagnostic Monitor) determina eventuali problemi di performance
ed avvisa il DBA.
Cambia quindi il modo di analizzare le prestazioni su un database Oracle
e si possono utilizzare nuove tabelle/viste in SQL:
La prima statistica si basa determina gli eventi di maggior importanza per le prestazioni
del sistema analizzando le attese di tutti gli statement SQL.
La seconda... visualizza direttamente i consigli dell'ADDM!
Naturalmente sono consigli da utilizzare buonsenso.
Le altre query... non le ho ancora scelte, ma gia' ve ne sono a sufficienza!
Nell'architettura RAC piu' nodi accedono allo stesso storage in una configurazione cluster Active-Active garantendo agli utenti finali il massimo del livello di servizio.
Oltre alle normali viste V$ disponibili sui singoli nodi sono presenti una serie di viste GV$ che riportano l'andamento del sistema RAC al completo:
Le query riportate sono tre e riguardano aspetti diversi.
La prima query controlla i tempi di risposta della Global Cache
che deve rispondere in tempi brevissimi alle richieste dei nodi
(eg. 1/10 rispetto ad un disco).
La seconda query valuta l'overhead introdotto dal cluster.
Deve essere inferiore al 10% in una situazione normale.
L'ultima query valuta il bilanciamento del carico tra
i diversi nodi presenti.
L'analisi dei singoli nodi e la visione d'insieme ottenuta con queste query permettono di valutare ed eventualmente di effetture un tuning specifico per il RAC.
La configurazione di Oracle Data Guard permette di creare un sito di DR (Disaster Recovery) con RPO (Recovery Point Objective) e RTO (Recovery Time Objective) ottimali.
Naturalmente e' necessario controllare l'aggiornamento del sito secondario rispetto al sito primario. Ecco come:
La query utilizza la vista v$archived_log che e' disponibile anche in stato di MOUNT/RECOVER come si trova normalmente l'istanza secondaria.
Dopo l'acquisizione di Sun Oracle ha sviluppato una serie di sistemi ingegnerizzati per ottenere le massime prestazioni sul database (Eg. Exadata, ODA).
La configurazione di tali sistemi e' piu' semplice rispetto alla preparazione di un ambiente completo acquisendo da fornitori diversi i diversi componenti (server, storage, switch, connessioni di rete, ...) ma la gestione della base dati da parte di un DBA risulta sempre necessaria!
La query e' eseguibile dalla versione Oracle 11g ed e' significativa su un sistema Exadata (il modello di punta dell'offerta Oracle) in cui l'ottimizzatore puo' demandare le operazioni di I/O piu' pesanti alle celle (Cell Offload). Con le nuove colonne disponibili sulla V$SQL e' possibile determinare i risparmi ottenuti dai sistemi Exadata sull'I/O mediante l'accesso a celle dedicate per il reperimento dei dati.
L'evoluzione non si ferma... nella versione 12c sono disponibili nuove viste per l'amministratore!
Particolarmente interessante e' la Heat Map che consente di determinare i blocchi o
gli oggetti piu' acceduti (o meno) ed impostare politiche automatiche di storicizzazione dei dati
(ILM: Information Lifecycle Management).
Ecco una query di esempio (richiede l'impostazione del parametro HEAT_MAP=on):
Un'introduzione ad Oracle si trova in Oracle RDBMS.
L'evoluzione delle funzionalita' dell'RDBMS Oracle nel tempo e' stata notevole...
La storia delle versioni Oracle
negli ultimi 20 anni viene descritta in
C'era una volta...
Maggiori dettagli tecnici sulle diverse versioni di Oracle e le date
di rilascio di ogni versione sono riportate in
questo documento.
Il sito Oracle ufficiale
contiene tutta la documentazione ufficiale.
Volete leggere altre pagine come questa?
Provate qui!
Titolo: SQL4DBA - SQL per DBA Oracle
Livello: Esperto
Data:
15 Agosto 2013
Versione: 1.0.0 - 15 Agosto 2013
Autore: mail [AT] meo.bogliolo.name