ORA-00245: Conociendo como ocurre el error

Desde la version de bases de datos oracle 11gR2 la copia de seguridad del controlfile sucede sin tener que holdear las colas de actualizacion del controlfile.
Cuando tenemos una base en single mode o mejor dicho standalone, esta situacion no cambia para nada.
Ahora si nosotros estamos trabajando en RAC (y debido a la cambios que se realizaron para las versiones de bases de datos 11gR2) provocan que cualquier instancia del cluster pueda escribir en el controlfile de manera instantanea.
Es asi que este snapshot del controlfile debe estar disponible (visible) para todas las instancias.
Por que ocurre el error ?
El snapshot del controlfile debe ser accesible para todos los nodos de una base de datos en RAC y si el snapshot no esta, o hay un error en el dispositivo compartido ocurrira que al momento de la copia de seguridad que realiza el RMAN mostrara un error.
Estos siempre ocurriran cuando tomemos un backup usando sqlplus, tengamos configurado un backup del controlfile como AUTOBACKUP o no poseamos una ubicacion compartida.
Ahora veamos unos ejemplos de errores comunes.
Ejemplo 1:
En un ambiente RAC, el controlfile autobackup falla con el error ORA-0245
Autobackup of controlfile in RMAN is failing with error: RMAN-571: =========================================================== RMAN-569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-571: =========================================================== RMAN-3009: failure of Control File and SPFILE Autobackup command on ORA_DISK_1 channel at 10/27/2010 15:08:59 ORA-245: control file backup operation failed
Ejemplo 2:
En un ambiente RAC, el backup controlfile al no estar en un filesystem compartido falla.
SQL> ALTER DATABASE BACKUP CONTROLFILE TO '/u01/app/oracle/product/11.2.0/db_alca/dbs/snapcf_ALCA1.f' REUSE * ERROR at line 1: ORA-245: control file backup operation failed
Ejemplo 3:
En un ambiente RAC, tomando un backup de un standby controlfile en un filesystem no compartido.
SQL> alter database create standby controlfile as '/home/oracle/dataguard/STDBYcfile.ctl';alter database create standby controlfile as '/home/oracle/dataguard/STDBYcfile.ctl' * ERROR at line 1: ORA-245: control file backup operation failed
Ejemplo 4:
En un ambiente RAC, cuando realizamos una copia de nuestro actual controlfile en caliente.
channel ch1: starting datafile copy copying current control file RMAN-571: =========================================================== RMAN-569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-571: =========================================================== RMAN-3009: failure of backup command on 12/07/2011 11:36:42 channel at ch1 ORA-245: control file backup operation failed
Mirando el alertlog me muestra lo siguiente.
Archived Log entry 6354 added for thread 1 sequence 1746 ID 0xbc014bc7 dest 1: Thu Jul 12 15:07:37 2012 Errors in file /u01/app/oracle/diag/rdbms/alca/ALCA1/trace/ALCA1_ora_10816.trc: ORA-00245: control file backup operation failed Thu Jul 12 15:08:59 2012 Thread 1 advanced to log sequen
Mirando en los traces de la base me muestran:
Trace file /u01/app/oracle/diag/rdbms/alca/ALCA1/trace/ALCA1_ora_10816.trc Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_alca System name: Linux Node name: sdat3100lx.somedomain.com Release: 2.6.18-274.17.1.el5 Version: #1 SMP Wed Jan 4 22:45:44 EST 2012 Machine: x86_64 Instance name: ALCA1 Redo thread mounted by this instance: 1 Oracle process number: 99 Unix process pid: 10816, image: oracle@sdat3100lx.somedomain.com (TNS V1-V) *** 2012-07-12 15:07:37.324 *** SESSION ID:(177.51347) 2012-07-12 15:07:37.324 *** CLIENT ID:() 2012-07-12 15:07:37.324 *** SERVICE NAME:(SYS$USERS) 2012-07-12 15:07:37.324 *** MODULE NAME:(backup full datafile) 2012-07-12 15:07:37.324 *** ACTION NAME:(0000012 STARTED68) 2012-07-12 15:07:37.324ORA-00245: control file backup operation failed
Ejemplo 5:
En un ambiente RAC, el backup de RMAN falla si el snapshot controlfile no se realiza en un filesystem compartido.
RMAN-00571: ======================================================== RMAN-00569: ============ ERROR MESSAGE STACK FOLLOWS ============= RMAN-00571: ========================================================= RMAN-03009: failure of resync command on default channel at 03/13/2012 10:19:41 ORA-00245: control file backup operation failed
Como lo solucionamos ?
La solucion es un simple workaround :
Nos logueamos en el RMAN y ejecutamos el comando SHOW ALL y revisamos la linea que dice:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO
Veamos el ejemplo a continuacion:
RMAN> show all; RMAN configuration parameters are: CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 1 DAYS; CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 4; CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE ENCRYPTION FOR DATABASE OFF; # default CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/db_alca/dbs/snapcf_ALCA.f'; # default
Bien, ahora es importante decir:
Si tengo en filesystem los objetos de la base, busco un path compartido.
RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/<SHARE FS>/<PATH>/snapcf_<SID>.f';
Ejemplo
RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u10/share/alca/snapcf/snapcf_alca.f';
Si tengo en ASM los objetos de la base, entonces creo un path nemotecnico y lo guardo ahi.
RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+<DISKGROUP>/<PATH>/snapcf_<SID>.f';
Ejemplo
RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+OCR/ALCA/SNAPCF/snapcf_alca.f';
Me logueo al ASM y lo busco:
ASMCMD> ls OCR/ SAN_ALCA_DG1/ SAN_ALCA_DG2/ SAN_ALCA_DG3/ ASMCMD> cd +OCR/ALCA/SNAPCF ASMCMD> ls snapcf_alca1.f
Espero les sea de utilidad.
Best Regards Latinoamerica & the Wolrd !!
Juan: Gracias por tomarte el tiempo de compartir , la secuencia logica de las instrucciones impecable , un aporte invaluable en nuestro idioma natal.
LikeLike
Gracias a vos por el reconocimiento Anibal, estamos de paso por este mundo, que mejor que compartir lo que uno saber para ayudar a otros !
LikeLike
Muchas gracias por la infirmación…
LikeLike
Hola:
Solo una consulta para saber cual es lo correcto pues veo una discrepancia, o quizas entendi mal.
En un momento , pones el comando:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘+OCR/ALCA/SNAPCF/snapcf_alca.f’;
Luego, cuando pones el chequeo en ASM, se ve:
ASMCMD> ls
OCR/
SAN_ALCA_DG1/
SAN_ALCA_DG2/
SAN_ALCA_DG3/
ASMCMD> cd +OCR/ALCA/SNAPCF
ASMCMD> ls
snapcf_alca1.f
Es decir, en el comando pones el SID del RAC (alca) , pero en ASM se ve el de la instancia 1 (alca1)…esto es asi ?…se pone el nombre del RAC en el CONFIGURE y despues se indica solo el SID cuando se hace el snapshot?..si no es asi, cual seria o correcto en RAC y ASM?.
LikeLike
Estimado, lo que hice es lo siguiente:
1) Siempre se pone las variables para que aparezca el SID del que queres tomar un snapshot.
2) Use el path de OCR en el ejemplo para el que usa ASM y no OCFS o NFS.
3) Dentro de ASM puede ser cualquier path existente o no (Creas uno de tu agrado),
4) Yo use ese como modelo en analogia al OCFS.
Saludos !
Best Regards !
LikeLike