ASM – Administering ASM Disk Groups

Hoy vamos a trabajar un poco con las instancias de ASM y la manera en que podemos desenvolvernos con la linea de comandos.
Vamos a comenzar cargando las variables de ambiente.

$ cat asm.sh
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_asm
export ORACLE_SID=+ASM
export PATH=$PATH:$ORACLE_HOME/bin
export EDITOR=vi

$. ./asm.sh

Comenzamos por loguearnos a la terminal de administracion de ASM usamos el comando asmcmd.

$ asmcmd
ASMCMD>

Ahora podemos listar los comandos que tenemos disponibles para operar con ASMCMD

ASMCMD> c
      commands:
      cd
      du
      find
      help
      ls
      lsct
      lsdg
      mkalias
      mkdir
      pwd
      rm
      rmalias

Vistas Utiles en instancia ASM

Cuando trabajamos desde la instancia de ASM podemos consultar las vistas asociadas, entre las cuales yo elegi las siguientes:

V$ASM_DISK Muestra informacion de cada disco que se encuentra en los diskgroups de cada instancia.
V$ASM_DISKGROUP Muestra informacion para cada diskgroup montado por instancia.
V$ASM_CLIENT Muestra una fila para cada instancia de base de datos con un grupo de discos administrados por la instancia de ASM.
V$ASM_TEMPLATE Muestra una fila con el contenido de objetos de asm asociados a un diskgroup por instancia.

SQL> select * from V$ASM_TEMPLATE;

GROUP_NUMBER ENTRY_NUMBER REDUND STRIPE S NAME
------------ ------------ ------ ------ - -------------------------
	   2		0 UNPROT COARSE Y PARAMETERFILE
	   2		1 UNPROT COARSE Y DUMPSET
	   2		2 UNPROT FINE	Y CONTROLFILE
	   2		3 UNPROT COARSE Y ARCHIVELOG
	   2		4 UNPROT FINE	Y ONLINELOG
	   2		5 UNPROT COARSE Y DATAFILE
	   2		6 UNPROT COARSE Y TEMPFILE
	   2		7 UNPROT COARSE Y BACKUPSET
	   2		8 UNPROT COARSE Y AUTOBACKUP
	   2		9 UNPROT COARSE Y XTRANSPORT
	   2	       10 UNPROT COARSE Y CHANGETRACKING

V$ASM_CLIENT

SQL> col INSTANCE_NAME format a30
SQL> col SOFTWARE_VERSION format a30
SQL> col COMPATIBLE_VERSION format a30
SQL> set line 150
SQL> select * from V$ASM_CLIENT;

GROUP_NUMBER INSTANCE_NAME  DB_NAME  STATUS  SOFTWARE_VERSION COMPATIBLE_VERSION
------------ -------------- -------- ---------- ----------- ----------------
	   2 OPT2L1N	    OT2L1N   CONNECTED	10.2.0.4.0    10.2.0.4.0
	   1 OPT2L1N	    OT2L1N   CONNECTED	10.2.0.4.0    10.2.0.4.0

V$ASM_DISK

Vemos los discos miembros y su path en el operativo.

Cuando agregamos discos en el operativo, podemos utlizar esta query para verificar que discos miembros tengo disponibles para crear Diskgroups.

SQL> set line 120
col path format a35
col name format a25
select name, path, group_number from v$asm_disk;SQL> SQL> SQL> 

NAME			  PATH				      GROUP_NUMBER
------------------------- ----------------------------------- ------------
DARPRO_DG1_LV1		  ORCL:DARPRO_DG1_LV1				 1
DARPRO_DG1_LV2		  ORCL:DARPRO_DG1_LV2				 1
DARPRO_DG2_LV1		  ORCL:DARPRO_DG2_LV1				 2
DARPRO_DG3_LV1		  ORCL:DARPRO_DG3_LV1				 3
DARPRO_DG4_LV1		  ORCL:DARPRO_DG4_LV1				 4
DARPRO_DG5_LV1		  ORCL:DARPRO_DG5_LV1				 5
DARPRO_DG1_LV3		  ORCL:DARPRO_DG1_LV3				 1

