ASM - Déplacement d'une base complète à froid
Cas pratique : une base a été créée dans le mauvais disk group. On la déplace à froid de +DATA01 vers +DATA02.
Sous sqlplus, lister les fichiers existants
SELECT name FROM v$controlfile;
SELECT member FROM v$logfile;
SELECT name FROM v$datafile;
SELECT name FROM v$tempfile;
SHOW PARAMETER SPFILE;
Dans une autre session (on aura besoin de asmcmd en parallèle tout au long de la procédure), créer l'arborescence à la destination
ASMCMD> mkdir +DATA02/MYBASE
ASMCMD> mkdir +DATA02/MYBASE/CONTROLFILE
ASMCMD> mkdir +DATA02/MYBASE/DATAFILE
ASMCMD> mkdir +DATA02/MYBASE/ONLINELOG
ASMCMD> mkdir +DATA02/MYBASE/PARAMETERFILE
ASMCMD> mkdir +DATA02/MYBASE/TEMPFILE
Sous RMAN, déplacer les fichiers
rman target /
RMAN> startup nomount
RMAN> restore controlfile to '+DATA02' from '+DATA01/MYBASE/CONTROLFILE/current.266.1110624765';
trouver le nouveau nom :
ASMCMD> ls DATA02/MYBASE/CONTROLFILE
+DATA02/MYBASE/CONTROLFILE/current.256.1111070599
Changer dans le spfile
RMAN> SQL alter system set control_files='+DATA02/MYBASE/CONTROLFILE/current.256.1111070599' scope= spfile;
Déplacer le spfile (la base le retrouvera automatiquement si on le déplace avec RMAN) et redémarrer la base en MOUNT
RMAN> restore spfile to '+DATA02';
RMAN> shutdown immediate
RMAN> startup mount
Copier les fichiers un par un
RMAN> copy datafile '+DATA01/MYBASE/DATAFILE/system.259.1110624767' to '+DATA02';
Starting backup at 26-JUL-22
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1338 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=+DATA01/MYBASE/DATAFILE/system.259.1110624767
output file name=+DATA02/MYBASE/DATAFILE/system.257.1111071189 tag=TAG20220726T145308 RECID=1 STAMP=1111071191
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 26-JUL-22
Starting Control File and SPFILE Autobackup at 26-JUL-22
piece handle=/u01/app/oracle/homes/OraDB19Home1/dbs/c-742892794-20220726-00 comment=NONE
Finished Control File and SPFILE Autobackup at 26-JUL-22
Renommer le fichier dans le spfile (le nouveau nom est affiché dans la sortie du copy ci-dessus)
RMAN> SQL alter database rename file '+DATA01/MYBASE/DATAFILE/system.259.1110624767' to '+DATA02/MYBASE/DATAFILE/system.257.1111071189';
Lorsque tous les fichiers ont copiés, repasser sous SQLPLUS pour la suite.
Déplacer le TEMPFILE
SQL> shutdown immediate
SQL> startup
SQL> alter system set db_create_file_dest='+DATA02';
SQL> alter tablespace TEMP add tempfile '+DATA02' SIZE 1G autoextend on next 100M maxsize unlimited;
SQL> select file_name from dba_temp_files;
FILE_NAME
--------------------------------------------------------------------------------
+DATA02/MYBASE/TEMPFILE/temp.265.1111074253
+DATA01/MYBASE/TEMPFILE/temp.263.1110624771
SQL> alter database tempfile '+DATA01/MYBASE/TEMPFILE/temp.263.1110624771' drop including datafiles;
Déplacer les REDO LOGS
SQL> select GROUP#,THREAD#,STATUS from v$log;
GROUP# THREAD# STATUS
---------- ---------- ----------------
1 1 INACTIVE
2 1 INACTIVE
3 1 CURRENT
SQL> alter database drop logfile group 1;
SQL> alter database add logfile group 1 '+DATA02' size 300M;
Si le groupe est "CURRENT" ou "ACTIVE", on ne peut pas le supprimer. Switch vers un autre groupe
SQL> alter system switch logfile;
SQL> alter system checkpoint;
Terminer le nettoyage sous asmcmd (les sous-répertoires DATAFILE, TEMPFILE,... ont déjà été supprimés par RMAN)
ASMCMD> rm DATA01/MYBASE/CONTROLFILE/*
You may delete multiple files and/or directories.
Are you sure? (y/n) y
ASMCMD> rm DATA01/MYBASE/PARAMETERFILE/*
You may delete multiple files and/or directories.
Are you sure? (y/n) y
ASMCMD> rm DATA01/MYBASE
Relancer la base pour valider la nouvelle arborescence
SQL> shutdown immediate;
SQL> startup