1. OBJETIVOS

  2. Breve explicación de cómo hacer un hotbackup de una base de datos ORACLE


  3. ¿QUE ES UN HOTBACKUP DE UNA BASE DE DATOS ORACLE?
  4. El hotbackup o backup en caliente se suele realizar cuando por requisitos de disponibilidad de la base de datos 24 h al día es imposible pararla para realizar un backup.El procedimiento de backup en caliente es parecido al backup en frio.Para realizar este tipo de backup necesitamos conocer dos comandos sencillos:
    begin backup
    end backup

    Por su puesto para poder hacer este tipo de backup, la base de datos debe de estar configurada en modo archivelog

    Para realizar cualquier tipo de backup hay que tener claro cuales son los objetos sobre los que queremos realizar esta copia de seguridad:

    1. Realizar copia de seguridad de los datafiles
    2. Realizar copia de seguridad de los archivelog
    3. Tener una copia del init.ora
    4. Tener backup del/los controlfile/s
  5. CÓMO REALIZAR BACKUP SOBRE LOS DATAFILES

  6. Primero tenemos que ver que datafiles tenemos en nuestra base de datos, para ellos podemos realizar la siguiente consulta a la tabla dba_data_files.

    select tablespace_name,file_name from dba_data_files order by tablespace_name;

    Para cada uno de los datafiles asociados a un tablespace hacemos lo siguiente:

    Alter tablespace <nb_tablespace> begin backup;
    --copiamos todos los datafiles con la utilidad del SO a otro sitio cada uno de los datafiles
    --asociados.
    !cp dest1/datafile1 dest2/datafile2
    Alter tablespace end backup;
    Alter system switch logfile;

    Como observamos bloqueamos el tablespace, copiamos todos los datafiles al lugar donde queramos realizar el backup y por último desbloqueamos el tablespace y forzamos los redo.

  7. BACKUP DE LOS ARCHIVELOGS

  8. Esto es tan sencillo como copiar todos los ficheros archivelog a otra ubicación con la utilidad del sistema operativo (copy).
    Una vez que se ha realizado el respaldo ( backup ) de estos ficheros pueden ser borrados de la ubicación original en caso de que queramos librerar un poco de espacio, ya que contienen las ultimas transacciones y si en algún caso queremos realizar una recuperación en el tiempo tenemos todos estos archivos guardados para cuando la recuperación los pida.

  9. BACKUP INIT.ORA

  10. Es recomendable tener una copia del init.ora en algún sitio (con realizar esta copia cada vez que cambie este archivo sería suficiente)

  11. BACKUP CONTROLFILE

  12. Es recomendable tener una copia de los ficheros de control de la base de datos.
    Este backup se puede realizar de la siguiente forma:

    Alter database backup controlfile to destino nombredelfichero;

    Si queremos tener un backup legible de estos ficheros para crear uno nuevo en caso de pérdida, la sentencia a ejecutar es la siguiente:

    Alter database backup controlfile to trace as 'destino/fichero';

    No olvidar las comillas en este último caso para escribir el destino y nombre de fichero

  13. GENERAR UN SCRIPT DE HOTBACKUP

  14. Antes hemos explicado brevemente los pasos a seguir para realizar un backup en caliente, pero como es obvio, estas cosas se suelen tener programadas para realizarse cada x tiempo o diariamente, por lo tanto lo mejor es tener un script que realice todos estos pasos.
    En esta sección pondré un ejemplo de cómo generar automáticamente este script y sobre el cual sólo habrá que realizar unos cambios dependiendo del sistema operativo que se utilice o el destino del hotbackup.

    El script es el siguiente:

    set serveroutput on size 1000000
    set echo off heading off feedback off lines 132
    SPOOL /backup/database/hotbackup/unic/backupunic.sql
    DECLARE
    CURSOR c_tablespace IS
    SELECT a.tablespace_name
    FROM dba_tablespaces a
    ORDER BY 1;
    CURSOR c_datafiles (in_ts_name IN VARCHAR2) IS
    SELECT a.file_name
    FROM dba_data_files a
    WHERE a.tablespace_name = in_ts_name
    ORDER BY 1;
    v_sid VARCHAR2(100) := 'unic';
    v_backup_com VARCHAR2(100) := '!cp ';
    v_remove_com VARCHAR2(100) := '!rm';
    v_dest_loc VARCHAR2(100) := '/backup/database/hotbackup/unic/';
    v_dest_arc VARCHAR2(100) := '/backup/database/archivelog/unic/';
    v_init_ora VARCHAR2(100) := '/opt/oracle/admin/unic/pfile/initunic.ora';
    BEGIN
    DBMS_Output.Disable;
    DBMS_Output.Enable(10000000);
    --DBMS_Output.Put_line('sqlplus /nolog');
    DBMS_Output.Put_line('connect /as sysdba');
    DBMS_Output.Put_line(' ');
    DBMS_Output.Put_line('-- ----------------------');
    DBMS_Output.Put_line('-- Backup de todos los tablespaces');
    DBMS_Output.Put_line('-- ----------------------');
    FOR cur_ts IN c_tablespace LOOP
    DBMS_Output.Put_line(' ');
    DBMS_Output.Put_line('ALTER TABLESPACE ' || cur_ts.tablespace_name || ' BEGIN BACKUP;');
    FOR cur_df IN c_datafiles (in_ts_name => cur_ts.tablespace_name) LOOP
    DBMS_Output.Put_line(v_backup_com || ' ' || cur_df.file_name || ' '|| v_dest_loc);
    END LOOP;
    DBMS_Output.Put_line('ALTER TABLESPACE ' || cur_ts.tablespace_name || ' END BACKUP;');
    DBMS_Output.Put_line('ALTER SYSTEM SWITCH LOGFILE;');
    END LOOP;
    DBMS_Output.Put_line(' ');
    DBMS_Output.Put_line('-- -----------------------------');
    DBMS_Output.Put_line('-- Backup todos los archived redo logs');
    DBMS_Output.Put_line('-- -----------------------------'); DBMS_Output.Put_line(v_backup_com || ' ' || '/s/oracle/archive/unic/*' || ' ' || v_dest_arc );
    DBMS_Output.Put_line(' ');
    DBMS_Output.Put_line('-- ----------------------');
    DBMS_Output.Put_line('-- Backup los controlfile');
    DBMS_Output.Put_line('-- ----------------------');
    DBMS_Output.Put_line('ALTER DATABASE BACKUP CONTROLFILE TO ''' || v_dest_loc || v_sid || 'Controlfile.backup'';');
    DBMS_Output.Put_line(' ');
    DBMS_Output.Put_line(' ');
    DBMS_Output.Put_line('-- ----------------------');
    DBMS_Output.Put_line('-- backup de archivo init.ora');
    DBMS_Output.Put_line('-- ----------------------');
    DBMS_Output.Put_line(v_backup_com || ' ' || v_init_ora || ' ' || v_dest_loc );
    DBMS_Output.Put_line(' ');
    DBMS_Output.Put_line('EXIT');
    END;
    /

    EXPLICACIONES SOBRE EL SCRIPT Y MODIFICACIONES A REALIZAR PARA ADAPTARLO A CADA BACKUP

    linea 3: Poner una ruta para generar el fichero que exista

    linea 15: v_backup_com es el comando que utiliza el sistema operativo para copiar, en linux cp con el signo ! (puesto que estamos dentro de SQL>), si fuese windows tendiramos que poner $ocopy

    linea 16: v_remove_com es el comando que utiliza el sistema operativo para borrar, en linux rm con el signo ! ( puesto que estamos dentro de SQL>) si fueste windows tendríamos que poner $del

    linea 17: Poner una ruta que exista para la variable v_dest_loc ( donde se van a copiar los datafiles )

    linea 18: Poner una ruta que exista para la variable v_dest_arc ( donde se van a copiar los archivelog)


    El script generado en la dirección del spool contendrá todas las sentencias necesarias para hacer un hotbackup del sistema, solo habrá que ejecutar el script obtenido en el spool y ya tendremos realizado el hotbackup sin olvidarnos de ningun datafile ni archivo importante.


