Agregar discos a un diskgroup en ASM. SQL*Plus VS asmca

El problema de esta semana ha venido a raíz de hacer el duplicado de una base de datos.

En un primer momento había pasado por alto que el problema fuera por el almacenamiento. ¿Quién se iba a imaginar que el estudio previo no era correcto?

Lanzo el duplicate, y después de haber copiado ya 20 datafiles, falla el proceso. ¡Qué raro! 🤨

Limpio todo bien, vuelvo a lanzar el proceso y vuelve a fallar, justo en el mismo punto, en el mismo datafile. Más raro aún.

Lo primero que llegué a pensar es que había algún problema con ese datafile en el origen, pero pronto me di cuenta que no había espacio suficiente para realizar el duplicado completo. Cuando se llenaba el diskgroup, fallaba.

El Error

input datafile file number=00056 name=/oracle/jaendb/datos/D_DATOS023.dbf
RMAN-03009: failure of backup command on prmy1 channel at 02/18/2025 16:43:27
ORA-17628: El servidor de Oracle remoto ha devuelto el error Oracle 19505
ORA-19505: fallo al identificar el archivo ""
channel prmy1 disabled, job failed on it will be run on another channel
RMAN-03009: failure of backup command on prmy2 channel at 02/18/2025 16:43:27
ORA-17628: El servidor de Oracle remoto ha devuelto el error Oracle 19505
ORA-19505: fallo al identificar el archivo ""
channel prmy2 disabled, job failed on it will be run on another channel
released channel: prmy1
released channel: prmy2
released channel: stby
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 02/18/2025 16:43:27
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script
 
RMAN-03009: failure of backup command on prmy1 channel at 02/18/2025 16:43:27
ORA-17628: El servidor de Oracle remoto ha devuelto el error Oracle 19505
ORA-19505: fallo al identificar el archivo ""
RMAN-03009: failure of backup command on prmy2 channel at 02/18/2025 16:43:27
ORA-17628: El servidor de Oracle remoto ha devuelto el error Oracle 19505
ORA-19505: fallo al identificar el archivo ""

Un error un tanto genérico. Por más que mire trazas, alert log de la base de datos, del origen y del destino, del crs, del clúster… En ningún sitio encontré nada referente al llenado del diskgroup.

Me lo encontré tal que así

NAME	            TOTAL_MB    FREE_MB	  % Libre    TYPE
----------------- ---------- ---------- ---------- ------
DG_DATOS   	      827392	   3579 ,432564008 EXTERN
DG_FRA		      206848     206689  99,923132 EXTERN

La Teoría

En nuestros sistemas con ASM usamos ASMFD (ASM Filter Driver) que nos facilita bastante la vida.
Seguro que os ha pasado que tenéis discos asignados a un diskgroup, y cuando se reinicia el sistema pierden la vinculación que tenían. Es para volverse locos. Hay que tenerlo todo bien organizado y seteado, para no olvidar/perder esa relación.

Para esto tenemos ASMFD, para que un reinicio del servidor no nos afecte.

¿Qué es ASM Filter Driver?

Oracle ASMFD es una herramienta que simplifica y nos facilita la administración y configuración de los discos al eliminar la necesidad de volver a vincularlos con ASM cada vez que un servidor se reinicia.

Cuando etiquetamos un disco con ASMFD oracle inserta una información en las cabeceras de los discos para tener una referencia y aunque el disco cambie de punto de montaje al reiniciar el servidor, siempre va a saber donde localizarlo.

⚠️ A partir de Oracle Grid Infrastructure 12 c Release 2 (12.2), ASMFD y ASMLIB no son compatibles entre si. Si quieres usar ASMFD debes desinstalar ASMLIB.

Pasos Previos

¿Por qué te cuento todo esto sobre Filter Driver?

Porque antes de añadir los discos al diskgroup, vamos a necesitar varias tareas previas y te quiero poner un poco en contexto.

1. Localización y descubrimiento de los discos

El equipo de almacenamiento nos proporciona los discos, los descubre en el servidor y nos pasa la información de ellos.

ccm.1648-06.servidor1-jaendb-mdm12 214GB /dev/sdca
ccm.1648-06.servidor1-jaendb-mdm13 214GB /dev/sdcb
ccm.1648-06.servidor1-jaendb-mdm14 214GB /dev/sdcc
ccm.1648-06.servidor1-jaendb-mdm15 214GB /dev/sdcd
2. Etiquetado de discos con ASMFD

Teniendo identificados los discos y el punto de montaje que tienen dentro del servidor los vamos a etiquetar, para que tengan un nombre más reconocible.
Como anteriormente mencioné, esto hace que Oracle inserte unas marcas en las cabeceras de esos discos, para identificar qué punto de montaje corresponde a cada uno de sus discos. De ahí que sean reconocibles a pesar de un reinicio del servidor.

