Questa e' una guida su come effettuare l'avvio al boot del
database Oracle nella versione 12c R2
e successive
sul sistema operativo Oracle Linux 7
e le versioni successive ed le distribuzioni simili come RHEL, CentOS, ...
Questo documento vuole riportare gli elementi
essenziali della configurazione in modo sintetico, semplice, chiaro e,
non ultimo, in italiano!
Avevo gia' scritto una paginetta per le versioni 6 e 7 e quindi per le versioni dalla 8i alla 11g... ma nel tempo sono cambiate un po' di cose!
Inoltre con Oracle Linux dalla versione 7 l'avvio dei servizi e' molto diverso e l'opzione multitenant della 12c va gestita correttamente... continuate a leggere!
C'e' sempre da configurare il vecchio e caro file /etc/oratab:
db12:/u01/app/oracle/product/12.2.0/dbhome_1:Y
Non perdo tempo a descrivere il file: chi legge un documento con titolo come questo sa di cosa si tratta... oppure e' perso senza speranza! L'importante e' l'ultima lettera: Y/N.
Oracle 12c ha introdotto la funzionalita' multitenant in cui sull'istanza contenitore (Container Database: CDB) sono ospitati uno o piu' Pluggable Database (PDB). L'avvio dell'istanza effettua l'avvio del solo CDB (stato OPEN) mentre i PDB restano in stato di MOUNT. I singoli PDB possono essere avviati con:
E' possibile utilizzare un trigger di Startup indicando di attivare tutti i PDB:
create or replace trigger Sys.After_Startup after startup on database begin execute immediate 'ALTER PLUGGABLE DATABASE all OPEN'; end; /
Quando pero' si hanno decine di PDB, alcuni da aprire ed altri da lasciare in stato di MOUNT, il tutto diventerebbe complesso ed ingestibile. Dalla versione 12.1.0.2 [NdE 2014-07] e' pero' possibile salvare lo stato dei PDB con il comando:
Riassumendo: attivare tutti PDB che servono, salvarne lo stato e verificare la tabella delle impostazioni con la seguente query:
SELECT con_id, con_name, instance_name, state saved_state FROM cdb_pdb_saved_states;
Tutto partira' correttamente all'avvio del CDB.
Con la versione 7 di RH/CentOS/OL la gestione dei servizi viene effettuata con systemctl. Cambiano, in meglio, parecchie cose: quindi e' opportuno sfruttare le caratteristiche del nuovo comando.
Dal punto di vista dell'utilizzo il comando e' molto semplice:
systemctl [start|stop|status] nome_servizio
In realta' systemctl ha un numero molto piu' elevato di opzioni e di possibilita' [NdE ma l'autore non le conosce e quindi si accontenta di queste].
Vediamo come configurare due servizi: uno per il listener ed uno per il database.
Per la configurazione vanno creati i seguenti file
[NdA ipotizzando questa configurazione]:
ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1 ORACLE_SID=db12
[Unit] Description=Oracle listener After=network.target [Service] Type=forking EnvironmentFile=/etc/sysconfig/env.ora12cr2 ExecStart=/u01/app/oracle/product/12.2.0/dbhome_1/bin/lsnrctl start ExecStop=/u01/app/oracle/product/12.2.0/dbhome_1/bin/lsnrctl stop User=oracle [Install] WantedBy=multi-user.target
[Unit] Description=Oracle database After=network.target oralsnr.service [Service] Type=forking EnvironmentFile=/etc/sysconfig/env.ora12cr2 ExecStart=/u01/app/oracle/product/12.2.0/dbhome_1/bin/dbstart /u01/app/oracle/product/12.2.0/dbhome_1 ExecStop=/u01/app/oracle/product/12.2.0/dbhome_1/bin/dbshut /u01/app/oracle/product/12.2.0/dbhome_1 User=oracle [Install] WantedBy=multi-user.target
Naturalmente le variazioni possibili sono molte: possono esserci piu' listener (eg. lsnrctl start LSNR_name) o piu' database (eg. /etc/oratab), si possono utilizzare script personalizzati, ...
Ora che tutto e' stato configurato va riavviato il systemctl e vanno abilitati al boot i servizi:
La gestione dei servizi e' ora semplicemente eseguibile in modo standard OL7!
Come fare nelle configurazioni piu' complesse quali ad esempio Oracle RAC?
In realta' per il boot e' tutto piu' semplice.
L'installazione della Grid Infrastructure attiva i servizi necessari
al boot e tutto parte magicamente nell'ordine corretto
[NdE ma solo se sono state installate le versioni giuste nel modo previsto ;-].
Con il RAC pero' e' molto differente la gestione.
Altro caso particolare e' quello dell'utilizzo di un failover cluster.
In questo caso i DB debbono essere disabilitati
nel file /etc/oratab e sarebbe necessario preparare un script di gestione.
In realta' qualsiasi cluster recente, proprietario o Open Source,
gia' fornisce i Resource Script per gestire i servizi Oracle:
vanno solo configurati indicando user oracle, ORACLE_HOME, SID, ...
Gli script dbstart e dbshut utilizzati in questa pagina sono stati deprecati
dalla versione 11g R2!
Abbiamo forse sbagliato ad usarli? Impossibile.
Nella versione 11g R2 veniva consigliato l'utilizzo di Oracle Restart
(installato come componente con la Grid Infrastructure).
Pero' nella 12c gli script dbstart e dbshut non sono piu' deprecati
ed e' stato invece deprecato l'Oracle Restart.
CVD.
Quando e' presente una sola istanza Oracle e' sicuramente molto comodo impostare nel profile dell'utente oracle le variabili ORACLE_HOME ed ORACLE_SID in modo che con sqlplus / as sysdba ci si colleghi direttamente. Quando si hanno piu' istanze, eventualmente con HOME differenti, e' invece comodo creare un file .env per ogni istanza.
Con al 19c, se si utilizzano i PDB, e' possibile impostare la variabile ORACLE_PDB_SID per collegarsi direttamente al PDB voluto [NdA in realta' e' una funzionalita' introdotta con le RU aprile 2019 per la 18c e 19c ed e' implementata con il semplice trigger di logon DBMS_SET_PDB].
Titolo: Avvio al boot di Oracle 12cR2 su OL7
Livello: Avanzato
Data: 6 Marzo 2017
Versione: 1.0.3 - 14 Febbraio 2020
Autore: mail [AT] meo.bogliolo.name