Migrando una base de datos de filesystem hacia ASM con RMAN
‘Automatic Storage Managemet’ o ASM es una
herramienta que integra un sistema de archivos de de alta disponibilidad y un manejador de discos. Permite una
administración avanzada de almacenamiento y elimina la necesidad de administrar
manualmente discos y archivos de base de datos.
Pueden leer mas sobre ASM aquí.
Evidentemente, proporciona una ventaja superior
comparada con almacenamiento normal de sistema operativo. Es por eso que a continuación
voy a mostrar los pasos necesarios para migrar una base de datos que
actualmente reside en archivos de sistema operativo hacia una instancia ASM.
La única herramienta capaz de realizar esta operación
es RMAN, herramienta ya conocida para realizar tareas de respaldo y recuperación
en una base de datos Oracle, esta herramienta es capaz de interactuar con
ambos tipos de sistema de archivo.
Escenario inicial:
Tengo una instancia de base de datos denominada
orcl, la base de datos actualmente reside en el sistema de archivos ext4,
propio de Linux. También he creado una instancia ASM con el nombre default y un
único diskgruop llamado DATA sobre el cual vamos a migrar los archivos de base
de datos.
Para esta operación vamos a migrar los
siguientes archivos que conforman la base de datos:
- Control Files
- Data Files
- Online Redo Log files
- Temporary files
Las ubicaciones físicas son las siguientes:
Control Files:
SQL> show parameter control_files
NAME TYPE
VALUE
-----------------------------
----------- --------------
control_files string
/oradata/orcl/control01.ctl,
/oradata/orcl/control02.ctl
|
Data Files:
SQL> select file_id,file_name,tablespace_name
from dba_Data_files;
FILE_ID FILE_NAME
TABLESPACE_NAME
----------
------------------------------ --------------------
4 /oradata/orcl/users01.dbf
USERS
3 /oradata/orcl/undotbs01.dbf
UNDOTBS1
2 /oradata/orcl/sysaux01.dbf
SYSAUX
1 /oradata/orcl/system01.dbf
SYSTEM
5 /oradata/orcl/example01.dbf
EXAMPLE
|
Online Redo
Log files:
SQL> select * from v$logfile;
GROUP# STATUS TYPE
MEMBER IS_
----------
------- ------- ------------------------- ---
3 ONLINE /oradata/orcl/redo03.log NO
2 ONLINE /oradata/orcl/redo02.log NO
1 ONLINE /oradata/orcl/redo01.log NO
|
Temporary
files:
SQL> select file_id,file_name,tablespace_name from
dba_temp_files;
FILE_ID FILE_NAME
TABLESPACE_NAME
----------
-------------------------------------- --------------------
1 /oradata/orcl/temp01.dbf
TEMP
|
Paso 1: Migrando Control Files
Para migrar
los Control File debemos establecer como nueva ubicación de estos el disco
+DATA de la instancia ASM mediante el parámetro CONTROL_FILES y luego con la
base de datos desmontada restaurar una copia del archivo actual utilizando
RMAN.
SQL> alter system set control_files='+DATA'
scope=spfile;
System altered.
|
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
|
SQL> startup nomount;
ORACLE instance started.
Total System Global
Area 730714112 bytes
Fixed Size
2256832 bytes
Variable Size
566231104 bytes
Database Buffers
159383552 bytes
Redo Buffers
2842624 bytes
|
Restauramos
el Control File desde RMAN hacia la nueva ubicación en ASM
RMAN> restore controlfile
2> from '/oradata/orcl/control01.ctl';
Starting restore at
05-JUN-16
using target database
control file instead of recovery catalog
allocated channel:
ORA_DISK_1
channel ORA_DISK_1: SID=25
device type=DISK
channel ORA_DISK_1: copied
control file copy
output file
name=+DATA/orcl/controlfile/current.256.913682533
Finished restore at
05-JUN-16
|
Paso 2: Migrando Datafiles
Una vez restaurados los Control Files, podemos
montar la base de datos. En estado MOUNT realizamos un ‘backup as copy’ de los
actuales datafiles e inmediatamente los restauramos hacia la instancia ASM
mediante un ‘switch database to copy’
RMAN> startup mount;
connected to target
database (not started)
Oracle instance started
database mounted
Total System Global
Area 730714112 bytes
Fixed Size 2256832 bytes
Variable Size 566231104 bytes
Database Buffers 159383552 bytes
Redo Buffers 2842624 bytes
|
RMAN> backup as copy database format '+DATA';
Starting backup at
05-JUN-16
allocated channel:
ORA_DISK_1
channel ORA_DISK_1: SID=26
device type=DISK
channel ORA_DISK_1:
starting datafile copy
input datafile file
number=00001 name=/oradata/orcl/system01.dbf
output file
name=+DATA/orcl/datafile/system.257.913682719 tag=TAG20160605T004518 RECID=2
STAMP=913682871
channel ORA_DISK_1:
datafile copy complete, elapsed time: 00:02:35
channel ORA_DISK_1:
starting datafile copy
input datafile file
number=00002 name=/oradata/orcl/sysaux01.dbf
output file
name=+DATA/orcl/datafile/sysaux.258.913682875 tag=TAG20160605T004518 RECID=3
STAMP=913682979
channel ORA_DISK_1:
datafile copy complete, elapsed time: 00:01:55
channel ORA_DISK_1:
starting datafile copy
input datafile file
number=00005 name=/oradata/orcl/example01.dbf
output file
name=+DATA/orcl/datafile/example.259.913682991 tag=TAG20160605T004518 RECID=4
STAMP=913683054
channel ORA_DISK_1:
datafile copy complete, elapsed time: 00:01:05
channel ORA_DISK_1:
starting datafile copy
input datafile file
number=00003 name=/oradata/orcl/undotbs01.dbf
output file
name=+DATA/orcl/datafile/undotbs1.260.913683055 tag=TAG20160605T004518
RECID=5 STAMP=913683064
channel ORA_DISK_1:
datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1:
starting datafile copy
copying current control
file
output file
name=+DATA/orcl/controlfile/backup.261.913683071 tag=TAG20160605T004518
RECID=6 STAMP=913683075
channel ORA_DISK_1:
datafile copy complete, elapsed time: 00:00:07
channel ORA_DISK_1:
starting datafile copy
input datafile file
number=00004 name=/oradata/orcl/users01.dbf
output file
name=+DATA/orcl/datafile/users.262.913683077 tag=TAG20160605T004518 RECID=7
STAMP=913683078
channel ORA_DISK_1:
datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1:
starting full datafile backup set
channel ORA_DISK_1:
specifying datafile(s) in backup set
including current SPFILE
in backup set
channel ORA_DISK_1:
starting piece 1 at 05-JUN-16
channel ORA_DISK_1:
finished piece 1 at 05-JUN-16
piece
handle=+DATA/orcl/backupset/2016_06_05/nnsnf0_tag20160605t004518_0.263.913683079
tag=TAG20160605T004518 comment=NONE
channel ORA_DISK_1: backup
set complete, elapsed time: 00:00:01
Finished backup at
05-JUN-16
|
RMAN> switch database to copy;
datafile 1 switched to
datafile copy "+DATA/orcl/datafile/system.257.913682719"
datafile 2 switched to
datafile copy "+DATA/orcl/datafile/sysaux.258.913682875"
datafile 3 switched to
datafile copy "+DATA/orcl/datafile/undotbs1.260.913683055"
datafile 4 switched to
datafile copy "+DATA/orcl/datafile/users.262.913683077"
datafile 5 switched to
datafile copy "+DATA/orcl/datafile/example.259.913682991"
|
Habiendo
restaurado los datafiles hacia ASM, podemos abrir la base de datos.
RMAN> alter database open;
database opened
|
Hasta este
punto, aún tenemos un hibrido. Ya que los Online Redo Log Files y Temporary
Files aun residen en el sistema de archivos local.
Paso 3: Migrando Online Redo Log Files
Este paso es sencillo pero puede llegar a ser tedioso, según la cantidad de grupos y miembros de grupos de Online Redo Log que tengamos en nuestra base de datos. Lo primero será agregar nuevos miembros por cada grupo hacia la instancia ASM.
SQL> alter database add logfile member '+DATA' to
group 1;
Database altered.
SQL> alter database add logfile member '+DATA' to
group 1;
Database altered.
SQL> alter database add logfile member '+DATA' to
group 2;
Database altered.
SQL> alter database add logfile member '+DATA' to
group 2;
Database altered.
SQL> alter database add logfile member '+DATA' to
group 3;
Database altered.
SQL> alter database add logfile member '+DATA' to
group 3;
Database altered.
|
Se deben agregar
tantos miembros como sea necesario por cada grupo con el objetivo de reemplazar
cada uno de los archivos actuales en el filesystem.
A continuación,
vamos a eliminar los miembros actuales utilizando:
SQL> alter database drop logfile member
'/oradata/orcl/redo03.log';
Database altered.
SQL> alter database drop logfile member
'/oradata/orcl/redo01.log';
Database altered.
SQL> alter database drop logfile member
'/oradata/orcl/redo02.log';
Database altered.
|
Nota importante: No se podrá eliminar un miembro de grupo si el
estado del grupo es ACTIVE o CURRENT. Si este el caso debemos ejecutar SQL>
alter system switch logfile; hasta que el grupo entero se haya archivado o este inactivo.
Paso 4: Migrando Temporary Files
Por último, pero no menos importantes esta los archivos temporales. Este paso ya no implica afectación de la base de datos puesto que la instancia puede estar corriendo y la base de datos estar abierta. Lo que haremos será crear un nuevo TEMPORARY TABLESPACE, redirigir nuestra operaciones hacia este y finalmente eliminar el antiguo TABLESPACE y todo su contenido en sistema de archivos.
SQL> create temporary tablespace tempasm tempfile
'+DATA' size 1G;
Tablespace created.
SQL> alter database default temporary tablespace
tempasm;
Database altered.
|
SQL> drop tablespace temp including contents and
datafiles;
Tablespace dropped.
|
Hasta aquí,
nuestra base de datos ahora reside en una instancia ASM. Donde podemos
disfrutar de las ventajas que ofrece esta herramienta.
Paso 5: Consideraciones finales
Existen parámetros
importantes en una instancia que por la forma en que instalamos nuestra base de
datos apuntaban a un sistema de archivos normal, para una total migración hacia
ASM debemos considerar este tipo de parámetros. En mi caso considerare cambiar
los siguientes:
#ruta de archivos de recuperación,
backups y ruta default de archives
SQL> alter system set
db_recovery_file_dest='+FRA';
System altered.
#ruta para depósito de
Archive Log Files
SQL> alter system set
log_archive_dest_1='LOCATION=+DATA';
System altered.
#otro parámetro importante
podría ser db_create_file_dest si estamos usando OMF
|
Se puede
mantener una base de datos en ambos tipos de sistema de archivos, pero no hay
ventaja alguna en mantener un hibrido. Lo mejor y recomendado por Oracle es
utilizar el manejador de archivos ASM.
Salud! 3:)
Comments
Post a Comment