Oracle e' il DBMS relazionale commerciale piu' diffuso al mondo. In questa paginetta vediamo le diverse fasi di avvio.
Questa paginetta contiene dettagli tecnici utili ai DBA Oracle
e fa riferimento alle piu' recenti versioni disponibili on-premises
su unix/linux.
Per un introduzione sul database Oracle si puo' leggere
questo documento.
Per potersi connettere ed operare con l'RDBMS Oracle e' necessario che sia attivo e che sia attivo il servizio di rete per raggiungerlo.
Per attivare un'istanza Oracle il comando da utilizzare e':
$ sqlplus / as sysdba SQL> startup;E' anche necessario attivare il listener, che consente l'accesso dai client in rete, con:
$ lsnrctl start
Spesso questi comandi sono agganciati ad un servizio e vengono lanciati automaticamente all'avvio di un sistema.
Tutto qui? no!
Le fasi di avvio di una base dati Oracle in realta' sono un poco piu' complesse;
conoscere le fasi di avvio e' necessario in caso di riconfigurazioni della base dati
o per effettuare il recupero di dati.
Ma prima di entrare nei dettagli e' necessario vedere l'architettura della base dati Oracle!
L'architettura dell'RDBMS Oracle presenta una certa complessita':
vi sono una serie di processi di sistema
che si occupano ciascuno di un compito specifico (eg. la scrittura dei dati,
il controllo dei processi, l'esecuzione di job, la scrittura dei log, l'archiviazione, ...).
Ad ogni connessione utente viene inoltre lanciato un processo dedicato
che esegue l'SQL richiesto dall'utente/applicazione.
Con il passare delle versioni di Oracle il numero di processi di sistema (background o shadow)
e' sempre cresciuto.
Dalla versione 12c e' possibile ospitare piu' database (PDB: Pluggable Database)
all'interno dello stesso container... ed il numero di processi di background
e' piuttosto elevato (circa 40 processi).
I vari processi condividono un'area di memoria, implementata come
Shared Memory, denominata SGA. La SGA (System Global Area) mantiene i buffer
dei dati, l'elenco dei lock, la cache delle strutture della base dati, ...
Per l'accesso in Client-Server viene utilizzato il processo listener
che crea una processo dedicato per ogni Client. Se il numero di Client
e' molto elevato e' possibile sfruttare la tecnica dell'MTS
(Multi Threaded Server) che sfrutta un pool di processi per le diverse
sessioni.
Oracle utilizza una serie di file, di cui ora elenchiamo i principali:
I file possono essere ospitati su normali file system del sistema operativo o sull'ASM. La struttura interna dei datafile e' molto complessa poiche' sono molteplici le strutture di memorizzazione che Oracle utilizza. In generale Oracle privilegia la preallocazione degli spazi per costruire strutture di accesso ai dati ottimizzate.
La gestione delle transazioni e' molto efficiente ed affidabile con l'RDBMS Oracle. Per implementarla Oracle utilizza diverse tecniche. Quando deve essere effettuata una modifica su un dato Oracle salva il contenuto del blocco che lo contiene su un segmento di rollback e quindi effettua la modifica sul dato. In tal modo e' sempre possibile effettuare un rollback della transazione in corso. Quando la transazione viene confermata il segmento di rollback viene segnato come libero ed il dato e' definitivamente confermato. I segmenti di rollback sono mantenuti sui datafile e la loro gestione, via via con le diverse versioni di Oracle, e' divenuta sempre piu' sofisticata ed automatizzata.
Per migliorare le prestazioni Oracle utilizza una cache in memoria ed effettua in modo periodico (o quando richiesto dal commit di una transazione) l'allineamento sui dischi. Ogni attivita' di scrittura sui dischi e' riportata sui file di log in modo sincrono al commit delle transazioni. I file di log vengono utilizzati in modo circolare, quindi sono periodicamente ricoperti. Per mantenere la "storia" delle transazioni avvenute su un database e' possibile attivare il log archiving. Con il log archiving attivo quando un file di redo log e' stato completato viene salvato sulla directory definita dal DBA con una numerazione progressiva. Il log archiving permette il point in time recovery ed il backup a caldo. In generale Oracle non effettua il mirroring dei data file: l'implementazione a livello di RDBMS sarebbe infatti inefficiente in termini prestazionali e di occupazione di spazio. Tuttavia Oracle mantiene in mirroring alcune strutture di limitate dimensioni molto importanti per il suo funzionamento come i Control File ed i Redo Log.
L'avvio di Oracle avviene in fasi diverse che e' necessario
conoscere in caso di riconfigurazioni o di attivita' di recupero.
Ecco le fasi di avvio di Oracle:
Per poter avviare una base dati Oracle
l'installazione deve essere stata effettuata correttamente,
deve essere utilizzato un utente di sistema operativo
diverso dall'amministratore root (spesso si utilizza l'utente di sistema oracle),
il PATH deve contenere la directory degli eseguibili Oracle
e l'LD_LIBRARY_PATH deve indirizzare le librerie dinamiche Oracle,
debbono essere impostate correttamente le variabili
ORACLE_HOME, ORACLE_SID.
Il controllo si effettua facilmente con comandi come env, ls, ...
Nella fase di SHUTDOWN non vi deve essere alcun processo o segmento di moria attivo.
Il controllo che non vi sia nulla di attivo si effettua facilmente con
ps -efa | grep ora, ipcs -a, ...
I passi che Oracle esegue per entrare in fase di NOMOUNT sono diversi.
Viene cercato il file di parametri nella directory di default,
se presente viene utilizzato l'SPFILE altrimenti il PFILE.
Sulla base dei parametri presenti viene allocata la SGA
ed attivati i processi di background come: SMON, PMON e LGWR.
Vengono aperti e scritti i file di log e di trace.
Le operative che e' possibile svolgere con un database in NOMOUNT
non sono molte. Ma e' ad esempio possibile creare nuovi control file
quando si vuole clonare un'istanza.
I passi che Oracle esegue per entrare in fase di MOUNT sono diversi.
Vengono aperti e controllati i control file, quindi con i riferimenti trovati
vengono individuati i datafile e gli online redo log file.
Con una base dati aperta in modalita' di MOUNT vengono tipicamente
eseguite tutte le attivita' di recover del database.
I passi che Oracle esegue per entrare in fase di OPEN sono diversi.
Vengono aperti tutti gli online datafile, quindi viene selezionato ed aperto l'undo tablespace,
infine vengono aperti gli online redo log file. Oracle controlla l'allineamento di ogni file con l'SCN.
Se la base dati era stata chiusa correttamente non sono necessarie operazioni
ma se il databse era stato chiuso con un abort o il sistema ospite era caduto
debbono prima essere applicate ai datafile tutte le modifiche presenti sui redo file (rollforward),
quindi debbono essere cancellate le operazioni che non hanno ricevuto un commit (rollback).
Quando tutto e' terminato correttamente la base dati viene aperta per le normali operazioni.
Per spegnere un'istanza Oracle il comando da utilizzare e':
$ sqlplus / as sysdba SQL> shutdown immediate;
Tipicamente si utilizza la clausola immediate per non attendere la disconnessione di tutte le sessioni connesse alla base dati. In casi piu' rari, ad esempio quando la clausola immediate non e' sufficiente, si utilizza la clausola abort.
Sull'avvio della base dati Oracle avevo gia' pubblicato
Startup e shutdown di Oracle (versioni fino alla 12),
Startup e shutdown di Oracle (versioni 6.x e 7.x), ...
ma l'evoluzione delle funzionalita' dell'RDBMS Oracle nel tempo e' stata notevole
e serviva un aggiornamento.
Maggiori dettagli sulle diverse versioni di Oracle sono riportate in
questo documento mentre l'evoluzione
nel tempo viene descritta in modo assai piu' romanzato in
questo documento.
Nel caso in cui lo startup di una base dati fallisca a causa di un errore o di una corruzione e' possibile effettuare un'attivita' di recovery della base dati che richiede pero' conoscenze specialistiche.
Titolo: Oracle startup
Livello: Avanzato
Data: 1 Gennaio 2025
Versione: 1.0.0 -
1 Gennaio 2025
Autore:
mail [AT] meo.bogliolo.name