Oracle ASM

Questa paginetta riporta le indicazioni piu' importanti per utilizzare Oracle ASM.

Oracle ASM (Oracle Automatic Storage Management) fornisce le funzionalita' di un Volume Manager per gestire direttamente i dischi riservati all'RDBMS Oracle. Oracle ASM puo' essere utilizzato in tutte le installazioni della base dati Oracle ma trova la sua collocazione ideale nelle configurazioni piu' complesse come con Oracle RAC. Su ASM vengono memorizzati in modo semplice ed ottimizzato tutte le strutture dati e di supporto di Oracle (eg. datafile, redo log, spfile, ...).
Una funzionalita' importante di ASM e' l'ACFS (ASM Cluster File System). ACFS permette di creare un file system per mantenere file differenti da quelli del database.

Questo documento e' volutamente incompleto, per maggiori dettagli fate riferimento alla documentazione ufficiale, ma vuole riportare gli elementi essenziali dell'utilizzo di ASM in modo sintetico, semplice, chiaro e, non ultimo, in italiano!

Il documento descrive: Architettura, Utilizzo, asmcmd: comandi in linea, sqlplus: comandi SQL, ACFS, Installazione, Varie ed eventuali, ...

Architettura

L'ASM e' un volume manager sviluppato da Oracle Corporation per l'RDBMS Oracle. La configurazione ottimale dello storage richiede un disegno specifico ed esperienza ma l'utilizzo dell'ASM semplifica le attivita' da parte del DBA ed ottimizza gli accessi.

In pratica all'ASM vengono assegnati direttamente le partizioni dei dischi o le LUN di una SAN (Storage Area Network) ed e' poi l'ASM a gestirli in maniera ottimale.
I dischi assegnati vengono raggruppati in Disk Group che mantengono informazioni omogenee e su cui l'ASM distribuisce i dati.
Nel caso di utilizzo di Storage su SAN conviene scegliere la protezione esterna: EXTERNAL (nessun mirror), nel caso di utilizzo di dischi locali conviene utilizzare il livello di protezione piu' elevato: HIGH.

Su un DB Server e' presente una sola istanza ASM (con SID= +ASM) e le diverse istanze di Database ospitate sullo stesso server utilizzano lo stesso unico ASM. Nel caso di configurazione in RAC ogni nodo ha una propria istanza ASM, anche in questo caso le diverse istanze di database ospitate sullo stesso nodo utilizzano lo stesso unico ASM (con SID= +ASMn).

Architettura Oracle ASM

Utilizzo

