[ORACLE] Duplicado TEST1 (11.2.0.1) a TEST2 en la misma máquina, sin conexión a target ni catálogo, a partir de backup de rman en disco
Tenemos una bbdd 11.2.0.1 con sid TEST1. En la misma máquina queremos duplicarla a TEST2 a partir de un backup con rman a disco. No tenemos catálogo de rman.
Pasos
-----
1º Hacemos el backup full de TEST1 a disco. En este caso, TEST1 utiliza FRA, por lo que la ubicación del backup generado será el área de fra.
2º Crearmos las rutas de directorios para ubicar la base de datos TEST2.
3º Necesitamos un fichero de password para TEST2, lo podemos copiar de TEST1 y cambiar el nombre.
4º Necesitamos un init.ora para TEST2, con el parámetro db_name=TEST2 únicamente.
5º Levantamos la instancia TEST2 en nomount a partir del initTEST2.ora (TEST1 no hace falta que esté levantada)
6º Conectamos a RMAN con la TEST2 como auxiliary:
rman auxiliary /
7º Ejecutamos el script de duplicado:
DUPLICATE DATABASE TO TEST2
UNTIL TIME "TO_DATE('08/04/2015 11:39:20', 'DD/MM/YYYY HH24:MI:SS')"
SPFILE
set control_files='/u01/app/oracle/oradata/TEST2/control01.ctl','/u01/app/oracle/flash_recovery_area/TEST2/control02.ctl'
set db_file_name_convert='TEST1','TEST2'
set log_file_name_convert='TEST1','TEST2'
BACKUP LOCATION '/u01/app/oracle/flash_recovery_area/TEST1/backupset/2015_04_08'
;
Notas: no se puede usar until scn en este caso concreto
La fecha del until time es la fecha del ultimo backup de archivelogs de test1
Si da este error:
SQL> alter database recover if needed
2 start until time 'APR 08 2015 11:39:20' using backup controlfile;
start until time 'APR 08 2015 11:39:20' using backup controlfile
*
ERROR en linea 2:
ORA-01841: el valor (completo) del a?o debe estar entre -4713 y +9999, y no debe ser igual a 0
Es porque hay que configurar la NLS_LANG:
[oracle@localhost duplicado_TEST1_a_TEST2]$ export NLS_LANG=.UTF8
Tambien puede dar este error:
ERROR at line 1:
ORA-10878: parallel recovery slave died unexpectedly
Pasos
-----
1º Hacemos el backup full de TEST1 a disco. En este caso, TEST1 utiliza FRA, por lo que la ubicación del backup generado será el área de fra.
2º Crearmos las rutas de directorios para ubicar la base de datos TEST2.
3º Necesitamos un fichero de password para TEST2, lo podemos copiar de TEST1 y cambiar el nombre.
4º Necesitamos un init.ora para TEST2, con el parámetro db_name=TEST2 únicamente.
5º Levantamos la instancia TEST2 en nomount a partir del initTEST2.ora (TEST1 no hace falta que esté levantada)
6º Conectamos a RMAN con la TEST2 como auxiliary:
rman auxiliary /
7º Ejecutamos el script de duplicado:
DUPLICATE DATABASE TO TEST2
UNTIL TIME "TO_DATE('08/04/2015 11:39:20', 'DD/MM/YYYY HH24:MI:SS')"
SPFILE
set control_files='/u01/app/oracle/oradata/TEST2/control01.ctl','/u01/app/oracle/flash_recovery_area/TEST2/control02.ctl'
set db_file_name_convert='TEST1','TEST2'
set log_file_name_convert='TEST1','TEST2'
BACKUP LOCATION '/u01/app/oracle/flash_recovery_area/TEST1/backupset/2015_04_08'
;
Notas: no se puede usar until scn en este caso concreto
La fecha del until time es la fecha del ultimo backup de archivelogs de test1
Si da este error:
SQL> alter database recover if needed
2 start until time 'APR 08 2015 11:39:20' using backup controlfile;
start until time 'APR 08 2015 11:39:20' using backup controlfile
*
ERROR en linea 2:
ORA-01841: el valor (completo) del a?o debe estar entre -4713 y +9999, y no debe ser igual a 0
Es porque hay que configurar la NLS_LANG:
[oracle@localhost duplicado_TEST1_a_TEST2]$ export NLS_LANG=.UTF8
Tambien puede dar este error:
ERROR at line 1:
ORA-10878: parallel recovery slave died unexpectedly
Comentarios
I need to migrate all the data because of a corrupted dbf file with a few kb's of space (strange problem) and i don't know what is the best approach for the problem.
I tried to make a full export of the database and then import in the new one, but i got a lot of erros trying to grant user roles and privileges that doesn't exists in the new db.
I will try with RMAN
You can try exporting/importing only application or user schemas, not full database.