Renombrando un Diskgroup en Oracle ASM
En más de alguna ocasión me he
topado con la necesidad de renombrar un Diskgroup de ASM, si el Diskgroup está vacío
(no se ha almacenado ningún archivo de base de datos) la opción más sencilla -opinión
personal- es eliminarlo y volver a
crearlo con el nombre correcto. Pero, ¿que sucede si ya tenemos archivos de
base de datos en este Diskgroup?
La solución a este problema surgió con la versión 11gR2 de
ASM y se mejoró en la versión 12c. Para renombrar un Diskgroup utilizaremos la
herramienta renamedg y la complementáremos con la
sentencia ALTER DISKGROUP ..
RENAME DISKS.
A continuación, un sencillo ejemplo para renombrar un ASM
Diskgroup y ASM Disks que lo conforman.
Escenario:
Nuestra base de datos de producción está utilizando como
almacenamiento el disco +DATOS1, por control de la aplicación se requiere que el
nombre sea +DATA1. Los datafiles residentes en el Diskgroup son:
FILE_NAME
--------------------------------------------
+DATOS1/ORCL12C/DATAFILE/datos.256.926010987
+DATOS1/ORCL12C/DATAFILE/datos.257.926011275
Pasos previos:
- Apagar la base de datos.
- Si la base de datos esta en Real Application Cluster, debemos apagar todas las instancias.
Actualmente tenemos los siguientes Disgroups y Disks:
NAME NAME
------------- ------------------
DATA DATA_0000
DATOS1 DATOS1_0000
Paso 1: Desmontar el DiskGroup de todas las instancias
activas:
SQL> alter diskgroup DATOS1 dismount;
Diskgroup altered.
Paso 2: utilizar la herramienta renamedg para
modificar el nombre del Diskgroup a interno. RENAMEDG es un utilitario incluido
en los binarios de la instalación de Grid Infraestructure:
Paso 2.1: creación del archivo de configuración para ser
usado en el fase 2
[grid@oel-primary Desktop]$ renamedg phase=one dgname=DATOS1
newdgname=DATA1 asm_diskstring='/dev/oracleasm/disks/*' config=/tmp/data1.conf verbose=true
Parsing parameters..
Parameters in effect:
Old DG name : DATOS1
New
DG name : DATA1
Phases :
Phase
1
Discovery str : /dev/oracleasm/disks/*
Clean : TRUE
Raw
only : TRUE
renamedg operation:
phase=one dgname=DATOS1 newdgname=DATA1 asm_diskstring=/dev/oracleasm/disks/* config=/tmp/data1.conf
verbose=true
Executing phase 1
Discovering the group
Performing discovery
with string:/dev/oracleasm/disks/*
Identified disk
UFS:/dev/oracleasm/disks/DATA02 with disk number:0 and timestamp (33041132
-829995008)
Checking for
hearbeat...
Re-discovering the
group
Performing discovery
with string:/dev/oracleasm/disks/*
Identified disk
UFS:/dev/oracleasm/disks/DATA02 with disk number:0 and timestamp (33041132
-829995008)
Checking if the
diskgroup is mounted or used by CSS
Checking disk
number:0
Generating
configuration file..
Completed phase 1
Terminating kgfd
context 0x7faa4ee150a0
Paso 2.2: Ejecutar los cambios según archivo de configuración
creado en fase 1.
[grid@oel-primary Desktop]$ renamedg phase=two
dgname=DATOS1 newdgname=DATA1 config=/tmp/data1.conf verbose=true
Parsing parameters..
Parameters in effect:
Old DG name : DATOS1
New
DG name : DATA1
Phases :
Phase
2
Discovery str : (null)
Clean : TRUE
Raw
only : TRUE
renamedg operation:
phase=two dgname=DATOS1 newdgname=DATA1 config=/tmp/data1.conf verbose=true
Executing phase 2
Looking for
/dev/oracleasm/disks/DATA02
Modifying the header
Completed phase 2
Terminating kgfd
context 0x7fa7c6e220a0
Paso 3: montar nuevamente el Diskgroup:
Si montamos nuevamente el disco (ahora DATA1) y verificamos
los discos que lo integran podremos ver que aún conservan los nombres
anteriores:
SQL> alter
diskgroup DATA1 mount;
Diskgroup altered.
SQL> select
a.name, b.name
from
v$asm_diskgroup a, v$asm_disk b
where a.group_number = b.group_number;
NAME
NAME
--------------------
------------------------------
DATA
DATA_0000
DATA1 DATOS1_0000
Los nombres de ASM Disks no afectan la operación, pero por
orden y buenas practicas debemos mantener los nombres con una referencia al
Diskgroup que integran.
Paso 4 (opcional): este paso está disponible solo para la versión
12c y es una de las nuevas características en ASM, para renombrar los ASM Diks en
un Diskgroup hacemos uso de la sentencia ALTER
DISKGROUP <name >RENAME DISKS…
Antes de poder renombrar debemos montar el DiskGroup en modo
restringido:
SQL> alter diskgroup DATA1 dismount;
Diskgroup altered.
SQL> alter diskgroup DATA1 mount restricted;
Diskgroup altered.
SQL> alter diskgroup DATA1 rename disks all;
Diskgroup altered.
Después de esto, desmontamos y montamos en modo normal el
diskgroup y podremos verificar que los nombres de discos ya corresponden al
Diskgroup renombrado.
SQL> select
a.name, b.name
from
v$asm_diskgroup a, v$asm_disk b
where a.group_number = b.group_number;
NAME NAME
-------------------- ------------------------------
DATA DATA_0000
DATA1
DATA1_0000
Paso 5: nuestro nuevo disco está listo para ser usado, sin
embargo, la base de datos originalmente hacía referencia al disco +DATOS1 para los
nombres de DataFiles, por lo que es necesario, antes de poder trabajar con los
datos, renombrar los nombres de los DataFiles para que apunten a la nueva ubicación.
En la base de datos en modo MOUNT:
alter database rename file
'+DATOS1/ORCL12C/DATAFILE/datos.257.926011275' to
'+DATA1/ORCL12C/DATAFILE/datos.257.926011275';
alter database rename file '+DATOS1/ORCL12C/DATAFILE/datos.256.926010987'
to '+DATA1/ORCL12C/DATAFILE/datos.256.926010987';
Finalmente, podemos abrir nuestra base de datos y habremos
finalizado la operación de renombrado.
Notas importantes:
- Renombrar un disco que ya posea datos puede complicarse tanto según el tipo de datos que almacene. En este ejemplo nuestro disco solo contenía Datafiles pero por ejemplo podemos almacenar archivos de parámetros, Online Redo Log Files, etc. Por lo tanto, los pasos para cambiar la ruta de la ubicación de los archivos variar según el tipo de archivo. Con las siguientes consultas podemos fácilmente generar los scripts necesarios para cambiar nombres de DataFiles y Online Redo Log Files.
SQL>
select 'alter database rename file ''' || name || ''' to ''+DATA' ||
substr(name,instr(name,'/',1,1)) || ''';' from v$datafile ;
SQL>
select 'alter database rename file '''|| member ||''' to ''+DATA' ||
substr(member,instr(member,'/',1,1)) || ''';' from v$logfile;
- Si cambiamos nombres de Diskgroup en un ambiente RAC, debemos modificar los recursos a nivel de clusterware, el nuevo nombre del Diskgroup se registra solo como recurso, pero el nombre anterior queda registrado como “huérfano” por lo que debemos eliminarlo mediante la cláusula: $ crsctl delete resource…
- Debemos modificar todas las características y parámetros de la base de datos que hagan referencia al antiguo nombre de Diskgroup para evitar cualquier problema de ubicación.
Referencia de las clausulas para renombrar DiskGroups y Disks:
Feliz semana,
Comments
Post a Comment