asmcmd afd_label JAENDB_DG_DATOS_DISCO9 /dev/sdca
asmcmd afd_label JAENDB_DG_DATOS_DISCO10 /dev/sdcb
asmcmd afd_label JAENDB_DG_DATOS_DISCO11 /dev/sdcc
asmcmd afd_label JAENDB_DG_DATOS_DISCO12 /dev/sdcd

Tras esta acción, ASMFD genera en un directorio estas relaciones que nosotros también podemos consultar en cualquier momento.

[root@servidor1 ~]# cd /dev/oracleafd/disks/
[root@servidor1 disks]# ls
JAENDB_DATOS_DISCO10  JAENDB_DATOS_DISCO3  JAENDB_DATOS_DISCO7  JAENDB_FRA_DISCO2  
JAENDB_DATOS_DISCO11  JAENDB_DATOS_DISCO4  JAENDB_DATOS_DISCO8  JAENDB_FRA_DISCO3  
JAENDB_DATOS_DISCO12  JAENDB_DATOS_DISCO5  JAENDB_DATOS_DISCO9  JAENDB_FRA_DISCO4  
JAENDB_DATOS_DISCO1   JAENDB_DATOS_DISCO2  JAENDB_DATOS_DISCO6  JAENDB_FRA_DISCO1 
[root@servidor1 disks]# cat JAENDB_DATOS_DISCO9
/dev/sdca

En caso de reinicio del servidor, el contenido de estos ficheros cambiará y se asocia al nuevo punto de montaje que el servidor haya asignado a cada disco durante el arranque.

El Procedimiento

Vamos ahora a meternos en faena. Ya tenemos los discos en el servidor y están etiquetados. Solo falta añadirlos al diskgroup. Pero hay varias formas de añadirlos… ¿Cómo lo hacemos?

Existen diferentes alternativas. Puedes elegir la que más fácil, sencilla o rápida te parezca.

1. SQL*Plus

Podemos agregar los discos mediante SQL*Plus de diferentes formas.
Usando el asterisco a modo de comodín para añadir varios discos en una sola sentencia.
Usar una sentencia para cada disco
O por último, en una sola instrucción añadir todos los discos que pretendemos agregar al diskgroup.

ALTER DISKGROUP DG_DATOS ADD DISK 'AFD:JAENDB_DATOS_DISCO*';

ALTER DISKGROUP DG_DATOS ADD DISK 'AFD:JAENDB_DATOS_DISCO9';
ALTER DISKGROUP DG_DATOS ADD DISK 'AFD:JAENDB_DATOS_DISCO10';
ALTER DISKGROUP DG_DATOS ADD DISK 'AFD:JAENDB_DATOS_DISCO11';
ALTER DISKGROUP DG_DATOS ADD DISK 'AFD:JAENDB_DATOS_DISCO12';

ALTER DISKGROUP DG_DATOS ADD DISK
     'AFD:JAENDB_DATOS_DISCO9',
     'AFD:JAENDB_DATOS_DISCO10',
     'AFD:JAENDB_DATOS_DISCO11',
     'AFD:JAENDB_DATOS_DISCO12';
2. asmca (linea de comando)

Otra forma de hacerlo es con la herramienta asmca en modo silencioso, sin necesidad de usar el entorno gráfico. (Importante hacerlo con el usuario GRID de sistema operativo)

asmca -silent -addDisk -diskGroupName DG_DATOS -disk 'AFD:JAENDB_DATOS_DISCO9'
asmca -silent -addDisk -diskGroupName DG_DATOS -disk 'AFD:JAENDB_DATOS_DISCO10'
asmca -silent -addDisk -diskGroupName DG_DATOS -disk 'AFD:JAENDB_DATOS_DISCO11'
asmca -silent -addDisk -diskGroupName DG_DATOS -disk 'AFD:JAENDB_DATOS_DISCO12'
3. asmca (entorno gráfico)

Tendremos que tener configuradas las X-Windows para poder lanzar esta aplicación de manera gráfica.

[grid@servidor1 ~]$ export DISPLAY=localhost:1.0
[grid@servidor1 ~]$ asmca

Cuando se abre la ventana, veremos la siguiente pantalla. Bastará con pulsar sobre «Grupos de Discos» en el panel izquierdo y sobre el diskgroup que queramos actuar, botón derecho del ratón para seleccionar la opción «Agregar Discos…«

Cargará esta nueva ventana, en la que podemos ver los discos que ya son miembros del diskgroup, y cuales son candidatos o elegibles para ser añadidos. Solamente tenemos que marcar los que queramos y pulsar abajo en el botón Aceptar.

Tanto desde SQL*Plus como con asmca, además de agregar discos, se pueden realizar otras muchas tareas, como el borrado de discos o diskgroups, modificación de tamaño, consultas de datos, etc.

Además, para administrar y gestionar todo lo referente a ASM, también podemos usar la consola de comandos, asmcmd.

¿Qué opción te parece mejor? ¿Cuál usas tu habitualmente? ¿SQL*Plus o asmca? ¿Por qué? 🤔

Cardinalidad en ASM – Veo más instancias de las que tengo

Deja un comentario