7 rows selected.

Vemos los discos miembros, su path en el operativo, si esta ONLINE, su tamaño y espacio libre entre otras cosas.

SQL> select name, path, mode_status, state, disk_number, total_mb, free_mb
from v$asm_disk;  2  

NAME			       PATH					MODE_ST STATE	 DISK_NUMBER   TOTAL_MB    FREE_MB
------------------------------ ---------------------------------------- ------- -------- ----------- ---------- ----------
DARPRO_DG1_LV1		       ORCL:DARPRO_DG1_LV1			ONLINE	NORMAL		   0	 102400     102349
DARPRO_DG1_LV2		       ORCL:DARPRO_DG1_LV2			ONLINE	NORMAL		   1	 102400     102349
DARPRO_DG1_LV3		       ORCL:DARPRO_DG1_LV3			ONLINE	NORMAL		   2	  51200      51149
DARPRO_DG2_LV1		       ORCL:DARPRO_DG2_LV1			ONLINE	NORMAL		   0	  35840      35790
DARPRO_DG3_LV1		       ORCL:DARPRO_DG3_LV1			ONLINE	NORMAL		   0	  35840      35790
DARPRO_DG4_LV1		       ORCL:DARPRO_DG4_LV1			ONLINE	NORMAL		   0	  35840      35790
DARPRO_DG5_LV1		       ORCL:DARPRO_DG5_LV1			ONLINE	NORMAL		   0	  51200      51150

7 rows selected.

V$ASM_DISKGROUP

SQL> select name, state, type, total_mb, free_mb from v$asm_diskgroup;

NAME			       STATE	   TYPE     TOTAL_MB	FREE_MB
------------------------------ ----------- ------ ---------- ----------
DARPRO_DG1		       MOUNTED	   NORMAL     256000	 255847
DARPRO_DG2		       MOUNTED	   EXTERN      35840	  35790
DARPRO_DG3		       MOUNTED	   EXTERN      35840	  35790
DARPRO_DG4		       MOUNTED	   EXTERN      35840	  35790
DARPRO_DG5		       MOUNTED	   EXTERN      51200	  51150

CREACION Y MODIFICACION DE DISCKGROUPS Y DISCOS MIEMBROS

Como me gusta trabajar con la linea de comandos, voy aprovechar este espacio para agregar algunas sentencias sql, que nos serviran para agregar, quitar y modificar diskgroups.Estas tareas tambien las podemos hacer con el gridcontrol y con el comando dbca, donde elegimos la opcion > configurar instancia ASM.
Ahi podemos agregar y quitar discos solamente.

También asi algunas tareas como rebalanceo, para que segun los recursos con que disponemos puedan ser mejor aprovechados.

Creamos el diskgroup.

CREATE DISKGROUP DARPRO_DG1 EXTERNAL REDUNDANCY DISK 'ORCL:DARPRO_DG1_LV1';

Cuando agregamos un disco a un diskgroup, ponemos primero el nombre del diskgroup y luego del disco que aparece en el campo PATH de la vista v$asm_disk.

ALTER DISKGROUP DARPRO_DG1 ADD DISK 'ORCL:DARPRO_DG1_LV2';

En el caso de querer agregar dos discos miembros a un diskgroup.

ALTER DISKGROUP DARPRO_DG1 ADD DISK 'ORCL:DARPRO_DG1_LV2', 'ORCL:DARPRO_DG1_LV3';

Cuando tenemos agregados los discos, por tareas de mantenimiento u otros eventos podemos montar y desmontar los discos de la siguinete manera:

ALTER DISKGROUP ALL DISMOUNT;
ALTER DISKGROUP ALL MOUNT;
ALTER DISKGROUP data DISMOUNT;
ALTER DISKGROUP data MOUNT;

DROPEO DE DISCOS

Para dropear un diskgroup tenemos dos caminos, o dropeamos los discos miembros y despúes el diskgroup, o dropeamos el diskgroup y su contenido.

