1. Create and Manage an ASM Instance
Documentación en Tahiti -> Masters Book List -> Database Installation Guide for Linux -> 3 Oracle Grid Infrastructure
2. En Oracle 11gR2, la instancia de ASM se instala con Grid Infrastructure. Normalmente siempre escogeremos la opción de instalar y configurar Grid Infrastructure cuando lanzamos el ejecutable «./runInstaller». No practicaremos este ejercicio de momento porque ya hemos visto un procedimiento más completo en el tutorial «Install Oracle Grid Infrastructure»
3. Manage an ASM Instance
Documentación en Tahiti -> Masters Book List -> Automatic Storage Management Administrator’s Guide -> 3 Administering Oracle ASM Instances
4. Mostramos información de los distintos Disk Groups y discos de ASM
. profile_grid sqlplus / as sysasm
-- Información de los Disk Groups configurados en ASM col name format a10 col path format a15 select group_number, name, state, type, total_mb, free_mb, usable_file_mb, offline_disks from v$asm_diskgroup; -- Información acerca de los discos de ASM col name format a10 col path format a15 select name, path, header_status, mode_status, total_mb, free_mb from v$asm_disk;
5. Veamos los parámetros más destacables de una instancia ASM. Empezamos por el parámetro ASM_DISKGROUP
-- Parámetro ASM_DISKGROUPS -- Controla que Disk Groups que monstan al iniciar una instancia de ASM show parameter asm_diskgroups -- Si creamos un diskgroup automáticamente lo añade al parámetro (porque estamos usando SPFILE) CREATE DISKGROUP TEST EXTERNAL REDUNDANCY DISK 'ORCL:TEST01' NAME TEST01; -- Ahora deberiamos ver el nuevo DG TEST show parameter asm_diskgroups -- Borramos el DG TEST y veremos como se modifica el parámetro DROP DISKGROUP TEST; -- Comprobamos de nuevo la modificación del parámetro show parameter asm_diskgroups
6. El segundo parámetro que veremos, ASM_DISKTRING, es necesario para utilizar discos en ASM fuera de ASMLib
-- Parámetro ASM_DISKSTRING -- Se utiliza para limitar que discos pueden formar parte de ASM -- En nuestro caso, por defecto no está configurado ya que estamos usando ASMLib show parameter asm_diskstring
Vamos a hacer una prueba configurando discos en NFS y luego modificando ASM_DISKSTRING para crear un Disk Group
# Creamos la ubicación para alojar los discos NFS. Para ello hacemos los siguientes pasos como root en RAC1: mkdir -p /u01/nfs_storage vi /etc/exports # Añadimos la siguiente linea a /etc/exports /u01/nfs_storage *(rw,sync,no_wdelay,insecure_locks,no_root_squash) # Arrancamos el servicio nfs chkconfig nfs on service nfs restart
# Ahora debemos configurar el acceso a los discos NFS # Ejecutamos estas instrucciones en ambos nodos RAC1 y RAC2 mkdir -p /u01/nfs_disks chown oracle:oinstall /u01/nfs_disks # Configuramos el fichero /etc/fstab para poder montar el recurso NFS vi /etc/fstab # Añadimos la siguiente linea rac1:/u01/nfs_storage /u01/nfs_disks nfs rw,bg,hard,nointr,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0 0 0 # Montamos el filesystem y damos los permisos adecuados mount /u01/nfs_disks chown -R oracle:oinstall /u01/nfs_disks
# Creamos un par de discos su - oracle dd if=/dev/zero of=/u01/nfs_disks/nfs_disk01 bs=1024 count=100000 dd if=/dev/zero of=/u01/nfs_disks/nfs_disk02 bs=1024 count=100000
-- Modificamos el parámetro ASM_DISKSTRING para poder usar estos discos . profile_grid sqlplus / as sysasm
ALTER SYSTEM SET ASM_DISKSTRING='ORCL:*','/u01/nfs_disks/nfs_disk??'; -- Comprobamos el listado de discos presentes en ASM col name format a10 col path format a25 select name, path, header_status, mode_status, total_mb, free_mb from v$asm_disk; -- Creamos un DG de ejemplo con estos discos CREATE DISKGROUP NFS NORMAL REDUNDANCY FAILGROUP FG1 DISK '/u01/nfs_disks/nfs_disk01' NAME NFS01 FAILGROUP FG2 DISK '/u01/nfs_disks/nfs_disk02' NAME NFS02; -- Limpiamos el entorno. Primero borramos el Disk Group. DROP DISKGROUP NFS; ALTER SYSTEM SET ASM_DISKSTRING='';
# Desmontamos el FS, Paramos el servicio NFS y borramos los directorios # En el nodo RAC2 umount /u01/nfs_disks rm -Rf /u01/nfs_disks # En el nodo RAC1 umount /u01/nfs_disks service nfs stop chkconfig nfs off rm -Rf /u01/nfs_storage rm -Rf /u01/nfs_disks # Borramos las lineas añadidas a /etc/fstab (RAC1 y RAC2) y /etc/export (este último solo en RAC1)
7. El parámetro ASM_POWER_LIMIT controla el nivel por defecto de rebalanceo de los Disk Groups
En versiones 11.2.0.2 (COMPATIBLE.ASM) y superiores este valor puede estar entre 0 y 1024
En versiones 11.2.0.1 e inferiores el valor oscila entre 1 y 11 (que es nuestro caso)
-- Vemos el valor actual del parámetro show parameter asm_power_limit -- Podemos lanzar un rebalancelo manual de un DG indicando la clausula POWER ALTER DISKGROUP RECO REBALANCE POWER 4; -- Mientras se hace el rebalanceo podemos ver el estado actual en V$ASM_OPERATION SELECT * FROM V$ASM_OPERATION;
8. Otro parámetro interesante es ASM_PREFERRED_READ_FAILURE_GROUPS
Este parámetro es útil, por ejemplo, en clusters extendidos para tener afinidad de operciones I/O sobre la cabina más cercana a cada cluster
Supongamos que cada nodo (RAC1 y RAC2) están en dos CPDs distintos y hemos creado un un disco en cada CPD para garantizar la disponibilidad.
-- El disco TEST01 suponemos que se encuentra en la cabina de RAC1 -- El disco TEST02 suponemos que se encuentra en la cabina de RAC2 -- Creamos el DISKGROUP TEST CREATE DISKGROUP TEST NORMAL REDUNDANCY FAILGROUP FG1 DISK 'ORCL:TEST01' NAME TEST01 FAILGROUP FG2 DISK 'ORCL:TEST02' NAME TEST02; -- Modificamos el parámetro ASM_PREFERRED_READ_FAILURE_GROUPS ALTER SYSTEM SET ASM_PREFERRED_READ_FAILURE_GROUPS='TEST.FG1' sid='+ASM1'; ALTER SYSTEM SET ASM_PREFERRED_READ_FAILURE_GROUPS='TEST.FG2' sid='+ASM2'; -- Limpiamos el entorno DROP DISKGROUP TEST; ALTER SYSTEM RESET ASM_PREFERRED_READ_FAILURE_GROUPS sid='+ASM1'; ALTER SYSTEM RESET ASM_PREFERRED_READ_FAILURE_GROUPS sid='+ASM2';
9. Vamos a parar y levantar la instancia de ASM.
En nuestro caso, como tenemos los discos OCR y Voting Disk en ASM, debemos hacer una parada ordenada con crsctl (nota Metalink 984663.1). Podríamos usar SHUTDOWN ABORT, pero no lo hagáis.
El procedimiento correcto es utilizar el comando crsctl.
# Paramos ASM y todos los recursos del CRS (usuario root) su - root /u01/app/11.2.0/grid/bin/crsctl stop crs # Una vez parado, el SO nos devuelve el prompt, así que levantamos de nuevo el CRS y ASM /u01/app/11.2.0/grid/bin/crsctl start crs
10. En esta versión podemos utilizar la vista V$ACTIVE_SESSION_HISTORY
En este vista se guarda la actividad de las sesiones activas cada segundo. (Jugaremos con ella en la sección de Performance)
-- Veamos un listado de los porcentajes de actividad de las sesiones de la última hora select session_id, sql_id, session_state, event, count(*), round(ratio_to_report(count(*)) over() * 100,1) pct from v$active_session_history where sample_time > sysdate-1/24 group by session_id, sql_id, session_state, event order by count(*) desc /