Autor Tema: Oracle Data Pump en Oracle Database 10g (respaldos)  (Leído 9608 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado SiKa

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 2548
  • .
Oracle Data Pump en Oracle Database 10g (respaldos)
« : noviembre 25, 2009, 10:04:27 am »
Oracle Data Pump en Oracle Database 10g

Uno de los tantos Dolores de cabeza que un DBA (DataBase Administrator) puede llegar a tener;  son la administración de respaldos de la base de datos. A partir de la versión 10g Oracle incluye su poderoso Data Pump, Oracle Data Pump como parte de las nuevas “features” de esta versión, es mas flexible y mas rápida alternativa a “exp” normal que ya conocemos. En esta ocasión, no hablare de respaldos realizados con la ayuda del RMAN porque ese es asunto aparte.

UNICIANDO EL ENTORNO PARA DATA PUMP.

Si queremos hacer uso del data pump, debemos como primer paso crear el entorno de trabajo; este incluye la creación de un directorio lógico en la base de datos y a su vez dicho directorio debe existir físicamente en el servidor.

En el siguiente ejemplo: Accesamos a la base de datos DATA10G con el usuario sys (que el administrador de la db)  y  desbloqueamos el usuario scott que es un usuario que viene por defecto para usos didácticos en la db y le asignamos privilegios para que pueda escribir en el disco que vamos a crear.

Código: [Seleccionar]
CONN sys/password@DATA10g AS SYSDBA
ALTER USER scott IDENTIFIED BY tiger ACCOUNT UNLOCK;
GRANT CREATE ANY DIRECTORY TO scott;

Si nuestra db esta en un entorno windows, la instruccion quedaria de esta manera:

Código: [Seleccionar]
CREATE OR REPLACE DIRECTORY
RESPALDOS AS
'd:\RESPALDOS\';
GRANT READ, WRITE ON DIRECTORY RESPALDOS TO scott;

La unidad y la carpeta “RESPALDOS” debe existir fisicamente.
Si estamos trabajando en un ambiente unix o linux el script quedaria asi:

Código: [Seleccionar]
CREATE OR REPLACE DIRECTORY
RESPALDOS AS
'/u01/app/oracle/oradata/';
GRANT READ, WRITE ON DIRECTORY test_dir TO scott;

Una vez tenemos creado nuestro disco de respaldos, podemos empezar a realizar los respaldos que necesitemos. Existen varias metodologías de respaldos de los cuales mencionare algunos:

Table Exports
Los table exports son utilizados para hacer respaldos específicos a una o más tablas, suelen ser respaldos de emergencia preventivos.

Código: [Seleccionar]
expdp scott/tiger@DATA10g tables=EMP,DEPT directory=RESPALDOS dumpfile=EMP_DEPT.dmp logfile=expdpEMP_DEPT.log
Notese que en la sintaxis estamos utilizando cuatro parametros:
TABLES: Indicando que tablas queremos respaldar
DIRECTORY: Indicando el nombre del directorio al cual queremos enviar el archivo de respaldo
DUMPFILE: El nombre de nuestro archivo de respaldo
LOGFILE:El nombre de nuestro archivo LOG. Para posterior revision del resultado obtenido


Schema Exports

Esta metodologia de respaldo con data pump es utilizada para respaldar esquemas completos de una base de datos Oracle.

Código: [Seleccionar]
expdp scott/tiger@DATA10g schemas=SCOTT directory=RESPALDOS dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
En esta metodologia si necesitamos excluir algun objeto del esquema utilizamos el parametro EXCLUDE:

Database Full Exports
Para realizar respaldo full (completo) de la base de datos:

Código: [Seleccionar]
expdp system/password@db10g full=Y directory=RESPALDOS dumpfile=DB10G.dmp logfile=expdpDB10G.log

Data Pump API
Esta metodologia es de gran utilidad porque nos permite, mediante codigo PL, poder automatizar de alguna manera nuestros respaldos y lanzarlos desde lamisma instancia.
Código: [Seleccionar]
/* Formatted on 2009/10/30 15:11 (Formatter Plus v4.8.8) */
SET SERVEROUTPUT ON SIZE 1000000

DECLARE
   l_dp_handle        NUMBER;
   l_last_job_state   VARCHAR2 (30) := 'UNDEFINED';
   l_job_state        VARCHAR2 (30) := 'UNDEFINED';
   l_sts              ku$_status;
BEGIN
   l_dp_handle :=
      DBMS_DATAPUMP.OPEN (operation        => 'EXPORT',
                          job_mode         => 'SCHEMA',
                          remote_link      => NULL,
                          job_name         => 'EMP_EXPORT',
                          VERSION          => 'LATEST'
                         );
   DBMS_DATAPUMP.add_file (handle         => l_dp_handle,
                           filename       => 'DESA9331102009.dmp',
                           DIRECTORY      => 'RESPALDOS'
                          );
   DBMS_DATAPUMP.add_file (handle         => l_dp_handle,
                           filename       => 'DESA9331102009.log',
                           DIRECTORY      => 'RESPALDOS',
                           filetype       => DBMS_DATAPUMP.ku$_file_type_log_file
                          );
   DBMS_DATAPUMP.metadata_filter (handle      => l_dp_handle,
                                  NAME        => 'SCHEMA_EXPR',
                                  VALUE       => '= ''SOFTWORKS'''
                                 );
   --/*  FILTRADO
   DBMS_DATAPUMP.metadata_filter
      (handle           => l_dp_handle,
       NAME             => 'NAME_EXPR',
       VALUE            => 'NOT IN (''TABLA1'')',
       object_type      => 'TABLE'
      );
   --*/   
   DBMS_DATAPUMP.start_job (l_dp_handle);
   DBMS_DATAPUMP.detach (l_dp_handle);
END;
/