ALTER DISKGROUP DARPRO_DG1 DROP DISK DARPRO_DG1_LV3;

O dropeamos el diskgroup y todos sus contenidos.

DROP DISKGROUP DARPRO_DG1 INCLUDING CONTENTS;

REBALANCEO DE DISCOS

Cuando nos dan espacio nuevo de storage, por ejemplo 100GB y solo disponibilizamos 50GB, podemos hacer un resize del tamaño con el siguiente sql al tamaño que deseamos, por ejemplo 70GB 65GB o 100GB como en el ejemplo.

ALTER DISKGROUP DARPRO_DG1 RESIZE DISK DARPRO_DG1_LV2 SIZE 100G;

En el caso que agregamos un disco miembro a un diskgroup, el espacio alocado comienza a rebalancear, a repartirse en el nuevo miembro, en el espacio libre disponible.Por ejemplo tenemos un diskgroup de 100GB integrado por dos disco de 50G y una instancia de base de datos que ocupa 90GB, cuando agregamos un nuevo miembro , por ejemplo de 50GB, el ASM va a ver una unidad, un diskgroup de 150GB, y va a dividir los 90GB , en los tres discos ahora miembros. O sea que cada disco tendra aproximado 30GB de datos en cada disco miembro de 50GB.

Este rebalanceo también ocurre cuando extraemos un disco siempre y cuando esxista una relacion que nos permita quitarlo y vuelva a rebalancear.

Esto lo podemos hacer por medio del setencia REBALANCE mediante un ALTER DISKGROUP. En el caso que no elijamos un rebalanceo de manera manual, tal cual lo estamos por ejecutar, se ejecutara el rebalanceo automatico que toma del parametro ASM_POWER_LIMIT.

SQL> sho parameter ASM_POWER_LIMIT

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
asm_power_limit 		     integer	 1

En nuestra instancia de ASM se encuentra en el menor balanceo posible, provocando que rebalacee en mayor tiempo y ocupe menos recursos.

Bien, ejecutemos ahora en un modo manual 5.

ALTER DISKGROUP DARPRO_DG1 REBALANCE POWER 5;

PARAMETROS

Desde la instancia de ASM podemos observar la configuracion del parametro asm_diskgroups, que nos indica cuales son los diskgroup que se montaran de manera automatica en el inicio.

SQL> show parameter disk

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
asm_diskgroups			     string	 DARPRO_DG1, DARPRO_DG2, DARPRO
						 _DG3, DARPRO_DG4, DARPRO_DG5
asm_diskstring			     string
disk_asynch_io

Nos vemos en la proxima !

