Payday loans
 

Oracle DBA Italia

La comunità dei DBA Oracle in Italia

  • Aumenta dimensione caratteri
  • Dimensione caratteri predefinita
  • Diminuisci dimensione caratteri

Automatic Storage Management (ASM)

E-mail Stampa PDF

Prima parte

Automatic Storage Management (ASM) è un filesystem e volume manager integrati prodotto da Oracle per l'utilizzo con il suo database.

ASM è realizzato mediante uno speciale tipo di istanza di database che si differenzia dalle istanze ordinarie perché viene avviata col parametro

INSTANCE_TYPE=ASM

ASM non è pensata per l'accesso da client remoti, bensì sostituisce gli "strati" di sistema operativo che stanno tra l'apertura di un file e i dischi, per tutte le istanze di database che girano sullo stesso server. L'accesso ai file presenti in un volume ASM avviene attraverso un qualsiasi processo server di Oracle.

Volendo continuare un parallelismo tra ASM e le istanze ordinarie, l'istanza ASM è sempre in stato mount, possiede una large_pool le cui dimensioni sono determinate dal numero di dischi e file che deve gestire, non possiede datafile ma solamente il pfile o spfile che contiene i suoi parametri di avvio. L'ORACLE_SID di un'istanza ASM è sempre nella forma +.

ASM tende a realizzare l'architettura SAME (stripe and mirror everything), secondo la quale, in estrema sintesi, le migliori performance si ottengono mettendo tutti i file di un database all'interno di un singolo volume RAID10 (leggere il link per informazioni più complete).

ASM memorizza i file in extent di 1 MB per i file di classe datafile o 256 KB per i file di classe redo-log, dove 1 MB viene scelto come dimensione per il coarse-striping e 256 KB per il fine-striping. Ricordiamo che il coarse-striping viene utilizzato per file i cui blocchi vengono scritti anche occasionalmente (come i datafile), in modo da minimizzare la latenza dei dischi che compongono l'array, mentre il fine-striping viene utilizzato per i file che vengono scritti in modo continuo, come i redo-log, in modo da massimizzare il throughput dato dall'utilizzo parallelo dei dischi che compongono l'array.

Con ASM è possibile definire uno o più volumi chiamati disk group, composti da uno o più dischi, con diversi livelli di tolleranza ai guasti. Questi livelli sono tre:

  1. External redundancy: gli extent non sono mirrorati ma solo bilanciati tra i dischi del disk group
  2. Normal redundancy: ogni extent possiede una copia di se stesso su un altro disco del suo disk group
  3. High redundancy: ogni extent possiede due copie di se stesso su due altri dischi del suo disk group

In caso di guasto a un disco, il motore di ASM ridistribuisce le copie superstiti degli extent persi sugli altri dischi del disk group, riottenendo, alla fine del ribilanciamento, il livello di redundancy definito in origine per il disk group.

Per i dischi è possibile definire i failure groups, ovvero raggruppare i dischi aventi in comune un device che può causare l'indisponibilità contemporanea di tutti i dischi del gruppo; si pensi ad esempio a un insieme di dischi collegati a un controller e un altro insieme collegato a un altro controller. Creando un disk group con ridondanza "interna" formato dai due gruppi di dischi, ASM distribuisce gli extent mirror sull'altro failure group per ciascun extent, in modo che non solo i dati siano protetti dall'indisponibilità di un disco, ma anche da quella di tutti i dischi di un failure group.

Ecco i principali vantaggi di ASM:

  • Sono abilitati automaticamente direct-I/O e I/O asincrono
  • La distribuzione dei dati sui dischi che compongono i disk group viene bilanciata automaticamente
  • Il carico di I/O viene bilanciato automaticamente sui dischi di ogni disk group a seconda del tipo di file

Un processo server Oracle distingue un file "ordinario" da un file ASM dal nome del file, che se per il file ordinario è un full path, per un file ASM inizia sempre con "+/...", dove è il nome dell'instanza ASM. Ciò avviene in ogni ambito di Oracle, da quando si specifica un datafile di un nuovo tablespace, a RMAN.

Seconda parte

ASM salva la configurazione dei dischi e dei disk group direttamente nell'header di ogni disco; in tal modo basta fornire il parametro ASM_DISKSTRING per dire all'istanza dove cercare i dischi (path dei device per Unix), e il parametro ASM_DISKGROUPS per dire quali disk group devono essere montati all'avvio.

La configurazione di ogni disk group può essere cambiata dinamicamente, finché lo spazio libero lo consente. Ad ogni operazione di aggiunta di uno o più dischi, ASM ribilancia gli extent includendo i nuovi dischi mentre, togliendo uno o più dischi, ASM sposta gli extent dai dischi che sono stati esclusi dal disk group verso gli altri dischi ancora attivi.
Queste operazioni richiedono un certo tempo, ma sono generalmente molto rapide perché molto semplici; la loro velocità o priorità viene controllata dal parametro ASM_POWER_LIMIT, che va da 0 a 11 con default 1.

