II
-  progettazione del data warehouse; 
-  progettazione delle basi di dati multidimensionali; 
-  processo di ricerca delle informazioni. 
 
Oggi, sempre di più le decisioni vengono prese servendosi di sofisticata 
intelligence dei mercati.  
Oracle8i cambia il modo di gestire e accedere alle informazioni al fine di 
fornire una gestione dei dati efficiente, affidabile e sicura per l'elaborazione di 
volumi elevati di transazioni in linea (OLTP, On-Line Transactional Processing) e 
le applicazioni di DataWarehouse ad elevata frequenza di query.  
In particolare per il Data Warehouse, Oracle8i dispone di funzioni sofisticate di 
gestione riepilogativa con cui memorizzare le entità più comunemente interrogate, 
in modo da ridurre sensibilmente i tempi di elaborazione delle query.  
Infatti, tra le operazioni più comuni in un sistema di data warehousing  vi sono 
quelle che ritornano dati aggregati come totali, medie o similari; tali interrogazioni 
al DB generano mediamente un elevato overhead nel processamento dei dati p 
ortando a tempi di risposta inaccettabili e cali nelle prestazioni dell'intero sistema. 
 Per evitare che questa situazione si presenti ogni volta che si riesegue una 
query di questo tipo, se ne memorizzano i risultati in tabelle aggregate dette viste 
materializzate che in combinata con il tool di Summery Management possono 
essere aggiornate, modificate e sottoposte ad un refresh automatico. 
 Si introduce inoltre il concetto di dimensione che rappresenta il modo in cui 
Oracle porta a conoscenza dell’ottimizzatore il legame gerarchico-funzionale dei 
dati; l’ottimizzatore si arricchisce dunque di ‘intelligenza’ avendo un quadro del 
modello E-R sottostante. 
La vera novità consiste però in una potente tecnologia di trasformazione delle 
query che integra tutte queste componenti nella funzionalità di query-rewrite: 
quando un utente richiede pesanti operazioni sulle tabelle (come join e funzioni 
aggregate), se i dati richiesti sono già disponibili in alcune delle viste materializzate 
allora l’ottimizzatore può riscrivere la query sottoposta, in maniera del tutto 
trasparente all’utente, per velocizzarne l’esecuzione. 
L’ottimizzatore usa diversi metodi per riscrivere una query che permettono 
di utilizzare le viste materializzate per recuperare anche solo una parte dei dati 
richiesti o per recuperarli, eventualmente, anche in formato diverso al fine di 
ripristinare successivamente quello desiderato attraverso la conoscenza fornita dalle 
dimensioni.  
 III
Si deduce quindi che sebbene non sia obbligatorio definire delle dimensioni 
in un data warehousing, esse aiutano l’ottimizzatore a capire lo schema e la 
relazione tra i dati per riscrivere ed eseguire query sempre più complesse nel minor 
tempo possibile. 
Si espande quindi la funzionalità di fascia alta di Oracle8 offrendo 
prestazioni più elevate e maggiore facilità di gestione introducendo funzioni più 
ricche di analisi, nonché nuovi livelli di trasparenza per l'ottimizzazione delle query 
e l’uso di aggregate predefinite. Tali funzioni vengono utilizzate in maniera 
trasparente dai tool Oracle Business Intelligence, Oracle Discoverer e prodotti 
Express, onde garantire prestazioni più elevate e migliore produttività, a vantaggio 
di un migliore e più rapido supporto decisionale. 
Tutte queste nuove feature,  in modo particolare il query-rewrite, sono state 
implementate e testate in un ambiente reale di Internal Auditing per la creazione di 
un datawarehouse, sia attraverso la componente grafica del Discoverer che dalla 
linea di comando del Worksheet. 
Con l’ausilio del tool SQL Trace Facility è stato possibile monitorare 
l’esecuzione di alcune query sul database in presenza o meno delle relative viste 
materializzate con risultati più che soddisfacenti. 
Si è osservato come l’utilizzo della vista materializzata da parte 
dell’ottimizzatore riduca fortemente  
- itempi di utilizzo di CPU fino a circa il 60%; 
- i tempi di elapsed di circa il 95%; 
- il numero di accessi a disco per il 98.4%; 
- il numero di buffer impegnati in operazioni di SELECT  
il tutto a fronte di un reperimento di 89.474 record! 
Molte le novità anche a livello di programmazione PL, tra cui 
l’introduzione del concetto di transazione autonoma, la costruzione di indici basati 
su funzioni, il binding di un’intera collezione di dati in un’unica operazione detta 
‘bulk bind’, mentre l’SQL si arricchisce di utili funzioni di aggregazione tra i dati 
quali CUBE e ROLLUP. 
 
  
 
 
 
 
 
 
Finalmente giunta al traguardo di questo mio percorso formativo, lungo e 
impegnativo, voglio con queste poche righe dedicare un pensiero a tutti coloro che 
mi hanno accompagnata in questo cammino, contribuendo, nel bene o nel male, ad 
arricchire le mie esperienze di vita e a fortificare il mio carattere. 
 Ringrazio il mio relatore per i suoi consigli e la sua disponibilità, l’Ing. 
