17 octubre 2008

Creación de backups automaticos con Oracle 10g R2

En este post voy a explicar cómo realizar un bakcup de una base de datos en Oracle 10g R2 a través de un archivo bat, el cual, se ejecuta en el servidor a través de una tarea programada.
Lo primero que se debe de realizar es conectarse al servidor de base de datos como usuario sysman y realizar las siguientes acciones:
1.- Indicarle a Oracle el directorio en el cual se almacenará el backup de la base de datos a través de la siguiente sentencia SQL:
CREATE DIRECTORY nombre_del_directorio AS 'ruta_fisica'
donde:
nombre_del_directorio es el alias para Oracle de la ruta física en donde se almacenará el bakcup.
ruta_fisica es la ruta en el servidor en donde se almacenará el backup. Esta ruta debe de ser en el mismo equipo en donde se encuentra el servidor de Oracle, por ejemplo: C:/Respaldos
2.- Dar los permisos de lectura/escritura para dicho directorio a través de la siguiente sentencia SQL:
GRANT READ,WRITE ON DIRECTORY nombre_del_directorio TO usuario
donde:
usuario es la cuenta del usuario para la cual se desea realizar el backup de su esquema.
3.- Crear el archivo bat encargado de realizar el backup. Éste se realiza a través de la siguiente sentencia SQL:
EXPDP usuario/contraseña DIRECTORY=nombre_del_directorio DUMPFILE=nombre_del_archivo
donde:
nombre_del_archivo es el nombre del backup con extensión DMP.
Finalmente, el arhivo bat queda programado de la siguiente manera:
@echo off
set FECHA=%date%_%time%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%
set FECHA=%FECHA: =%

expdp usuario/contraseña directory=nombre_del_directorio dumpfile=%FECHA%.dmp
El script crea un archivo de backup con un nombre similar a: 17102008_11243038.DMP donde la estructura del nombre del backup es: FECHA_HORA.EXTENSION. Entonces, para el ejemplo dato anteriormente, el archivo de backup fue creado el 17 de octubre del 2008 a las 11:24:30,38.
NOTA 1: Con este script hay que tener cuidado en la sección set FECHA=%FECHA:/=% ya que si el separador de fecha del sistema es '-' y no '/' el script no funcionará, sólo se debe de corregir por el caracter adecuado para su correcto funcionamiento.
NOTA 2: Si se olvidaron de los alias que han creado en la base de datos, lo pueden ver a través de la siguiente sentencia SQL:
SELECT * FROM dba_directories
NOTA 3: Para importar un backup a la base de datos, se debe de realizar a través de la siguiente instrucción en una consola de windows:
IMPDP usuario/contraseña DIRECTORY=nombre_del_directorio DUMPFILE=nombre_del_archivo
Saludos.