martes, 31 de mayo de 2011

Como exportar un Esquema de tu Base de Datos con Datapump y con Export

Como exportar un Esquema de tu Base de Datos con Datapump y con Export
El otro dia recibi una pregunta de como hacer un respaldo de un esquema, y la respuesta es que puede ser con dos herramientas, una que es el clasico
export de Oracle y la otra con una herramienta llamada Datapump. Y aunque con las dos puedes completar el mismo trabajo, la razon para utilizar una o la otra
son muy distintas.

Una razon muy util para usar datapump es que si llegas a tener una falla, vamos a decir por falta de espacio o hasta por que se reinicio la instancia,
tiene un comando llamado START_JOB, para poder reiniciarlo, de la misma manera podemos definir el numero de procesos paralelos para efectuar el trabajo,
y entre otras de las ventajas que tiene, es que te permite estimar el tiempo que se va a tardar.

Pero una de las grandes ventajas que tiene la utileria de Export, es que esta crea los archivos en el cliente, y no en el servidor como Datapump lo hace,
y si no tienes acceso al servidor, esta es realmente la mejor manera de exportar tu informacion.

Aqui dos ejemplos de como exportar un esquema, primero con Datapump y luego con la utileria Export

Como te mencionaba arriba, Datapump crea los archivos en el servidor, asi que lo primero que tenemos que hacer, es crear un directorio en la base de datos
donde queremos que se generen los archivos dump.

DBATEST> CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS '/mount/copy01/DBATEST/export01';

Directory created.


Una vez que creamos el directorio, creamos un archivo de parametros en donde le vamos a decir que esquema vamos a exportar, asi como el nombre del trabajo,cuantos procesos en paralelo queremos que corra y
el nombre del archivo con un comodin %U para que se generen automaticamente el numero de archivos tipo dump.

oracle $ cat expdp.par
LOGFILE=SCHEMA_EXPORT.log
DIRECTORY=DATA_PUMP_DIR
VERSION=COMPATIBLE
JOB_NAME=SCHEMA_EXPORT
PARALLEL=5
DUMPFILE=SCHEMA_EXPORT_%U.dmp
SCHEMAS=HR


Ahora si, ejecutamos Datapump con el archivo de parametros que acabamos de crear

oracle $ expdp system parfile=expdp.par

Starting "SYSTEM"."SCHEMA_EXPORT": system/******** parfile=expdp.par
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 640 KB
. . exported "HR"."COUNTRIES" 6.367 KB 25 rows
. . exported "HR"."DEPARTMENTS" 7.007 KB 27 rows
. . exported "HR"."EMPLOYEES" 16.85 KB 108 rows
. . exported "HR"."JOBS" 6.992 KB 19 rows
. . exported "HR"."JOB_HISTORY" 7.062 KB 11 rows
. . exported "HR"."LOCATIONS" 8.273 KB 23 rows
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
. . exported "HR"."REGIONS" 5.476 KB 4 rows
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Master table "SYSTEM"."SCHEMA_EXPORT" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SCHEMA_EXPORT is:
/mount/copy01/DBATEST/export01/SCHEMA_EXPORT_01.dmp
/mount/copy01/DBATEST/export01/SCHEMA_EXPORT_02.dmp
/mount/copy01/DBATEST/export01/SCHEMA_EXPORT_03.dmp
Job "SYSTEM"."SCHEMA_EXPORT" successfully completed at 23:29:20


A diferencia de datapump, con export no necesitamos crear un directorio en la base de datos, el archivo tipo dump, se va a generar en la locacion donde
ejecutemos el export. Vamos a crear un archivo de parametros para el export en donde de igual manera que Datapump definimos el esquema,

oracle $ cat exp.par
file=EXP_SCHEMA_EXPORT.dmp
log=EXP_SCHEMA_EXPORT.log
buffer=10000000
owner=HR
statistics=none


Igual, ejecutamos la utileria export con el archivo de parametros que creamos arriba

oracle $ exp system parfile=exp.par

Export: Release 11.2.0.2.0 - Production on Fri May 27 02:10:39 2011

About to export specified users ...
. exporting pre-schema procedural objects and actions
. exporting foreign function library names for user HR
. exporting PUBLIC type synonyms
. exporting private type synonyms
. exporting object type definitions for user HR
About to export HR's objects ...
. exporting database links
. exporting sequence numbers
. exporting cluster definitions
. about to export HR's tables via Conventional Path ...
. . exporting table COUNTRIES 25 rows exported
. . exporting table DEPARTMENTS 27 rows exported
. . exporting table EMPLOYEES 108 rows exported
. . exporting table JOBS 19 rows exported
. . exporting table JOB_HISTORY 11 rows exported
. . exporting table LOCATIONS 23 rows exported
. . exporting table REGIONS 4 rows exported
. exporting synonyms
. exporting views
. exporting stored procedures
. exporting operators
. exporting referential integrity constraints
. exporting triggers
. exporting indextypes
. exporting bitmap, functional and extensible indexes
. exporting posttables actions
. exporting materialized views
. exporting snapshot logs
. exporting job queues
. exporting refresh groups and children
. exporting dimensions
. exporting post-schema procedural objects and actions
. exporting statistics
Export terminated successfully without warnings.


Conclusion
Aqui hay dos maneras de exportar un esquema de nuestra base de datos, es sencillo y muchas veces de gran utilidad y junto con este script, puedes exportar los metadatos del Usuario Lo unico que te recomiendo, es que no utilices este metodo como un metodo valido de respaldos, ya que carece de muchas propiedades de un verdadero respaldo de la Base de Datos.