Un server Oracle è rappresentato fondamentalmente da due strutture, il database e l'istanza. Con il termine database (d'ora in poi DB) si indicano i file fisici in cui sono memorizzati i dati, mentre per istanza si intende l'insieme delle aree di memoria e dei processi di background necessari ad accedere ai dati, ovvero al DB.
L'architettura del server è complessa: ogni area di memoria nell'istanza contiene dati che non sono contenuti in altre e i processi di background hanno compiti ben precisi, tutti diversi fra loro.
Ogni DB deve obbligatoriamente fare riferimento almeno ad un'istanza, è anche possibile avere più di un'istanza per database, ma nella nostra guida faremo sempre riferimento a database a singola istanza.
Ciascun DB consiste di strutture logiche di memorizzazione, per immagazzinare e gestire i dati, (tabelle, indici, etc.) e di strutture fisiche di memorizzazione che contengono le strutture logiche.
I servizi offerti dalle strutture logiche del server sono indipendenti dalle strutture fisiche che le contengono. Questo perché le strutture logiche possano essere progettate nello stesso modo indipendentemente dall'hardware e dal sistema operativo impiegati.
Quindi sia che abbiamo un'installazione di server Oracle su sistema operativo Microsoft, Linux o Solaris non troveremmo alcuna differenza nella progettazione delle strutture logiche di memorizzazione.
Strutture logiche di memorizzazione
Tablespace
Al vertice della scala gerarchica troviamo i Tablespace, strutture che raggruppano, a loro volta, quelle di livello più basso. È ammissibile suddividere i dati in differenti tablespace in base ad uno specifico significato logico dettato dalla nostra applicazione che interagirà con il database. Per esempio si può creare un tablespace per ciascun utente che andrà a memorizzare propri dati nel database.
Questa suddivisione logica ha l'enorme vantaggio di consentire l'amministrazione di una porzione limitata del DB, ovvero di un tablespace, senza intaccare la funzionalità delle parti rimanenti. Ogni database deve avere uno o più tablespace. Come requisito minimo per la creazione di un DB Oracle crea sempre un tablespace di sistema, denominato SYSTEM
.
Block
Un blocco dati è la più piccola unità di memorizzazione in Oracle, pertanto indivisibile, e corrisponde ad un numero di byte scelto dal DBA durante la creazione del database. È sempre multiplo della capacità del blocco usato dal sistema operativo su cui si opera. Per approfondire possiamo consultare la documentazione alla voce DB_BLOCK_SIZE
.
Extent
È composto di un numero specifico di blocchi contigui di dati (block).
Segment
È formato da un insieme di extent. Ne sono un esempio le tabelle o gli indici. Ogni qualvolta si crea un segment Oracle alloca al suo interno almeno un extent che, a sua volta, contiene almeno un block. Tutto questo è sempre deciso dal DBA. Un segment può essere associato esclusivamente ad un tablespace.
Strutture fisiche di memorizzazione
Data file
File che contengono tutti i dati del DB. Ogni database Oracle deve avere uno o più data file. Ciascun data file è associato esclusivamente ad un tablespace, ma un tablespace può essere formato anche da più di un data file. Ne esiste sicuramente almeno uno per il tablespace SYSTEM.
Redo log file
Registrano tutte le modifiche occorse ai dati. Ogni DB possiede almeno due file di redo log, perché Oracle scrive in questi file in maniera circolare: quando un file di redo log è pieno allora Oracle scrive in quello successivo, quando l'ultimo file di redo log è pieno allora Oracle ricomincia dal primo, assicurandosi però di memorizzare le informazioni nei data file prima di sovrascriverle.
Se una qualsiasi anomalia non permette la scrittura delle modifiche occorse al database nei rispettivi data file, allora possiamo tranquillamente ottenere tali modifiche dai redo log file. Le modifiche ai dati, pertanto, non sono mai perse.
I redo log file rappresentano la cronologia delle modifiche ai dati e sono di vitale importanza per l'integrità del DB. Oracle permette di avere più di una copia per ciascun redo log file: questa importante caratteristica è denominata multiplexing dei redo log file.
Control file
Ogni database ha almeno un control file che contiene informazioni circa la struttura fisica del DB, ovvero il nome, la data e l'ora di creazione e il percorso completo di ciascun data file e redo log file. È di vitale importanza e si consiglia di configurarne più di una copia: anche in questo caso parleremo di multiplexing di control file.
Aree di memoria in Oracle
Le aree di memoria di un server Oracle sono usate per contenere i dati, le informazioni del dizionario dei dati, i comandi SQL, il codice PL/SQL e tanto altro ancora. Tali aree sono allocate nell'istanza Oracle ogni qualvolta questa è fatta partire e deallocata, vale a dire rilasciata, quando la stessa è "terminata".
Le due maggiori strutture di memoria sono la System Global Area (SGA) e la Program Global Area (PGA), quest'ultima non sarà trattata in questa guida.
System Global Area
È un'area di memoria condivisa, il che significa che tutti gli utenti del DB ne condividono le informazioni. È composta a sua volta di più aree di memoria ed ha uno spazio allocato all'avvio di un'istanza definito dal parametro SGA_MAX_SIZE
(consultare la documentazione per maggiori dettagli).
L'SGA e i processi di background formano l'istanza Oracle. Come si può vedere in figura 3 quest'area è formata dal Database Buffer Cache, dal Redo Log Buffer, dallo Shared Pool, dal Large Pool e dal Java Pool. Le ultime due sono opzionali mentre le altre sono obbligatorie per ciascuna istanza.
I processi di background di Oracle
Un processo è un meccanismo usato dal sistema operativo per eseguire alcune attività. Oracle inizializza diversi processi di background per ogni istanza. Nelle prossime lezioni vedremo come avvianre una e come teminarla a piacimento. Ogni processo di background è responsabile nel portare a termine specifici compiti.
Non tutti i processi sono presenti in un'istanza Oracle: la maggior parte di essi sono obbligatori, la presenza di altri dipende dal tipo di architettura Oracle desiderata. Sono processi di background il Database Writer (DBWn), il Log Writer (LGWR), il Checkpoint (CKPT), il System Monitor (SMON), il Process Monitor (PMON), l'Archiver (ARCn), il Recoverer (RECO), il Dispatcher (Dnnn) e lo Shared Server (Snnn).