L'utilizzo di ASM da parte di un DBA e' molto semplice. Per create un tablespace basta il comando (DGROUP e' un Disk Group definito su ASM):
create tablespace my_tbs datafile '+DGROUP' size 100M;

Per controllare l'allocazione di spazio e' utile questa query:

col PCT format 999.0
set lines 132
select GROUP_NUMBER DG#, name, ALLOCATION_UNIT_SIZE AU_SZ, STATE,
       TYPE, TOTAL_MB, FREE_MB, free_mb/total_mb*100 PCT, OFFLINE_DISKS 
from v$asm_diskgroup;
Un report piu' completo puo' essere ottenuto con questo script SQL.

La gestione dell'ASM puo' essere effettuata in modo grafico con il comando asmca. Lanciando il comando asmca viene presentata un'interfaccia grafica simile a quella dei comandi dbca o netca cui il DBA Oracle e' abituato.
Esistono tuttavia altre modalita' per la gestione dell'ASM che consentono un controllo maggiore e vengono descritte nei prossimi capitoli.

asmcmd: gestione da linea di comando

L'utility asmcmd consente di operare da linea di comando su ASM.
L'ASM mantiene una struttura gerarchica dei file. La struttura e' fissa:
+diskGroupName/databaseName/fileType/fileTypeTag.file.incarnation

I comandi utilizzabili per navigare nella struttura di ASM sono Unix-like: ls cd du find rm mkdir mkalias ... Sono supportate anche le principali opzioni (eg. ls -l), i path assoluti/relativi, i wildchar, ...
Lanciato con l'opzione -p il prompt contiene il path corrente (molto comodo :-). Facciamo un giro:

# su - grid $ asmcmd -p ASMCMD [+] > ls DATA/ RECO/ REDO/ ASMCMD [+] > cd reco ASMCMD [+reco] > ls PROD/ TEST/ ASMCMD [+reco] > cd test ASMCMD [+reco/test] > ls ARCHIVELOG/ CONTROLFILE/ FLASHBACK/ ONLINELOG/ ASMCMD [+reco/test] > cd archivelog ASMCMD [+reco/test/archivelog] > ls -l Type Redund Striped Time Sys Name Y 2014_04_01/ Y 2014_04_02/ ASMCMD [+reco/test/archivelog] > cd *1 ASMCMD [+reco/test/archivelog/2014_04_01] > ls thread_1_seq_17383.639.845073223 thread_1_seq_17384.630.845075127 thread_1_seq_17385.620.845077447 thread_2_seq_16480.643.845073181 thread_2_seq_16481.629.845075803 thread_2_seq_16482.618.845078393 ASMCMD [+reco/test/archivelog/2014_04_01] > ls -l Type Redund Striped Time Sys Name ARCHIVELOG HIGH COARSE APR 01 22:00:00 Y thread_1_seq_17383.639.845073223 ARCHIVELOG HIGH COARSE APR 01 23:00:00 Y thread_1_seq_17384.630.845075127 ARCHIVELOG HIGH COARSE APR 01 23:00:00 Y thread_1_seq_17385.620.845077447 ARCHIVELOG HIGH COARSE APR 01 22:00:00 Y thread_2_seq_16480.643.845073181 ARCHIVELOG HIGH COARSE APR 01 23:00:00 Y thread_2_seq_16481.629.845075803 ARCHIVELOG HIGH COARSE APR 02 00:00:00 Y thread_2_seq_16482.618.845078393 ASMCMD [+reco/test/archivelog/2014_04_01] > du Used_MB Mirror_used_MB 35028 105084

Gestione da SQL

L'istanza +ASM ha alcune analogie con le altre istanze di database. E' infatti possibile accedere all'istanza, come utente grid, con il comando: sqlplus / as sysasm

Per controllare l'allocazione di spazio e' utile questa query:

col PCT format 999.0
set lines 132
select GROUP_NUMBER DG#, name, ALLOCATION_UNIT_SIZE AU_SZ, STATE,
       TYPE, TOTAL_MB, FREE_MB, free_mb/total_mb*100 PCT, OFFLINE_DISKS 
from v$asm_diskgroup;

Per controllare lo spazio utilizzato per tipologia d'oggetto e' utile questa query:

set lines 132
select type, group_number, count(*),
   to_char(round(sum(bytes)/(1024*1024*1024)),'999,999,999,999') GB,
   to_char(sum(bytes),'999,999,999,999,999,999') bytes
 from v$asm_file
 group by group_number,type;

Un report piu' completo puo' essere ottenuto con questo script SQL.
Le stesse query possono essere utilizzate anche sulle istanze Oracle connesse all'ASM. Quando lanciate dall'ASM le query riportano i dati relativi a tutte le istanze, mentre ciascuna istanza puo' vedere solo i dati relativi alle proprie attivita'.

CAVE CANEM !

La gestione delle allocazioni, la definizione degli oggetti, i principali aspetti amministrativi (come la rottura di un disco), ... vengono gestiti automaticamente dall'ASM.
Nonostante questo con i comandi in linea o da SQL si puo' gestire in modo completo ogni oggetto definito in ASM. In questo modo si possono risolvere velocemente problemi complessi oppure... combinare grossi guai.

Quindi CAVE CANEM: non eseguite i comandi che seguono se non sapete quello che state facendo!

ASMCMD [+reco/test/archivelog] > rm -rf 2014_04_01 # Oppure... SQL > alter diskgroup reco drop file '+RECO/TEST/ARCHIVELOG/2014_04_01/thread_1_seq_17383.639.845073223'; # In entrambe i casi per aggiornare il catalogo ed i controlfile: RMAN> CONNECT TARGET RMAN> CROSSCHECK ARCHIVELOG ALL; RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;

Agire direttamente sui file ASM comporta che le basi dati Oracle non sanno cosa sia stato modificato ed e' necessario riallinearle. Il primo comando RMAN porta in stato X (expired) gli archived log, il secondo li cancella completamente dai control file (ed eventualmente dal catalogo RMAN).

ACFS

L'ACFS (ASM Cluster File System) e' un FS definito su dischi ASM. Ha le normali caratteristiche di un moderno FS ma, anziche' appoggiarsi a partizioni fisiche di un disco, utilizza gli spazi allocati sull'ASM. L'utility acfsutil consente di definire dinamicamente le caratteristiche di un file system. Il seguente esempio riporta come creare da zero un nuovo ACFS /cloudfs2 e mountarlo in cluster:

# Creazione del volume su cui ospitare i dati su - grid asmcmd volcreate -G DATA -s 100G cloudfs2 volinfo -G data cloudfs2 exit # Creazione del file system (utilizzare il Volume Device restituito da volinfo) mkfs -t acfs /dev/asm/cloudfs2-69 # Definizione come servizio sul cluster acfsutil registry -a /dev/asm/cloudfs2-69 /cloudfs2 # Definizione diritti (come utente root) chown oracle:dba /cloudfs2

Una volta definito un file system ACFS e' di semplice controllo e gestione. Per controllarlo si utilizzano i normali comandi unix (eg. df, mount, ...) ed acfsutil. Ecco come allargarlo di altri 10GB:

/sbin/acfsutil size +10240M /cloudfs2

Non funziona? Potrebbe mancare qualcosa! Ci sono diverse combinazioni a seconda della configurazione: seguite le note successive...
Se mancano i driver nel kernel:

/u01/app/11.2.0.4/grid/bin/acfsroot install
/u01/app/11.2.0.4/grid/bin/acfsload start

lsmod | grep oracle
Per avviare manualmente il file system:
/u01/app/11.2.0.4/grid/bin/acfsload start -s
su - grid -c "asmcmd volenable -a"
mount /dev/asm/u03-296 /u03  -t acfs
Per avviare da cluster:
acfsutil registry -l
/u01/app/11.2.0.4/grid/bin/acfsload start -s
Infine con Oracle Restart il file system non e' gestito con i comandi di cluster e quindi va montato normalmente ovvero con i comandi di sistema operativo:
mount -t acfs /dev/asm/cloudfs2-69 /cloudfs2

Installazione ASM (Grid Infrastructure)

La procedura di installazione della Grid Infrastructure, che contiene l'ASM, e' descritta in dettaglio nel documento installazione di Oracle Grid Infrastructure. Nel seguito sono riportati solo alcuni elementi:
Dalla versione 11g R2 (11.2) con la stessa procedura d'installazione di Oracle Grid Infrastructure e' possibile installare due prodotti distinti: Oracle Clusterware ed Oracle Automatic Storage Management (ASM). Oracle Clusterware fornisce le funzionalita' di un failover cluster ed e' un prerequisito per un'installazione di Oracle RAC.
Ecco i passi da eseguire:


Da eseguire come utente oracle (o grid se si utilizzano utenze diverse GI/RDBMS)!

Decomprimere il SW Oracle (unzip)

Iniziare l'installazione dove e' stato scaricato il SW: abilitare X sul Client, impostare il DISPLAY e lanciare:
xhost + 		
set DISPLAY=IP_Workstation:0
cd grid; ./runInstaller&

Rispondere con il default a tutte le domande, nel seguito sono riportate le eccezioni.
Eseguire gli script, come utente root, quando richiesto.

Non dimenticate le password inserite durante l'installazione!!

I primi passi dell'installazione richiedono email ed utenze registrate sul supporto Oracle per l'eventuale (consigliato) download delle patch.

Installazione Oracle Grid 11g R2 - Support Credential

Viene richiesto il tipo di installazione. Scegliere "Install and Configure Grid Infrastructure for a Standalone Server".
Se l'installazione viene eseguita configurare un RAC va invece scelto "Install and Configure Grid Infrastructure for a Cluster" [NdA l'installazione e' un poco piu' complessa e non la vediamo in questo documento].

