ASM è un gestore di volumi che supporta le varie configurazioni di Oracle Database e RAC, e fornisce un'alternativa ai tradizionali gestori di volumi, file system e dispositivi raw.
A protezione e prevenzione di eventuali fault sui dischi, ASM fornisce gli strumenti utili al mirroring dei dati.
In ASM i dischi sono organizzati in gruppi (detti DISKGROUP), e per ogni DISKGROUP (alla creazione e non più modificabile) occorre specificarne il livello di ridondanza (mirroring).
I diski di un DISKGROUP sono organizzati in FAILGROUP, che sono dei sottogruppi di dischi.
A seconda dei livello di ridondanza impostato per il DISKGROUP, occorre un numero minimo di FAILGROUP. In ogni caso, non può esistere un DISKGROUP senza un FAILGROUP.
Abbiamo 3 livelli di ridondanza:
1) EXTERNAL REDUNDANCY
2) NORMAL REDUNDANCY
3) HIGH REDUNDANCY
Impostare una ridondanza EXTERNAL significa NON mirrorare i dati del diskgroup a livello ASM. In questi casi ci si aspetta che i dischi siano mirrorati a livello storage, o quantomeno sarebbe auspicabile. In caso di disk failure, il DISKGROUP diviene indisponibile finché il disco che ha subito il fault non ritorna a disposizione. In questo tipo di diskgroup, ogni disco appartiene ad un solo FAILGROUP, e si hanno tanti FAILGROUP quanti sono i dischi del DISKGROUP. Tuttavia in questa modalità, non essendoci alcun mirror, quando viene scritto un dato non c'è alcun controllo in merito al FAILGROUP di appartenenza, né vi sono copie di dati. L'unico criterio con cui vengono scritti è quello che essi siano bilanciati equamente su tutti i dischi.
Impostare una ridondanza NORMAL significa avere 2 vie di mirror (due copie dei dati). In questo caso i dischi del diskgroup devono essere separati in almeno 2 FAILGROUP. Oracle consiglia di usarne 3.
Impostare la ridondanza HIGH significa mirrorare i dati del diskgroup su 3 vie (tre copie). In questo caso i dischi del diskgroup devono essere separati in almeno 3 FAILGROUP. Oracle consiglia di usarne 5.
Un DISKGROUP con ridondanza NORMAL o HIGH è composto da "insiemi di extent" detti extent-set. Ogni extent contiene un insieme di blocchi di dati. Tutti gli extent appartenenti ad un extent-set contengono gli stessi dati. Per la ridondanza NORMAL quindi abbiamo due extent in un extent-set, per quella HIGH ne abbiamo tre.
Un extent dell'insieme viene indicato come "primario". Gli altri come "secondari". L'extent primario viene scritto su un disco del DISKGROUP senza considerarne il FAILGROUP di appartenenza, ovvero in modo tale da garantire l'equo bilanciamento dei dati all'interno di tutto il DISKGROUP. Dopo che il primario è stato allocato, allora vengono allocati i secondari. In questo caso viene scelto un disco il cui FAILGROUP non è stato ancora utilizzato dagli altri extent dell'insieme.
Ciò garantisce due cose:
- ogni extent di un extent-set appartiene sicuramente ad un solo FAILGROUP;
- le letture sono sempre spalmate in modo uniforme in tutto il DISKGROUP.