Escribe un comentario:

Autor:

Comentarios:

por Anónimo | 1/23/2007 4:52:27 PM

RE: Cómo hacer un hotbackup de una base de datos Oracle

esta muy bueno este script. Felicitaciones

por Anónimo | 5/26/2007 8:26:43 AM

RE: Cómo hacer un hotbackup de una base de datos Oracle

cool -_-

por Carolina | 3/14/2008 7:28:12 PM

RE: Cómo hacer un hotbackup de una base de datos Oracle

Muy bueno , practico y útil !!!!! Muchas gracias !!!!!
Saludos,
Carolina

por Jose Francisco | 2/3/2010 1:25:20 PM

RE: Cómo hacer un hotbackup de una base de datos Oracle

Me crea el archivo, pero no aparece contenido :(

por Jorge Pérez | 3/8/2010 3:33:18 PM

RE: Cómo hacer un hotbackup de una base de datos Oracle

Excelente.

Solo una observación. El tablespace TEMP no permite darle el alter begin backup. Y según se encuentra en los foros no es necesario hacer backup de él, porque se crea y se destruye en el startup/shutdown.



Buscar errores de Oracle


Buscar en la web

 
Web orasite.com
· Tutoriales
- Export / Import Oracle 9i
- Instalación Oracle 10g
- Archivos de configuración de red para Oracle
- init.ora spfile.ora fichero de parámetros oracle
- Export Oracle 10g
- Administración de usuarios
- Configurar modo archivelog
- Introducción Oracle 10g
- Arrancar o parar base de datos Oracle
- Tunning Oracle
- Instalación statspack
- Seguridad listener Oracle 10g
- Parámetros memoria SGA
- Activar auditoria de la base de datos
- Oracle Jobs (9i)
- Controlar espacio tablespaces
- Recover database until time
- Hotbackup de una base de datos Oracle
- Consultas sobre V$
- Privilegios sysoper y sysdba
- Búsquedas en Oracle 10g case-insensitive
- Cambiar ubicación base de datos
- Bloquear acceso a base de datos por IP
- Loadjava y Dropjava en Oracle
- Configuración de memoria
- Problemas Oracle Jobs
- Encriptación e integridad de datos en Oracle
- Instalación de la máquina virtual Java
- Cambiar a modo restricted session
- Recuperación modo noarchivelog
- Reconstrucción de índices
 
· Oracle FAQ
- Oracle database
 
· Noticias
- Oracle OpenWorld 2009
- Oracle compra Sun
- Oracle 11g presentada
- Oracle vulnerable a inyección SQL en cursores
- Procesos de negocio con Oracle
- OracleXE para Debian
 
· Descargas
- Free Toad
 
· Errores Oracle
· Libros sobre Oracle
· Sitios relacionados
- Trabajos de Oracle
- ZonaOracle.com
- AjpdSoft
- La Web del Programador
· Sitios recomendados
- Cronica24.com
- TPV
- Buscar trabajo
Los contenidos de esta web son producto de la colaboración de sus usuarios, por lo que puede haber erratas. Si encuentras una información incorrecta agradeceremos que nos lo comuniques en nuestra dirección:
Cualquier información aquí publicada es de libre distribución, siempre y cuando se haga referencia mediante un link al documento original.
Orasite.com