Franco Chiesa, Renzo Cravero,  Adriano Policastro per la loro considerazione, gli 
amici della CCS, il mio tutor aziendale dott. Carlo Masera per avermi seguita in 
tutto questo periodo e per gli utili suggerimenti, e tutti coloro che hanno permesso 
lo svolgimento di questo lavoro di tesi nonché contribuito alla mia crescita 
professionale. 
 Voglio ricordare i miei amici Alessandra, Davide D., Davide Z., Domenico, 
Enrico, Flora e Leonardo, Luca, Luca D., Marco P., Massimo, Pe’, Salvo, Silvia, 
Stella, Titti per le risate e l’allegria e tutti coloro che hanno condiviso con me 
questa esperienza chiamata ‘Politecnico’. 
 Un grazie particolare lo rivolgo a Riccardo che tanto ha significato per me 
in questi anni, presente nella maggiorparte del tempo nella mia vita di tutti i giorni. 
 A mio padre e a mia madre che hanno creduto in me, appoggiando, 
sostenendo e incoraggiando in ogni momento le mie iniziative, a loro dico  
‘grazie di cuore’. 
 
 
Anna Gasparo. 
1 
 
 
 
 
 
 
 
 
1.1 Introduzione 
 
 
Oracle è un sistema complesso costituito da una base di dati di tipo relazionale e 
da un insieme di programmi software in cui è possibile distinguere un kernel e i 
tool.  
Il kernel è da considerarsi come una sorta di filtro tra le richieste utente 
(rivolte in linguaggio SQL) e i dati memorizzati nella base di dati. 
I tool sono invece strumenti di aiuto per la creazione di applicazioni e per la 
gestione del database stesso. 
Il database relazionale Oracle è quindi definibile come un insieme di tavole 
contenenti le informazioni di interesse la cui individuazione avviene riferendosi 
alle caratteristiche logiche e non fisiche dei dati stessi. 
Infatti, non occorrerà riferirsi a puntatori e indirizzi fisici ma sarà sufficiente 
individuare il nome della tavola e delle sue colonne; ciò garantisce la totale 
indipendenza delle applicazioni dai dati e dalla loro locazione fisica. 
Una vasta serie di operatori consente inoltre di combinare i dati in vario  modo 
e di navigare agevolmente tra i dati di più tabelle. 
Ovviamente, in Oracle oltre alle tavole esistono altri tipi di oggetti quali, ad 
esempio, indici e cluster (il cui scopo è quello di velocizzare la ricerca dei dati), 
rollback segment (il cui scopo è quello di memorizzare i dati nella versione 
precedente la modifica). 
 
1 – Architettura e struttura fisica di Oracle 
 
 2
