Cómo solucionar el error que se produce en un trabajo de copia de seguridad de Oracle desde Symantec Backup Exec. La tarea de backup de Oracle a través de RMAN se queda en ejecución, sin copiar nada, indefinidamente.
- Error y causas que lo producen.
- Solucionar error en backup de Symantec de Oracle con RMAN cuando un trabajo se queda en ejecución indefinidamente y no acaba.
- Detener todos los trabajos de backup de Oracle.
Error y causas que lo producen
El error que se produce, que no es un error como tal puesto que Symantec no muestra errores, si no que la tarea se queda en ejecución de forma indefinida e incluso no se puede cancelar desde el propio Symantec:
Como se ve en la captura anterior, el trabajo queda en ejecución pero no se copian datos, y permanece así indefinidamente. Al quedarse la tarea en ejecución indefinidamente, si no tenemos configurada una cancelación automática transcurrido un tiempo desde su inicio, puede generar que el resto de copias no se hagan.
Symantec lanzará un script en RMAN de Oracle para realizar el backup a cinta en caliente. Este script ejecutará una copia de seguridad de Oracle. El problema se produce cuando esta copia de seguridad no finaliza y se queda «en ejecución» en Oracle indefinidamente.
El error suele ser debido a que algún fichero de la bd ha quedado abierto y bloqueado por otro proceso, por ello no puede accederse a él en modo backup y el trabajo queda a la espera del desbloqueo.
Solucionar error en backup de Symantec de Oracle con RMAN cuando un trabajo se queda en ejecución indefinidamente y no acaba.
La forma más rápida de solucionar este problema es comprobando qué copia se está ejecutando en RMAN de Oracle de forma indefinida y cancelándola. A continuación explicamos cómo hacerlo.
En primer lugar necesitaremos tener acceso a la consola SQL Plus de Oracle. En equipos Linux, accediendo con el usuario oracle:
su – oracle
Y ejecutando el siguiente comando:
sqlplus /nolog
En el caso de que no se encuentre el comando «sqlplus» tendremos que acceder a la carpeta donde esté el ejecutable de SQLPlus de la instalación de Oracle. En una instalación de Oracle 11g sobre Linux Red Hat, puede estar en:
cd /opt/oracle/product/11.2.0
Accederemos a esta consola SQLPLus. Una vez dentro nos conectaremos a la base de datos con un usuario con permisos suficientes, con el comando:
1 |
con / as sysdba |
O bien indicando el usuario, contraseña y base de datos (instancia) concretos con:
1 |
con usuario/contraseña@sid_bd as sysdba; |
Una vez conectados, nos lo indicará con el texto «Connected», comprobaremos que la base de datos está en estado correcto, en OPEN, ejecutando la consulta SQL:
1 |
select status from v$instance; |
Nos devolverá:
OPEN
Ahora ejecutaremos otra consulta SQL para obtener los trabajos de copia de seguridad RMAN en ejecución:
1 |
select b.sid, b.serial#, a.spid from v$process a, v$session b where a.addr = b.paddr and client_info like 'rman%'; |
Lo normal es que devuelva un registro con los datos (SID, SERIAL, SPID) del trabajo de impresión que ha quedado en ejecución pero sin acabar. En la siguiente imagen vemos que la consulta SQL anterior devuelve también el canal de RMAN usado por el backup (ch0):
En la consulta anterior devolverá el SID y el SPID del trabajo, utilizaremos estos datos para forzar la cancelación del trabajo. Para ello, ejecutaremos:
1 |
alter system kill session '1374,18959' immediate; |
En la sentencia anterior cambiaremos, como es lógico, el 1374 por el SID que nos haya devuelto la consulta anterior y el 18959 por el SPID de la consulta anterior.
Si el trabajo se elimina correctamente mostrará el mensaje:
System altered.
Si volvemos a ejecutar la consulta para obtener los trabajos en curso de RMAN nos deberá aparecer vacía:
En principio, con este proceso, el trabajo de copia de seguridad de Symantec de Oracle se cancelará automáticamente, transcurridos unos segundos. Con esto el problema quedaría solucionado.
Detener todos los trabajos de backup de Oracle
En caso de que con el proceso anterior el trabajo de copia de seguridad no se cancele en Oracle, probablemente tengamos que detener la base de datos Oracle y finalizar todos los trabajos de copia. Este proceso es más «delicado» que el anterior, dado que dejaremos a los usuarios sin acceso a la BD durante el tiempo que tarden en finalizarse los trabajos (que pueden ser horas). Pero si no queda más remedio, la recomendación es hacer un backup de otra forma (un export al menos) y detener la base de datos cuando no haya usuarios conectados, como explicamos a continuación.
Una vez realizado el backup mediante otro método (export, copia de la máquina virtual, etc.), y una vez que sepamos que no habrá usuarios conectados, detendremos la base de datos. Para ello accederemos, como hemos hecho anteriormente, a SQL Plus con un usuario con permisos suficientes, y ejecutaremos el siguiente comando:
1 |
shutdown immediate |
Esto detendrá la base de datos y desbloqueará cualquier fichero bloqueado (motivo por el que posiblemente no finalizara algún backup).
Una vez detenida la base de datos, si había algún fichero bloqueado, puede que nos muestre el mensaje:
ORA-01149: cannot shutdown – file 1 has online backup set
ORA-01110: data file 1: ‘/datafile/o1_mf_system_dc0.dbf’
Tardará unos segundos en detener la base de datos, una vez detenida podremos ejecutar el siguiente comando para finalizar los trabajos de copia de seguridad, que ahora sí se finalizarán al haberse desbloqueado los ficheros:
1 |
alter database end backup; |
El proceso anterior puede que tarde un buen rato, incluso horas, en función de los trabajos pendientes de finalizar:
Cuando acabe mostrará el mensaje:
Database altered
En algunos casos «extremos», si el bloqueo de ficheros lo realiza el propio sistema operativo, puede que tras detener la base de datos y detener los trabajos de backup haya que reiniciar el equipo con:
shutdown -r now