Como crear un asm sin tener discos

Hoy vamos a ver como hacerle trampas a Oracle para levatar una instancia de ASM sin tener discos en el servidor.

Supongamos que el ORACLE_HOME del grid lo tenemos en /u01/app/oracle/product/19c/grid, los pasos a seguir serian


-- == Fake disk 
sudo dd if=/dev/zero of= /u01/app/oracle/product/19c/grid/ASMFAKE.img bs=1M count=5000
sudo losetup /dev/loop1  /u01/app/oracle/product/19c/grid/ASMFAKE.img
 

  
sudo /usr/sbin/asmtool -C -l /dev/oracleasm -n FAKE1  -s /dev/loop1 -a force=yes
sudo /usr/sbin/oracleasm scandisks
sudo /usr/sbin/oracleasm listdisks

Con esto, cuando ejecutemos el asmca vermos que hay un disco llamado FAKE1 que no es otra cosa que el disc ASMFAKE que hemos creado.

Uso de variables de entorno en script sde rman

Hoy vamos a ver una entrada muy rapida para dummies.

Muchas veces queremos hacer que el log de rman tenga una variable de entorno ( usualmente a fecha),haciendo algo similar a

#!/bin/bash
HORA=`date +%Y%m%d_%H:%M:%S`
rman  cmdfile restore_${ORACLE_SID}.cmd  log logs/${HORA}_restore_${ORACLE_SID}.log

Pero cuando vamos al subdirecorio de logs nos encontramos con que nos ha creado un fichero llamado ${HORA}_restore_${ORACLE_SID}.log

Como solucionamos esto?

La solucion no pasa por jugar con las comillas sino con el uso del parametro MSGLOG
Simplemente tendremos que cambiar nuestro script por

#!/bin/bash
HORA=`date +%Y%m%d_%H:%M:%S`
rman  cmdfile restore_${ORACLE_SID}.cmd  MSGLOG logs/${HORA}_restore_${ORACLE_SID}.log

Y funcionara tal y como queremos

Comandos basicos del RAC II añadir bases de datos

Hoy vamos a seguir con la serie de entradas de comandos basicos de administracion de RAC.
Hoy vamos a centrarnos en añadir bases de datos y mover los recursos del cluster

Añadir una base de datos

Para anadir una base de datos esta tendra que tener en el init.ora los parametros

  • CLUSTER_DATABASE=TRUE
  • CLUSTER_DATABASE_INSTANCES=2
  • TEST1.INSTANCE_NUMBER=1
  • TEST2.INSTANCE_NUMBER=2
  • TEST1.THREAD=1
  • TEST2.THREAD=2
  • TEST1.UNDO_TABLESPACE=’UNDOTBS1′
  • TEST2.UNDO_TABLESPACE=’UNDOTBS2′

    or supuesto,deberemos de contar con tantos grupos de UNDO y threads de REDO como nodos vayamos a tener.
    Una vez tenemos esto, la registraremos en el crs con los comandos

    srvctl add database  -db TEST-instance IBTEST1 -spfile +DATA/TEST/spfileTEST.ora -diskgroup "DATA,FRA,REDO1,REDO2"-oraclehome $ORACLE_HOME
    srvctl add instance -d TEST-i TEST1 -n rac1.pamplona.name
    srvctl start database -db TEST
    srvctl add instance -d TEST-i TEST2 -n rac2.pamplona.name
    srvctl start  instance -db IBTES -i IBTEST2 
    

    Mas entradas para dummies sobre RAC:
    Comandos basicos en Orace RAC
    Comandos basicos del RAC II
    Eliminar un nodo del rac

  • Problemas con el fichero crsgenconfig_params al intentar extender un rac

    Hoy vamos a ver un caso curioso .

    En el proceso de añadir un nodo en el rac nos encontramos con el error

    2021/02/10 20:14:04 CLSRSC-594: Executing installation step 4 of 19: 'GenSiteGUIDs'.
    oracle.ops.mgmt.cluster.ClusterException: scp: /u01/app/19c/grid/crs/install/crsgenconfig_params: No such file or directory
    
    2021/02/10 20:14:06 CLSRSC-180: An error occurred while executing the command '/u01/app/19c/grid/bin/cluutil -copy -sourcefile /u01/app/19c/grid/crs/install/crsgenconfig_params -fromnodesfile /tmp/7pqMR5nHtf -destfile /u01/app/19c/grid/crs/install/crsgenconfig_params -nodelist rac1'
    2021/02/10 20:14:06 CLSRSC-571: failed to copy file '/u01/app/19c/grid/crs/install/crsgenconfig_params' from node 'rac2' to file '/u01/app/19c/grid/crs/install/crsgenconfig_params' on local node
    Died at /u01/app/19c/grid/crs/install/crsutils.pm line 15809.
    

    Afortunadamente el error es claro , nos falta el fichero /u01/app/19c/grid/crs/install/crsgenconfig_params del nodo del que estamos extendiendo el rac, lo que hace que falle el punto 4 de la ejecucion del root.sh
    Si buscamos por internet veremos varias entradas en las que nos indican que es un problema en la descompresion de los paquetes originales, lo que no nos ayuda.
    La ayda viene en la nota 12.2 GI Upgrade fails with : CLSRSC-635: Failed to get EXTENDED_CLUSTER_SITE_GUIDS (Doc ID 2259672.1)
    En la que nos indican que solo hemos de poner el EXTENDED_CLUSTER_SITE_GUIDS en ese fichero y reejecutar el root.sh

    La idea parece buena, pero … cual deberia de ser el contenido de ese fichero ?

    El contenido de ese fichero es el siguiente

    EXTENDED_CLUSTER_SITE_GUIDS=rac
    

    Donde, el valor del campo EXTENDED_CLUSTER_SITE_GUIDS es el mismo que aparece en el campo CLUSTER_NAME del fichero /opt/app/19c/grid/crs/install/crsconfig_params

    CLUSTER_TYPE=DB
    VNDR_CLUSTER=false
    OCR_LOCATIONS=
    CLUSTER_NAME=rac
    NODE_NAME_LIST=rac1,rac2
    PRIVATE_NAME_LIST=
    VOTING_DISKS=
    #VF_DISCOVERY_STRING=%s_vfdiscoverystring%
    

    Mas informacion en

    • 12.2 GI Upgrade fails with : CLSRSC-635: Failed to get EXTENDED_CLUSTER_SITE_GUIDS (Doc ID 2259672.1)

    restaurar una base de datos desde el backup de una Standby

    Hoy vamos a ver como anticipar un error en lo que puede ser una recuperacion larga

    Supongamos que hemos recuperado una base de datos desde una standby database.
    Si ese es el caso, cuando intentemos abrir la base de datos despues del recover tendremos un error

    ORA-01666: control file is for a standby database
    
    
    

    Como lo prevenimos

    Vamos a ver primero como prevenir este error, y es simplemente añadiendo la clausula primary a la cadena que vamos a usar para recuperar la base de datos desde ese standby backup
    rman target /
    restore primary controlfile from '/backup/SID_STBY/standby_controlfile_backup';
    exit;
    

    Y pensareis, esto esta muy bien, pero.... y si ya tengo el backup restaurado

    Como lo solucionamos ?

     ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
    ALTER DATABASE ACTIVATE STANDBY DATABASE;
    select name,open_mode ,database_role from v$database;
    alter database open resetlogs