Installazione Oracle Grid 11g R2 - Tipo Installazione

Vanno indicati il Disk Group da creare ed i dischi da assegnare, vengono visualizzati quelli catalogati dall'ASMlib, basta selezionarli:

Installazione Oracle Grid 11g R2 - Disk e Disk Group

Durante l'installazione vengono chieste le password delle utenze SYS, ASM, ... l'importante e' ricordarle!

Terminate le domande e confermato il prospetto riassuntivo viene eseguita l'installazione del software, il relink degli eseguibili, ...

Finito!
Buon divertimento! Have a lot of Fun! Que te diviertas! Diverte-te!


Altre informazioni...

Dalla versione 12c e' presente la nuova architettura FLEX che estende l'utilizzo di ASM anche a nodi non connessi allo storage. Oltre ai nodi (HUB) con il componente ASM installato ed attivo e' possibile inserire in cluster nodi (LEAF) senza la componente ASM. I nodi LEAF accedono allo storage mediante il nodo HUB cui sono assegnati.

Architettura Oracle Flex

Come sempre con Oracle su ASM e' disponibile un'ampia documentazione ufficiale sul sito Oracle.

In qualche caso e' necessario conoscere qualche dettaglio sugli ASMlib Internals...


Titolo: Oracle ASM
Livello: Avanzato (3/5)
Data: 14 Febbraio 2013
Versione: 1.0.0 - 1 Aprile 2014
Autore: mail [AT] meo.bogliolo.name