Sui dischi, come nella tradizione dei filesystem con log, viene salvato anche il disk group log, che permette il recovery al successivo avvio nel caso di crash dell'istanza ASM. Il log è comune a tutte le istanze ASM che montano i dischi, come nel caso di RAC, quindi il recovery viene fatto da un'altra istanza ASM che monta gli stessi disk group.

È fondamentale ricordare sempre che ogni file contenuto in un volume ASM è un file OMF (Oracle-Managed File). Ciò significa che il suo posizionamento nell'albero delle directory è in ultima analisi deciso da Oracle stesso, a seconda dello standard OMF, che ne determina sia la posizione che il nome.

Ad esempio, un datafile sarà sempre posizionato in +DGROUP/datafile/datafilename, dove datafilename è nella forma (fully qualified filename):

+group/dbname/file_type/file_type_tag.file.incarnation

dove file_type_tag varia a seconda del tipo di file e file è il numero del file. Ad esempio per i datafile è il nome del tablespace, per gli archivelog è thread_#_seq_# (v. tabella apposita).
La sequenza:

+group.file.incarnation

è univoca e può essere usata in alternativa.

Quando si usano comandi che richiedono di specificare il nome di un file, con ASM è sufficiente specificare il disk group di destinazione, e Oracle decide posizionamento e nome in automatico (esempio):

SQL> alter tablespace MYTBS add datafile '+DGROUP2' size 1G;

Nonostante OMF, è comunque possibile definire un alias, a tutti gli effetti valido come nome del file, che permette di posizionare almeno virtualmente i file ovunque nel diskgroup, comprese directory personalizzate.
Se viene specificato un nome non OMF all'atto di creazione di un file, verrà creato il file in standard OMF e in più l'alias come specificato nel comando.

I volumi ASM sono accessibili anche da linea di comando tramite ASMCMD, che emula una shell simile a quella Unix. La sua funzionalità più importante è la possibilità di copiare file da ASM a filesystem dell'host e viceversa. Tale funzionalità viene realizzata tramite chiamate al package DBMS_FILE_TRANSFER [da verificare, non trovo riferimenti]. Questa procedura ha delle limitazioni: la dimensione del file deve essere un multiplo di tot 512 KB e di dimensione massima di 2 TB.

Nella versione 11gR2 ASMCMD è un tool completo per la gestione delle istanze ASM, file, disk group, template, e il nuovo volume manager.

(continua prossimamente)

Ultimo aggiornamento Lunedì 22 Febbraio 2010 12:03  

Commenti  

 
0 #14 Alasondro 2010-02-02 18:41
l'istanza è started in nomount ma non monta alcun diskgroups, mentre in mount si;

ed è il concetto di open che proprio non ci sta a fare niente con l'ASM ed infatti guardando meglio nella documentazione

OPEN - This is not a valid option for an ASM instance.

non so perchè ma mi pareva di ricordare che lo prendesse ugualmente ma che avesse lo stesso comportamento della mount.....

ricorderò male evidentemente, oppure mi sono imbattuto in un altro di quei casi dove a seconda delle versioni e/o livelli di patch viene consentita o meno una sintassi
 
 
0 #13 Roberto 2010-02-02 14:46
Sembra più un thread da forum.
Ammistratore Rudy: è possibile fare in modo che i commenti relativi ad un articolo restino confinati all'articolo stesso e non vadano anche in Home Page?

Alessandro:
Tu dici: Citazione:
perchè i disk groups possano essere visti ed usati dal DB l'istanza ASM deve essere montata...

Io replico: fatto sta che però lo status in v$instance.status resta inalterato a STARTED!

Comunque, sì in effetti lo status BLOCKED mi blocca tutte le connessioni via listener (avevo un ricordo errato), anche quelle locali. Credevo che perlomeno le connessioni "AS SYSDBA" venissero risparmiate dal blocco, giusto per consentire di portare l'istanza da STARTED a MOUNT/OPEN. Invece non è così... e non capisco perché.

Apro un thread sulla questione del listener.ora, per avere un parere su come le cose funzionino
 
 
0 #12 Alasondro 2010-02-02 11:57
lo status BLOCKED viene impostato dall'istanza ed indica il fatto che un database non è in grado di accettare connessioni e questo in genere è causato dal fatto che ci si trova in condizione di nomount oppure di mount in modalità restricted.
L'istanza ASM come sappiamo non monterà mai un database, monta gruppi di dischi, quindi essa verrà sempre mostrata in stato BLOCKED, perchè l'amministrazione di una istanza ASM è intesa da effettuarsi nel server di pertinenza e non da remoto come dicevi tu.
Per poter ovviare a ciò esiste quel flag UR=A che consente di potersi connettere ad un'istanza BLOCKED via listener