Tra le caratteristiche tecniche di Oracle ritroviamo: 
- supporto efficiente della multiutenza: cioè utenti diversi possono 
condividere i dati con la sicurezza della consistenza in lettura, ottenuta 
senza sacrificare le qualità delle performance. Inoltre il lock a livello di 
riga consente l’aggiornamento concorrente di record diversi della stessa 
tavola da parte di processi utente differenti. 
- La consistenza in lettura garantisce: 
1. la possibilità di leggere i dati in uno stato immutato per tutta la 
durata dell’esecuzione della lettura stessa, nonostante le 
operazioni di modifica che possono aver luogo su quei dati; 
2. la possibilità di leggere i dati del database senza dover 
attendere il termine di operazioni di manipolazione sugli stessi; 
-    L’accesso controllato ai dati è garantito attraverso la creazione di utenti 
ORACLE con precisi privilegi. 
 Inoltre in ogni database Oracle esiste sempre il cosidetto Data Dictionary, 
ovvero un insieme di tavole, da usare in sola lettura, contenente informazioni di 
varia natura circa il database stesso (nomi di tavole e colonne esistenti nel 
database, username e privilegi degli utenti, spazi liberi e allocati nel database, 
ecc.).  
 In realtà il dizionario dati è costituito anche da molte viste (cioè tavole 
logiche che proiettano delle combinazioni di dati estratti dalle tabelle vere e 
proprie allo scopo di migliorarne l’interpretazione o di restringere l’accesso ai 
dati stessi). Una parte di tali viste è visibile solo al DBA. 
 
 
 
 
 
 
 
 
 
 
 
 
 
1 – Architettura e struttura fisica di Oracle 
 
 3
 
1.2 Componenti dell’architettura 
 
La struttura fisica di Oracle si compone di tre parti fondamentali [1]: 
- Strutture di memoria per la memorizzazione di dati e applicativi: Oracle 
richede alcune strutture di memoria quali la SGA, la PGA e le context 
aree. La System Global Area (SGA) contiene dati condivisi tra tutti gli 
utenti e le informazioni di controllo per il database; la Program Global 
Area (PGA) contiene informazioni di controllo per un singolo processo 
utente; la context area è una porzione di memoria che contiene uno 
statement SQL. 
- i processi di background: gestiscono il database stesso; alcuni di questi 
hanno importanza vitale per il DB. 
- i files: un database Oracle si compone di uno o più file di sistema 
operativo. Questi file contengono tutti i dati del database e non occorre 
che siano contigui su disco.  
 
 
1.2.1 La memoria SGA 
 
Esistono due tipi di memoria in Oracle: una condivisa da tutti gli utenti ed una 
dedicata per ogni singolo utente. 
L’SGA (System Global Area) e’ la regione di memoria condivisa da tutti gli 
utenti connessi al database che contiene dati e informazioni di controllo sull’istanza 
RDBMS; si compone delle seguenti parti: 
 
 
Fig. 1.1 System Global Area 
 
1 – Architettura e struttura fisica di Oracle 
 
 4
• La Shared Pool Area composta da : 
Fig. 1.2   Shared Pool Area 
 
Data Dictionary : colleziona informazioni nel dizionario dati del motore 
(nomi di tutte le tavole e le viste usate da DB, nomi di tutte le colonne con 
relativi datatype, privilegi di tutti gli utenti Oracle). 
Shared SQL Areas: contiene informazioni usate per l’esecuzione dei singoli 
statement SQL (testi degli statement SQL, PL/SQL e relativi piani di 
esecuzione,…); 
L’esecuzione di uno statement SQL e si compone delle seguenti parti 
principali:        
      -     analisi sintattica; 
- analisi della nomenclatura tramite il Data  
          Dictionary; 
- controllo dei privilegi per l’accesso ai dati; 
- individuazione del piano di esecuzione tramite  
          l’ottimizzatore delle query. 
I processi server utilizzano l’area condivisa di Pool nella SGA per 
parsificare ed eseguire lo statement. 
Una richiesta di esecuzione di uno statement SQL corrisponde ad una 
chiamata di parse inoltrata al server durante la quale esso procede ad 
analizzarne la sintassi, la nomenclatura e i privilegi. Successivamente controlla 
le aree SQL condivisa nella memoria di Pool; ogni area di questo tipo contiene 
un unico statement SQL già parsificato. 
Fig. 1.3 Operazioni di parse 
1 – Architettura e struttura fisica di Oracle 
 
 5
