giovedì 2 aprile 2009

Startup e shutdown

L'avvio e lo spegnimento di Oracle sono due procedure importanti che è necessario saper eseguire in modo corretto per garantire il funzionamento del DBMS stesso, nonchè l'integrità dei dati gestiti tramite esso.

I servizi (demoni in ambito GNU/Linux) da avviare prima di poter interagire con Oracle sono il listener e una o più istanze.
Con Microsoft Windows, i servizi a cui fare riferimento sono:

* OracleServiceSID: il servizio di bootstrap di oracle che permette l'avvio dell'istanza indicata dalla stringa "SID". Una volta avviato il servizio OracleServiceSID è possibile avviare/stoppare manualmente l'istanza
* OracleHOME_NAMETNSListener: è il servizio che si occupa di controllare il listener Oracle

Agli amministratori di Oracle su sistemi Microsoft Window consiglio di dare un'occhiata a questa descrizione (in inglese, ma molto chiara) dettagliata e completa dei servizi Oracle, delle variabili d'ambiente che è necessario impostare e delle chiavi di registro fondamentali per Oracle!

Se si predilige il sistema operativo GNU/Linux (come nel mio caso ;), Oracle mette a disposizione il comando "lsnrctl" per la gestione del listener e lo script "dbstart" per l'avvio di una o più istanze. Entrambi si trovano nella directory "$ORACLE_HOME/bin".
Al fine di automatizzare startup e shutdown di Oracle (listener + istanza/e, quindi), io utilizzo questo semplice script trovato in rete e che ho chiamato "gestoracle.sh":

#!/bin/bash
#
# Run-level Startup script for the Oracle Instance and Listener
#
# chkconfig: 345 91 19
# description: Startup/Shutdown Oracle listener and instance


#ORA_OWNR="oracle"

# if the executables do not exist -- display error

if [ ! -f $OH/bin/dbstart -o ! -d $OH ]
then
echo "Oracle startup: cannot start"
exit 1
fi

# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display

case "$1" in
start)
# Oracle listener and instance startup
echo -n "Starting Oracle: "
$OH/bin/lsnrctl start
$OH/bin/dbstart $ORACLE_HOME
echo "OK"
;;
stop)
# Oracle listener and instance shutdown
echo -n "Shutdown Oracle: "
$OH/bin/lsnrctl stop
$OH/bin/dbshut $ORACLE_HOME
echo "OK"
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 start|stop|restart|reload"
exit 1
esac
exit 0

Per lanciare lo script è sufficiente loggarsi sul db server con un utente appartenente al gruppo dba ed eseguire da command line:
$ ./gestoracle.sh start|stop|restart|reload

A seconda del parametro passato, gestoracle.sh avvia o stoppa il listener e lo script di gestione del'istanza da avviare.
Il risultato dell'esecuzione di gestoracle.sh è questo:
oracle@debiandb:~$ gestoracle.sh start
Starting Oracle:
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 02-APR-2009 08:58:14

Copyright (c) 1991, 2007, Oracle. All rights reserved.

Avvio di /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: attendere...

TNSLSNR for Linux: Version 10.2.0.4.0 - Production
Il file dei parametri di sistema è /u01/app/oracle/product/10.2.0/db_1/network/
admin/listener.ora
Messaggi di log registrati in /u01/app/oracle/product/10.2.0/db_1/
network/log/listener.log
Ascolto su: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Ascolto su: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=debiandb)(PORT=1521)))

Connessione a (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATO del LISTENER
------------------------
Alias LISTENER
Versione TNSLSNR for Linux: Version 10.2.0.4.0 - Production
Data di inizio 02-APR-2009 08:58:14
Tempo di attività 0 giorni 0 ore 0 min. 0 sec.
Livello trace off
Sicurezza ON: Local OS Authentication
SNMP OFF
File di parametri listener/u01/app/oracle/product/10.2.0/db_1/network/admin/
listener.ora
File di log listener /u01/app/oracle/product/10.2.0/db_1/network/log/
listener.log
Summary table degli endpoint di ascolto...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=debiandb)(PORT=1521)))
Summary table dei servizi...
Il servizio "PLSExtProc" ha 1 istanze.
L'istanza "PLSExtProc", stato UNKNOWN, ha 1 handler per questo servizio...
Il comando è stato eseguito
OK

Ora che il DBMS è attivo è possibile avviare l'istanza desiderata (assicurarsi sempre che la variabile di sistema ORACLE_SID sia correttamente impostata):
oracle@debiandb:~$ export ORACLE_SID=TEST
oracle@debiandb:~$ sqlplus /nolog

SQL*Plus: Release 10.2.0.4.0 - Production on Gio Apr 2 08:58:39 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

SQL> conn/as sysdba
Connesso a un'istanza sospesa.

SQL> startup
Istanza ORACLE avviata.

Total System Global Area 1174405120 bytes
Fixed Size 1267116 bytes
Variable Size 620759636 bytes
Database Buffers 536870912 bytes
Redo Buffers 15507456 bytes
MOUNT del database eseguito.
Database aperto

La procedura di "apertura" di un database è composta da più livelli:

* LIVELLO 0 - database chiuso: l'istanza è spenta e gli utenti non possono eseguire login, accedere ai dati contenuti nel db, ecc.
* LIVELLO 1 - NOMOUNT: lanciando il comando
SQL> startup nomount
Oracle legge il contenuto del spfile che contiene le informazioni essenziali per l'avvio dell'istanza specificata dalla variabile di sistema ORACLE_SID (ad esempio, la dimensione delle varie aree di memoria RAM da riservare all'istanza, la dimensione dei blocchi di dati, il character set, ecc), quindi avviene l'avvio dell'istanza mediante allocazione di una certa quantità di memoria RAM e l'avvio dei background processes.
Il database non è ancora accessibile per gli utenti.
* LIVELLO 2 - MOUNT: raggiungibile dal livello 0 con il comando:
SQL> startup mount
oppure dal livello 1 con il comando
SQL> alter database mount;

In questo livello Oracle legge il contenuto del/i control file, la cui posizione su file system è indicata nel spfile, per determinare la posizione, sempre su file system, dei datafile di cui, tuttavia, non viene eseguita l'apertura.
* LIVELLO 3 - OPEN: lo stato di database aperto può essere raggiunto dal livello 0 direttamente con il comando
SQL> startup
oppure dai livelli 1 e 2 con il comando
SQL> alter database open

Oracle monta in sola lettura, o in lettura/scrittura i datafile, quindi i dati contenuti nel db diventano accessibili per gli utenti.

Come al solito, potete liberamente scaricare l'immagine di inizio post in quanto rilasciata con licenza Creative Commons Attribution-Noncommercial 2.0 Generic ;)

Nessun commento: