Avvio al boot di Oracle 12cR2 su OL7

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!

oratab

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.

Multitenant

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:

ALTER PLUGGABLE DATABASE nomePDB OPEN;

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:

ALTER PLUGGABLE DATABASE nomePDB SAVE STATE;

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.

systemctl

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]:

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:

# systemctl daemon-reload # systemctl list-unit-files --type service # systemctl list-dependencies # systemctl enable oralsnr.service # systemctl enable ora12c.service

La gestione dei servizi e' ora semplicemente eseguibile in modo standard OL7!

Configurazioni complesse

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, ...

Varie ed eventuali

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 (3/5)
Data: 6 Marzo 2017
Versione: 1.0.3 - 14 Febbraio 2020
Autore: mail [AT] meo.bogliolo.name