21 thoughts on “ASM – Administering ASM Disk Groups

  1. Hola Juan Andrés, quisiera saber si tienes forma de ver el estado del REBALANCE, cuanto porcentaje tiene de avance en un tiempo x.

    Atte.

    Like

    1. Como estas, mira podes verlo con el siguiente query:

      SQL> select * from v$asm_operation;

      GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES
      ———— —– —- ———- ———- ———- ———- ———- ———–
      1 REBAL RUN 1 1 447 44025 2070 21

      Recorda que cuando agregas un disco , comeinza a rebalancear con el standar que se encuentran en los parametros de ASM .

      Si al revisar encontras con que es mucho el tiempo, y tenes recursos utiliza la siguiente orden y aumenta la veloccidad del rebalanceo.

      ALTER DISKGROUP data REBALANCE POWER 7;

      Podes llevarlo segun los recursos que tengas (asi podes ver un incremento real) hasta 11.

      Tenes un ejemplo en https://burzaco.wordpress.com/2009/10/13/agregar-disco-a-un-diskgroup-existente/#more-120

      Donde agrego un disco y lo rebalanceo.

      Espero te sea de utilidad.

      Te invito tambien a que te suscribas al blog donde por correo te llegaran los nuevos articulos .

      Saludos,

      Juan Andres.

      Like

  2. Es necesario reiniciar el server cuando termino de hacer un alter diskgroup add, o no es necesario?

    Like

    1. Como te va:
      No es necesario reiniciar el ASM por que este proceso ocurre en caliente, miralo desde el lado que ASM es un Volume Manager , una de sus tantas cualidades que nos permite en casos criticos o no agregar espacio sin tener que reiniciar servicios 7×24.
      Te invito a que te sumes al blog para que recibas los articulos publicados.
      Saludos,
      JA.

      Like

  3. Hola.. siempre visito tu bloq y me interesa recibir los articulos, son muy interesante para los que trabajamos en el mundo de Oracle.. muchas gracias

    Like

  4. Mirtha:
    Lo que debes hacer para suscribirte es ir al pie del blog (abajo) y te encontraras con “suscripcion por correo ” ahi completas con tu direccion de correo y te llegarran los articulos cuando son lanzados. Gracias !

    Like

  5. Muy interesante tu blog, felicitaciones. Queria preguntarte lo siguiente: Cuando se borra un disk en ASM o un diskgroup con todos sus discos y quiero reutilizar ese espacio para crear otro diskgroup u otros discos como debo hacerlo, porque una vez borrado ya no se muestran como discos candidatos. Gracias

    Like

  6. Hola.
    es posible agregar “n” diskgroups”?
    Es decir, quiero crear un diskgroup con un nombre diferente dedicado a una instancia adicional.

    Like

    1. La respuesta para crear diskgroups con nombres diferentes, es correcta. Se pueden crear los diskgroups con diferentes nombres hasta 256 por instancia ASM, y a cada uno de ellos agregarle discos, para crecer en el storage. Si te queda duda, posteala y te respondo. Tambien te invito a suscribirte al blog, Saludos

      Like

  7. Hola Juan.
    Me parece excelente tu pagina. los artículos que tienes me han ayudado mucho, espero sigas publicando mas.

    Un saludo desde México.

    Like

  8. Hola Juan , un saludo, como puedo agregar mas espacio al diskgroup de un ASM (DATA, REDO, RECO) quiero crear una base de datos en formato ASM y me dice ke no tengo suficiente espacio en DATA , pd. soy novato!!

    Like

    1. Francisco:
      La salucion es que pidas mas storage o sea una lun, seria importante conocer el OS en el que se encuentra la base oracle para poder decirte que pasos debes seguir.
      Saludos desde Argentina.

      Like

  9. Hola Juan, me parece muy interesante tu articulo y para ser sincero, el hecho de que este en español y sea muy precioso me sorprende. Ahora bien, quizás me puedas ayudar, soy nuevo en el mundo del +ASM (en mi anterior trabajo no administraba este tipo de Bases de Datos). Me están solicitando que revise la fragmentacion de un diskgroup que esta al 94% de su capacidad o, indicarles si por el contrario, deben solicitar espacio adicional. Cual seria la recomendación mas sencilla y practica que podrías darme para validar el tipo de mantenimiento que hay que realizarle a ese diskgroup?. PD: El S.O. es SunOS y la versión del +ASM es 11.2.0.3.

    Saludos desde Venezuela!

    Like

  10. Hola Juan muchas gracias por la informacion. Queria preguntarte lo siguiente: tengo que agregar 40 discos a un diskgroup. Como seria mas optimo para el ASM agregar todos los 40 discos en un comando?. Agregarlo por grupo o uno a uno?.. Esto para el tema del rebalanceo. Gracias por tu colaboracion

    Like

  11. Hola Juan, agregue un disco nuevo ASM al diskgroup el cual se incorporo correctamente y me muestra que tiene el espacio disponible pero no puedo agregar datafiles , me dice que no hay espacio disponible. ( exhausto ) . Hay que reiniciar. ?? Desde ya muchas gracias.

    Like

  12. Cual es el procedimiento que estas utlizando para agregar mas datafiles al tablespace que se encuentra en ASM ??
    Que error te muestra el alert de la base ?
    Algun error en el log del ASM ?
    Con esto pudo ayudarte, el ASM jamas se reinicia por que es un modelo de alta disponibilidad.
    Saludos !

    Like

Comments are closed.