Kosmous beyond the clouds: Sviluppo, Formazione e Consulenza Informatica

Il Server Parameter File

Lo startup di un database Oracle può essere divisa in tre fasi fondamentali:
  • la prima riguarda l'allocazione di una certa quantità di memoria e l'attivazione di una serie di processi (al completamento di questa fase il DB raggiunge lo stato di NOMOUNT );

  • una seconda fase durante la quale viene letto il Control File, che contiene l'elenco di tutti i files che costituiscono il database ed un insieme di altre informazioni necessarie per verificare che il database sia in uno stato consistente (stato di MOUNT);

  • la terza ed ultima fase nella quale si accede ai vari file del DB, e si mette il database stesso nelle condizioni di accettare connesioni dagli utenti (stato di OPEN).

La prima fase comporta la lettura di alcune informazioni necessarie per configurare correttamente le varie strutture di memoria (SGA e PGA) e l'attivazione di una serie di processi (come il DBWR, LGWR, SMON, PMON etc.) necessari al funzionamento del database stesso. Oracle necessita di circa trecento parametri per poter definire e dimensionare correttamente memoria e processi. Tutti questi parametri possono essere divisi in due gruppi:
  • Parametri espliciti: sono tutti quelli che sono stati esplicitamente valorizzati (definiti da chi gestisce il DB o aventi un valore di default impostato in automatico al momento della creazione del database);


  • Parametri impliciti: sono quelli che non sono mai stati esplicitamente valorizzati, e pertanto ad essi verrà assegnato un valore di default dal Software stesso.
I parametri espliciti sono contenuti in un file detto PFILE (PARAMETER FILE), od anche INIT.ORA. Fino alla release 8 tale file aveva l'estensione INITSID.ORA, dove il SID è l'identificativo del DB. Per esempio il DB ORCL veniva "inizializzato" dal file INITORCL.ORA. Tale file era l'unico file editabile di un database, ed ogni volta che si volevano modificare certe caratteristiche del DB occorreva modificare il file, chiudere e riaprire il DB forzandolo a rileggere il file.

Questa operazione risultava molto fastidiosa, perchè chiudere il database significa interrompere le normali attività, operazione a volte non molto gradita, soprattutto in caso di transazioni molto lunghe.

Dalla versione 9i in poi, la Oracle ha cercato di ridurre drasticamente i momenti di downtime del Database, per cui adesso molti parametri (impostati dal PFILE) possono essere modificati dinamicamente, cioè senza essere costretti a chiudere e riaprire il database, mediante comandi del tipo:

ALTER SYSTEM SET nome_parametro = nuovo_valore ;

Tuttavia, quando un parametro viene modificato dinamicamente ed il PFILE non viene aggiornato in maniera opportuna per rispecchiarne le modifiche, ci si potrebbe trovare in una situazione alquanto scomoda in seguito ad una chiusura del database, in quanto al successivo startup i parametri verrebbero impostati in base al contenuto del PFILE, in quanto il sistema ignora il valore che essi avevano al momento della chiusura del Database.
Una soluzione potrebbe essere quella di far modificare direttamente ad Oracle l'init.ora in funzione del valore corrente dei vari parametri, ma purtroppo non si può fare, in quanto il file è in formato testo.
Allora ecco la novità: l' SPFILE.




Esso non è altro che una copia, in binario, dell'INIT.ORA, e viene creato da Oracle stesso mediante il comando:

CREATE SPFILE='/opt/oracle/products/9.2.0/spfile.ora'
FROM PFILE
= '/opt/oracle/products/9.2.0/init.ora';


O semplicemente con:

CREATE SPFILE FROM PFILE = '/opt/oracle/products/9.2.0/init.ora';

Lo scopo di questo file è quello di poter essere aggiornato direttamente da Oracle ogniqualvolta modifico un parametro dinamicamente, in modo da evitare l'aggiornamento manuale dell' INIT.ORA (operazione che potrebbe causare errori) cosicché se dovessi improvvisamente chiudere e riaprire il Database, non dovrei preoccuparmi di controllare prima l'init.ora per avere la certezza di aver salvato su file tutte le modifiche apportate al Database durante la sua attività.

Alcune raccomandazioni sulla creazione dell'SPFILE:
  • Deve essere creato lato server. Non posso quindi tenerne una copia lato client;
  • Se utilizzo un PFILE lato client per fare lo Startup del database, devo trasferirlo sul server prima di eseguire l'operazione;
  • Se il file di destinazione esiste, esso verrà sovrascritto;
  • Devo avere il privilegio SYSOPER o SYSDBA per farlo;
  • Posso non specificare il nome del file, nel qual caso Oracle provvederà ad assegnargliene uno di default, posizionando il file nella HOME_DIRECTORY di sistema.
  • Non è editabile dall'utente. Inoltre se lo modifico mentre l'instanza è attiva, rischio di mandarla in crash;
  • Può essere eseguito prima o dopo lo startup; se lo eseguo quando l'instanza è attiva, e provo a ricrearlo sullo stesso file utilizzato per l'avvio del database, vado in errore.
Se volessi sapere qual'è l'SPFILE utilizzato dall'instanza attiva, uso il comando:

SHOW PARAMETERS SPFILE;

A questo punto, tutte le modifiche apportate con il comando

ALTER SYSTEM SET nome_parametro = nuovo_valore ;

verranno salvate sul file in automatico.

Posso usare nel comando la clausola SCOPE che può assumere tre valori:
  1. SPFILE: le modifiche apportate da ALTER SYSTEM verranno salvate nell'SPFILE. Pertanto affinchè diventino attive occorre eseguire uno shutdown e startup. Questo è l'unico mezzo per per modificare quei parametri di avvio che non possono essere modificati dinamicamente.
  2. MEMORY: le modifiche all'istanza verranno subito attivate, ma non verranno salvate sul file. Pertanto dopo uno startup e shutdown queste modifiche verranno perse. Ovviamente non posso usare questa clausola per i parametri statici.
  3. BOTH: questo è il valore di default della clausola SCOPE se sto utilizzando un SPFILE: le modifiche apportate da ALTER SYSTEM verranno subito applicate all'instanza e saranno anche salvate nello SPFILE. Ovviamente non posso usare questa clausola per i parametri statici.
Esempio:

ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 8 SCOPE = MEMORY;

Per avere informazioni sul valore dei vari parametri di inizializzazione, posso usare le viste:

  • V$PARAMETER questa vista era presente anche nelle vecchie versioni del database, e visualizza il valore corrente dei parametri;
  • V$PARAMETER2 restituisce le stesse informazioni della V$PARAMETER, ma è più leggibile;
  • V$SPPARAMETER visualizza il valore dei parametri come sono memorizzati nel SPFILE; Se non si sta usando un SPFILE restituisce NULL;

Questo documento non è un documento ufficiale della Oracle Corporation. Oracle detiene tutti i diritti sulla propria documentazione. Alcuni termini usati sono trademarks registrati. In caso di dubbi o incertezze consultate la documentazione ufficiale di Oracle o contattate il Customer Support di Oracle.

Commenti (0)2003-06-16