Con mucho retraso, pero finalmente ayer hice el examen.
Así que, tenemos un logo mas !!

Con mucho retraso, pero finalmente ayer hice el examen.
Así que, tenemos un logo mas !!

Una de las principales diferencias que vamos a encontrar cuando nos encontremos en un RAC es que aparecen un monton de nuevos procesos daemon en el sistema operativo que apriori no sabemos para que sirven. En esta entrada vamos a echar un vistazo rápido a estos procesos.
Entre estos procesos, los mas destacables son:
Los procesos LCK manejan las peticiones que no son parte del cache-fusión. Además de esto mantiene una lista de los elementos bloqueados que utilizará para validarlos durante la recuperación de la instancia.
Solamente puede haber un único proceso lck por instancia.
El lock monitor (LMON) es el proceso responsable de monitorizar el global enqueue.
Es el responsable de la reconfiguración de los bloqueos de los recursos del cluster cuando una instancia entre o sale del cluster además de ser el responsable del dynamic lock remastering. También es el responsable de comprobar si un nodo está muerto e iniciar la reconfiguración lo antes posible.
LMON generará un fichero de traza cada vez que ocurra una reconfiguracion (as opposed to
remastering of a subset of locks).
El lock manager server (también llamado global cache service process) es el responsable de transmitir los bloques entre las instancias para las peticiones de cache-fusion.
En una petición consistent-read el LMS primero hará un rollback del bloque creando una consstent read (CR) de bloque y enviará esa versión del bloque por la interconexión al proceso foreground remoto.
Además de esto, el LMS interactúa con el LMD (Lock Manager Daemon Process) para obtener las peticiones de bloqueos.
Una instancia puede tener entre 1 y 26 procesos LMS. El número de procesos se puede fijar con el parámetro GCS_SERVER_PROCESSES y es un parámetro dependiente del numero de CPUS. En el momento del arranque se marca en CPU_COUNT/4.
Este proceso debe de correr con la máxima prioridad en el S.O (scheduling priority set to Real Time)
El Automatic Storage Management (ASM) Cluster File System CSS (ACFS) es un proceso Nuevo de la 11g Release 2 que entrega los cambios de miembros del CSS al ASM, estos cambios son necesarios para que el ASM mantenga la consistencia con el cluster.
El Atomic Control File to Memory Service (ACMS) ) es un proceso Nuevo de la 11g Release 2 que se asegura que las updates del SGA son correctos globalmente o globalmente abortados (evento de fallo)
Los procesos Global Transaction (GTXn) es un proceso Nuevo de la 11g Release 2 que ayudan a mantener información global sobre las transacciones globales (XA) atraves del cluster.
Los LM Heartbeat Monitor (LMHB) son un procesos Nuevo de la 11g Release 2 que se encargan de monitorizar que los LMON, LMD, and LMSn funcionan correctamente sin bloqueos
También nuevo en la 11g Release 2, cada pocos segundos se envían pings entre las instancias, el tiempo del ping es recopilado y medido
El proceso Oracle RAC Management (RMSn) lleva a cabo varias tareas como puede ser crear los recursos de un RAC cuando una instancia se añade al cluster
El Remote Slave Monitor (RSMN) background process administra la creación de procesos esclavos y la comunicación entre sus corrdinadores. Estos procesos realizan tareas en nombre de un proceso de coordinación corriendo en otra instancia de clúster .
Hoy vamos a ver otra de estas entradas sencillas que nos pueden llegar a ser de utilidad llegado el caso
Hay veces ( especialmente en los momentos del parcheado) que queremos saber la version de los componentes del cluster. En estos casos podemos tener varios binarios en la máquina y que sean distintos a el software que está corriendo, o distintas versiones entre distintos componentes del cluster, para ello tenemos las opción query del crsctl .
Las opciones que nos serán útiles son:
Algunos ejemplos de la salida son:
[grid@rac1 ]# crsctl query crs releaseversion Oracle High Availability Services release version on the local node is [11.2.0.4.0] [grid@rac1 ]# crsctl query crs activeversion Oracle Clusterware active version on the cluster is [11.2.0.4.0] [grid@rac1 ]# crsctl query crs softwareversion Oracle Clusterware version on node [rac1] is [11.2.0.4.0] En single node no [grid@rac1 ]# crsctl query has releaseversion Oracle High Availability Services release version on the local node is [11.2.0.4.0]
Una vez tenemos un dispositivo bajo /dev/asm/ podemos trabajar con el como si de un disco normal fuera, pero, para poder trabajar en un sistema en cluster necesitaremos ACFS o una solución de terceros.
Oracle lanza nuevos procesos para las instancias de ASM que tienen asociados filesystems ACFS
Estos procesos son :
00:00:04 asm_vdbg_+ASM1 00:00:00 asm_vmb0_+ASM1 00:00:00 asm_vbg0_+ASM1 00:00:43 asm_acfs_+ASM1
Este proceso es el encargado de pasarlas peticiones del ASM al driver de ASDM.
Es tan importante que si muriera de manera no planificada tiraría abajo la instancia ASM
Es un pool de procesos worker que son los que se encargan de las peticiones entre ASM y ADVM
El nombre es muy similar al anterior,, pero el otro acaba en G y estos en numero
Gestionan todas las transiciones del estado de los miembros del cluster en el ACFS
Gestionan todas las transiciones del estado de los miembros del cluster en el ACFS
The Volume Membership Background processes (VMB0) plays the role of an I/O barrier and I/O fencing function. Interestingly, during an ASM instance failure, this process continues to exist until the ADVM driver has had a chance to write out pending I/O. +ASM_vmb_
Hoy vamos a ver un ejemplo de los comando seas habituales que solemos hacer en un ASM
ASMCMD
ASMCMD> lsdg
SQLPLUS
SQL> column name format a20; SQL> select NAME,ALLOCATION_UNIT_SIZE,STATE,TYPE,TOTAL_MB,FREE_MB from v$asm_diskgroup NAME ALLOCATION_UNIT_SIZE STATE TYPE TOTAL_MB FREE_MB ---------- -------------------- ---------- ------ ---------- ---------- ASMFS 1048576 MOUNTED EXTERN 1019 403 DATA01_PRUEBA 1048576 MOUNTED EXTERN 2246 267 OCRVOTING 1048576 MOUNTED EXTERN 1019 623 REDO 1048576 MOUNTED EXTERN 499 404
ASMCMD
ASMCMD> lsdsk -p -G DATA01_PRUEBA Group_Num Disk_Num Incarn Mount_Stat Header_Stat Mode_Stat State Path 2 1 3915953579 CACHED MEMBER ONLINE NORMAL /dev/oracleasm/disks/ASM01 2 0 3915953576 CACHED MEMBER ONLINE NORMAL /dev/oracleasm/disks/DATA_PRUEBA ASMCMD> lsdsk -G DATA01_PRUEBA Path /dev/oracleasm/disks/ASM01 /dev/oracleasm/disks/DATA_PRUEBA
SQLPLUS
SQL> select PATH,STATE,NAME from v$asm_disk where name like '%PRUEBA%'; PATH STATE NAME ---------------------------------------- ---------- -------------------- /dev/oracleasm/disks/DATA_PRUEBA NORMAL DATA01_PRUEBA_0000 /dev/oracleasm/disks/ASM01 NORMAL DATA01_PRUEBA_0001
ASMCMD
ASMCMD> lsdsk --candidate -p Group_Num Disk_Num Incarn Mount_Stat Header_Stat Mode_Stat State Path 0 5 3915953571 CLOSED FORMER ONLINE NORMAL /dev/oracleasm/disks/ASM02 0 4 3915953570 CLOSED FORMER ONLINE NORMAL /dev/oracleasm/disks/ASM03 0 1 3915953567 CLOSED PROVISIONED ONLINE NORMAL /dev/oracleasm/disks/ASM04 0 0 3915953566 CLOSED PROVISIONED ONLINE NORMAL /dev/oracleasm/disks/ASM05
SQLPLUS
column state format a10; column HEADER_STATUS format a20; column path format a30; SQL> select STATE,PATH,HEADER_STATUS from v$asm_disk where header_status !='MEMBER'; STATE PATH HEADER_STATUS -------- -------------------------------------------------- ------------ NORMAL /dev/oracleasm/disks/ASM05 PROVISIONED NORMAL /dev/oracleasm/disks/ASM02 FORMER NORMAL /dev/oracleasm/disks/ASM03 FORMER NORMAL /dev/oracleasm/disks/ASM04 PROVISIONED
Para poder eliminar un diskgroup este debe de estar montado.
En caso de querer eliminarlo desmontado deberemos de ponerel flag “forcé”
SQL> drop diskgroup FSARCHPRUEBA force including contents; Diskgroup dropped.
En este caso creamos un grupo de redundancia HIGH, por lo que necesitamos 3 failure groups
SQLPLUS
CREATE DISKGROUP DATA HIGH REDUNDANCY FAILGROUP controller1 DISK '/dev/oracleasm/disks/ASM01' NAME ASM01, '/dev/oracleasm/disks/ASM02' NAME ASM02 FAILGROUP controller2 DISK '/dev/oracleasm/disks/ASM03' NAME ASM03, '/dev/oracleasm/disks/ASM04' NAME ASM04 FAILGROUP controller3 DISK '/dev/oracleasm/disks/ASM05' NAME ASM05 ATTRIBUTE 'au_size'='4M', 'compatible.asm' = '11.2', 'compatible.rdbms' = '11.2';
Ahora creamos un grupo con external
CREATE DISKGROUP REDO EXTERNAL REDUNDANCY DISK '/dev/oracleasm/disks/REDO01' NAME REDO01 ATTRIBUTE 'au_size'='4M', 'compatible.asm' = '11.2', 'compatible.rdbms' = '11.2';
ASMCMD
En asmcmd la creación del diskgroup se hace mediante el comando mkdg, pero los parámetros han de ser pasados en un fichero xml
ASMCMD (Se hace mediante la sintaxsis en xml)
Chdg fichero-cambios.xml
SQLPLUS
SQL> alter diskgroup DATA01_PRUEBA add disk '/dev/oracleasm/disks/ASM05'; Diskgroup altered. SQL> select PATH,STATE,NAME from v$asm_disk where name like '%PRUEBA%'; PATH STATE NAME -------------------------------------------------- -------- ------------------------------ /dev/oracleasm/disks/DATA_PRUEBA NORMAL DATA01_PRUEBA_0000 /dev/oracleasm/disks/ASM05 NORMAL DATA01_PRUEBA_0002 /dev/oracleasm/disks/ASM01 NORMAL DATA01_PRUEBA_0001 Quitamos un disco
ASMCMD (Se hace mediante la sintaxsis en xml)
chdg fichero-cambios.xml
SQLPLUS
Para eliminarse se usa la columna NAME y no PATH
SQL> alter diskgroup DATA01_PRUEBA drop disk DATA01_PRUEBA_0001;
Diskgroup altered.Comprobar ficheros abiertos de en ASM
ASMCMD> lsof DB_Name Instance_Name Path +ASM +ASM2 +ocrvoting.255.4294967295 asmvol +ASM2 +asmfs/ADVMFS1.256.888838797 prueba prueba2 +data01_prueba/prueba/controlfile/current.256.888313451 prueba prueba2 +data01_prueba/prueba/datafile/sysaux.260.888313489 prueba prueba2 +data01_prueba/prueba/datafile/system.259.888313463 prueba prueba2 +data01_prueba/prueba/datafile/undotbs1.261.888313519 prueba prueba2 +data01_prueba/prueba/datafile/undotbs2.267.888578953 prueba prueba2 +data01_prueba/prueba/datafile/users.263.888313549 prueba prueba2 +data01_prueba/prueba/onlinelog/group_1.257.888313455 prueba prueba2 +data01_prueba/prueba/onlinelog/group_2.258.888313459 prueba prueba2 +data01_prueba/prueba/onlinelog/group_3.264.888315899 prueba prueba2 +data01_prueba/prueba/onlinelog/group_4.265.888315903 prueba prueba2 +data01_prueba/prueba/tempfile/temp.262.888313531