Il processo server cerca nelle aree SQL uno statement SQL parsificato 
identico (in termini anche di spazi tra le parole e di case sensitive) a quello 
che vuole gestire e se esiste lo esegue immediatamente, altrimenti deve 
parsificarlo e creare una nuova area SQL condivisa. 
Dopo aver eseguito lo statement SQL, il processo server legge i dati 
per l’operazione richiesta dal Buffer Cache e ritorna i risultati direttamente 
all’utente (nel caso di ambiente dedicato) o alla coda di risposta del 
dispatcher (nel caso di ambiente multi-threaded). 
 
 
• Il Data Buffer e’ l’area tampone per la migrazione dei dati veri e propri gestito 
secondo l’algoritmo LRU; rappresenta la parte di memoria a cui destino più 
spazio. 
 
 
Fig. 1.4 Data Buffer Cache 
 
 
 
• Il Redo Logo Buffer  tiene traccia delle attività svolte, gestito secondo una 
struttura a coda circolare. 
 
Fig. 1.5 Redo Log Buffer 
 
 
1 – Architettura e struttura fisica di Oracle 
 
 6
1.2.2   I processi di background 
 
I processi di background scambiano informazioni con la System Global Area per 
gestire e ottimizzare le performance  del DB [1]. 
In Oracle esistono più processi di background, di cui quattro obbligatori per la 
sua esistenza: 
• DBWR (Database Writer)  : Obbligatorio. Gestisce  il Buffer Cache in modo  
che i processi utenti possano sempre trovare buffer 
liberi. Riporta i buffer modificati sui data files e 
aggiorna il control file; 
 
• LGWR (Log Writer)           : Obbligatorio. Scarica le informazioni contenute 
nel Log Buffer sugli on-line log files ogni quanto 
di  tempo (per saturazione o in base alla volontà 
dell’amministratore del sistema). 
 
• Smon (System Monitor)     : Obbligatorio. Lavora in collaborazione con il  
Log Buffer (se ancora vivo) e con gli on-line Log 
files (per problemi   più gravi) per ripristinare il 
sistema in caso di crash.  
 
• Pmon (Process Monitor)    : Obbligatorio. Lavora in collaborazione con il  
Log Buffer (se ancora vivo) e con gli on-line Log 
files (per problemi   più gravi) per ripristinare il 
sistema in caso di crash. 
Esegue il rollback delle transazioni non 
committate e gestisce il rilascio delle risorse 
detenute dal processo che ha subito il failure. 
 
• ARCH (Archivier)   : Archivia i file di redo log on-line  saturi per  
     usarli in caso di recovery. 
 
• LCKn     : Usato in ambiente Parallel Server per la gestione  
    dei lock dei processi. 
• CKPT      : Aggiorna le intestazioni dei file del database  
1 – Architettura e struttura fisica di Oracle 
 
 7
dopo un checkpoint; se tale processo non è 
configurato se ne occupa il Log Writer; 
 
• SNPn    : Usato in ambiente distribuito per la gestione  
   degli Snapshot (repliche di tabelle); 
 
 
 
Fig. 1.6 Processi di background 
 
• USER Process (lato Client) : Quando un utente si connette al database viene  
creato automaticamente un processo utente per 
l’esecuzione degli applicativi; gli utenti 
comunicano  con il DB attraverso un processo 
Server a cui vengono passati gli statement SQL . 
Il processo User attende dunque i risultati e li 
gestisce; 
• SERVER Process                 : Parsifica gli statement SQL, li esegue, legge i  
blocchi di dati da disco nella SGA ed invia i 
risultati al processo USER. 
 
  
                            Fig. 1.7 Processo User e Server 
 
 
1 – Architettura e struttura fisica di Oracle 
 
 8
1.2.3   I file 
 
Oracle utilizza i seguenti files che formano il database del sistema: 
• Data files               :   contengono tutti i dati organizzati in strutture logiche  
      come indici e tabelle;  
 