dalla 11G il problema pare non si ponga piu perchè l'ASM risulterà UNBLOCKED

come già ti dicevo, l'istanza ASM è started già in nomount ma non monta alcunchè;
perchè i disk groups possano essere visti ed usati dal DB l'istanza ASM deve essere montata...
 
 
0 #11 Roberto 2010-02-01 16:56
Beh direi comunque che mi confermi che per Oracle l'istanza è in stato STARTED (ovvero NOT MOUNTED) e l'istanza ASM si dice che monta i disk groups (volumi), terminologia mutuata dal gergo sistemistico.
 
 
0 #10 hillrudy 2010-01-29 17:25
Ne ho qui una che è stata fatta partire con startup senza opzioni, e il valore di STATUS è STARTED. Ora non posso provare, ma penso che aprirla col mount non cambi un granché.
Rimango comunque dell'opinione che queste distinzioni siano un po' forzate perché stiamo parlando di un filesystem e non di un database, e che si può fare un parallelismo o un'analogia, che non vuol dire identità.
 
 
0 #9 Roberto 2010-01-29 09:37
Lo status BLOCKED di un servizio indica solo che non è possibile connettersi a detto servizio via listener da macchine diverse da quelle dove gira il listener. E' un comportamento generale che si verifica con la "registrazione dinamica dei servizi" nel listener, non è specifico di ASM, e non vedo come si possa dedurre da "listener status blocked" => "instance status mounted".
Per tagliare la testa al toro, siccome io non ho in gestione alcuna database con ASM, potreste dirmi che cosa contiene il campo v$instance.status e come cambia eventualmente il valore a seconda che si attivi l'istanza ASM con startup MOUNT o startup OPEN?
 
 
0 #8 Alasondro 2010-01-27 14:42
a conferma del discorso che facevamo e che mi è venuto in mente proprio intervenendo nel post di Ciuoto,
se si verifica il listener si vedrà che l'istanza di ASM è sempre in blocked proprio perchè è in mount e monta diskgroups
 
 
0 #7 Roberto 2010-01-26 17:38
L'ASM non conosco quasi per nulla (e infatti ho infilato lo strafalcione che con NOMOUNT l'istanza ASM monta i volumi).
Ho trovato comunque la nomenclatura un po' confusa e cercavo di dare un maggior rigore alla medesima; d'altra parte chi meglio può giudicare la bontà di uno scritto che quello che ignora l'argomento?

Nel frattempo visto che conosco poco l'argomento cerco di aiutare Ciuoto a risolvere i suoi problemi con l'ASM ("Problemi in fase di migrazione da 10203 a 10204" nel Forum)... e infatti non ci riesco :-(
 
 
0 #6 Alasondro 2010-01-26 17:15
se esegui lo startup nomount di una istanza ASM, l'istanza parte ma senza montare alcun diskgroups

se esegui invece startup mount l'istanza ASM parte montando i diskgroups specificati nel parametro dell'init file ASM_DISKGROUPS

lo startup open ha le stesse funzionalità di startup mount

nella 11G è stata introdotta la possibilità di startup mount restricted che consente di montare in maniera esclusiva i diskgroups specificati in ASM_DISKGROUPS

in linea di massima, non volermene eh :-), credo invece sia proprio giusto anche tecnicamente dire che l'istanza ASM è in mount, perchè è proprio ciò che fa, cioè la sua funzione è esattamente montare diskgroups

le 3 fasi sono state mantenute da Oracle per analogia col concetto già esistente di istanza e per il fatto che una, ASM, parte come giustamente dici con INSTANCE_TYPE=ASM mentre l'altra con INSTANCE_TYPE=RDBMS (il default)
 
 
0 #5 Roberto 2010-01-26 15:12
Premessa: non mandarmi a ...

Allora, mi correggo:
Un'istanza si dice che monta un database, è poi il database in stato di mount.
Analogamente un'istanza ASM monta i disk groups di ASM.

Direi che Oracle ha scelto di permettere, se INSTANCE_TYPE=ASM, lo start dell'istanza indifferentemen te con le varie opzioni del comando STARTUP (NOMOUNT, MOUNT e OPEN), o semplicemente con STARTUP (che sottintende il default OPEN). Di fatto è sempre solo un startup d'istanza, cioè non c'è l'apertura di un control file (MOUNT) nè tanto meno l'apertura di un database (OPEN), e infatti l'output del comando è "ASM instance started".

Credo che non sia correttissimo dire: un'istanza ASM è anche tecnicamente in stato di mount, solo perché la si attiva specificando MOUNT.