• On-line Log Files   :  ogni DB deve essere composto di almeno due gruppi di  
on-line log files; essi servono a memorizzare  tutte le 
modifiche apportate ai dati (backup dei dati in memoria). 
Se ne mantengono più copie per prevenire una situazione 
di failure e la decisione sul numero di gruppi da 
mantenere spetta al DBA. 
Quando si apre il DB vengono aperti anche questi files, 
per default almeno due gruppi con due membri ognuno. 
 
• Archived Log Files:   usato per l’archiviazione dei files di log. 
 
• Control file             :   ne esiste uno e contiene informazioni vitali per il  
database (struttura, nome, dimensione e locazione di ogni 
data file e di ogni redo log file). 
Per motivi di sicurezza viene clonato e le copie 
mantenute su dischi diversi; la scelta sul numero di copie 
e sulla loro locazione spetta ovviamente al DBA. Oracle 
permette di aprire ed aggiornare concorrentemente le 
diverse copie del control file (detti files multiplexati o di 
mirroring). 
Creato automaticamente quando il DBA usa il comando 
CREATE DATABASE, non può essere successivamente 
editato. 
Utilizzato per l’avvio ed il recovery del DB. 
1 – Architettura e struttura fisica di Oracle 
 
 9
 
Fig. 1.8 Architettura Oracle 
 
L’insieme dell’area di SGA + i processi di background formano la cosidetta 
ISTANZA di Oracle (motore), mentre i data files rappresentano il database su cui 
lavorare.  
Si potrebbe fare la seguente analogia: l’istanza Oracle è l’equivalente di un 
motore per una macchina; senza di esso non si potrebbe fare nulla. Come per il 
motore esistono delle specifiche sulla potenza anche l’istanza è caratterizzabile 
attraverso dei parametri di controllo presenti nel parameter file init.ora, anch’esso 
facente parte dell’istanza Oracle. 
 Quando Oracla esegue lo startup di un’istanza, va a leggere tale file per 
configurarla [1]. 
 Esso stabilisce ad esempio: 
 
- la dimensione della SGA ed il numero di buffer in essa presenti; 
- identifica il control file per lo startup; 
- il numero di utenti concorrenti che possono accedere al database; 
- il numero di transazioni concorrenti che il sistema può 
processare. 
- può essere personalizzato. 
 
 
 
 
 
 
 
1 – Architettura e struttura fisica di Oracle 
 
 10
1.3 Tablespace, data file ed extent. 
 
Il Sistema Operativo organizza i dati in strutture dette data files, mentre Oracle  
raggruppa i data file  in strutture chiamate TABLESPACES, cioe’ in strutture 
logiche non visibili al Sistema Operativo.  
 
 
Fig. 1.9 Struttura logica e fisica di un database Oracle 
 
Oracle vede il DB sia dal punto di vista logico (in termini di tablespaces) che 
dal punto di vista fisico (in termini di data file). 
Un DB ha uno o più tablespaces ad esso associato, ognuno di quali consta di 
almeno un data file. 
 
 
Fig. 1.10  Gestione del DB in tablespace 
 
1 – Architettura e struttura fisica di Oracle 
 
 11
Quando si crea un database, Oracle crea automaticamente una tablespace 
SYSYEM contenente uno o più data file; System contiene informazioni sugli 
statemente PL/SQL ed il Data Dictionary per cui deve essere sempre  on-line. 
Fig. 1.11 Tablespace System 
 
Poiché il S.O. riconosce solo datafile, il DBA crea sia il tablespace che il 
datafile nello stesso comando. 
I tablespace permettono di gestire il database e lo spazio di sistema 
controllandone lo spazio, allocando nuovi datafile; inoltre possono essere portati 
nello stato off-line per scopi di backup o recovery. 
 Le strutture di base utilizzate in un database sono i blocchi e gli extent per 
contenere gli oggetti (o segmenti) memorizzati nei datafile. Al momento della 
creazione di un datafile o di un oggetto se ne specifica la dimensione. 
Fig. 1.12  Blocchi ed extents 
 
 L’unità più piccola di memorizzazione è ovviamente il blocco, la cui 
dimensione è definita da DBA al momento della creazione del database.  
     
Fig. 1.13  Organizzazione di un blocco Oracle